【问题标题】:How to create multiple indexes based on conduction in logstash如何在logstash中基于传导创建多个索引
【发布时间】:2019-01-13 05:27:54
【问题描述】:

尝试在logstash 中为elasticsearch 创建多个索引。但是我的“如果传导”没有创建任何单个索引,如果没有传导它可以正常工作。

但是,如果我在不使用 filebeat 的情况下将输入用作文件并在 logstash 中使用,那么它可以按照我的预期工作。谁能帮我解决。

###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 但实际输出为空。

【问题讨论】:

  • 我在你的配置中没有看到 apache-log,只有 web-log、api-log、jboss-log
  • @Mysterion 我没有使用默认的 Apache-log 模式我正在使用自定义日志模式并且它正在工作。但是我无法理解如何在logstash传导中使用filebeat字段。
  • 不,我的意思是在你的数据中你有字段名称 api-log 而不是 apache 日志,因为你稍后会检查
  • 正确!这些 api-log 和 web-log 是 apache 日志。

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


【解决方案1】:

您正在添加大写的字段

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

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

【讨论】:

  • 我将其更改为 custom_type,它只是一个静态值。帮助在logstash中使用filebeat变量。
  • 我有 3 个 logstash conf 文件,即 first-input.conf、second-filter.conf、third-output.conf。我创建了一个文件并将这三个 conf 文件配置组合在 beat-data.conf 文件中。现在它可以按我的意愿工作了。
猜你喜欢
  • 1970-01-01
  • 2021-01-26
  • 1970-01-01
  • 1970-01-01
  • 2021-06-07
  • 1970-01-01
  • 1970-01-01
  • 2015-07-08
  • 2019-05-24
相关资源
最近更新 更多