elasticsearch - 如何在logstash中基于传导创建多个索引

标签 elasticsearch logstash-grok logstash-configuration filebeat logstash-file

尝试在logstash中为Elasticsearch创建多个索引。但是我的“如果传导”不会创建任何单一索引,如果没有传导则无法正常工作。

但是,如果我将输入作为文件使用,并且在logstash中使用而不使用filebeat,则按我的期望它可以正常工作。谁能帮我解决。

###filebeat.yml###
=============
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /home/user/vinit/pache/*.log
  fields:
    log_type: apache-log

- type: log
  enabled: true
  paths:
    - /home/user/vinit/boss/*.log
  fields:
    log_type: jboss-log
  fields_under_root: true

###pipeline-conf.conf###
==================

input {
  beats {
    port => 5044
  }
}

filter {
    grok {
           match => { "message" => "^%{IP:CLIENT_IP} (?:-|%{USER:IDEN}) (?:-|%{USER:AUTH}) \[%{HTTPDATE:CREATED_ON}\] \"(?:%{WORD:REQUEST_METHOD} (?:/|%{NOTSPACE:REQUEST})(?: HTTP/%{NUMBER:HTTP_VERSION})?|-)\" %{NUMBER:RESPONSE_CODE} (?:-|%{WORD:BYTES}) (?:-|%{WORD:EXECUTION_TIME})"}
    add_field => {
                "LOG_TYPE" => "api-log"
        }
    overwrite => [ "message" ]
    }
    grok {
           match => { "message" => "%{HTTPDATE:CREATED_ON}%{NOTSPACE}%{SPACE} (?:-|%{IP:CLIENT_IP})%{SPACE} %{NOTSPACE}(?:-|%{WORD:REQUEST_METHOD}%{SPACE}) (?:-|%{NOTSPACE:REQUEST})(?: HTTP/%{NUMBER:HTTP_VERSION})%{NOTSPACE}(?:-|%{GREEDYDATA:OTHER_INFO}) (?:-|%{NUMBER:RESPONSE_CODE}) (?:-|%{WORD:BYTES}) (?:-|%{WORD:EXECUTION_TIME})"}
    add_field => {
                "LOG_TYPE" => "web-log"
        }
    overwrite => [ "message" ]
    }
    grok {
           match => { "message" => "%{TIME:CREATED_ON}%{SPACE}\[(?<THREAD>[^\]]+)?\] %{WORD:METHOD}%{SPACE}%{JAVACLASS:CLASS} - (?<MESSAGE_LOG>[^\r\n]+)((\r?\n)(?<extra>(.|\r?\n)+))?"}
    add_field => {
                "LOG_TYPE" => "jboss-log"
        }
    overwrite => [ "message" ]
    }
}
output {
   if [fields][log_type] == "apache-log"{
     elasticsearch {
     hosts => ["localhost:9200"]
     manage_template => false
     index => "server-logs-apache"
     }
  }
   if [fields][log_type] == "jboss-log" {
     elasticsearch {
     hosts => ["localhost:9200"]
     manage_template => false
     index => "server-logs-jboss"
     }
  }
   stdout { codec => rubydebug }    
}

##Also Tried##
==============
output {
       if "apache-log" in [fields][log_type] {
         elasticsearch {
         hosts => ["localhost:9200"]
         manage_template => false
         index => "server-logs-apache"
         }
      }
       if "jboss-log" in [fields][log_type] {
         elasticsearch {
         hosts => ["localhost:9200"]
         manage_template => false
         index => "server-logs-jboss"
         }
      }
       stdout { codec => rubydebug }    
    }

我期望结果作为索引:server-logs-apache,server-logs-jboss,但实际输出为空。

最佳答案

您要添加的字段是大写字母

add_field => { "LOG_TYPE" => "web-log" }

而Elasticsearch则将大小写不同的字段分开。您应该添加小写的字段-“log_type”

关于elasticsearch - 如何在logstash中基于传导创建多个索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54166323/

相关文章:

elasticsearch - 在 Elasticsearch 中对嵌套类型使用命名查询(matched_queries)?

node.js - Elasticsearch 客户端 http 流量错误,正在关闭连接

elasticsearch - 如果logstash将数据发送到elasticsearch的速度快于索引速度,那会发生什么?

postgresql - LOGSTASH:如何设置Logstash以获取所有查询的数据而不仅仅是其中的一部分?

elasticsearch - 在elasticsearch中搜索null和值(但不存在不存在的值)

scala - 如何序列化elastic4s ElasticSearch客户端以与Spark RDD一起运行?

apache - Logstash:修改apache日期格式

elasticsearch - 在logstash中使用grok模式解析我的json文件?

elasticsearch - 如何从ansible_results解析logstash/grok中的json

elasticsearch - 如何使用grok在logstash中对日志消息进行分组?