使用filebeat和logstash标记索引

时间:2016-03-17 09:00:35

标签: logstash logstash-forwarder filebeat

我使用logstash-forwarder和logstash并使用此配置创建带有标签的动态索引:

/etc/logstash/conf.d/10-output.conf

output {
  elasticsearch {
    hosts => "localhost:9200"
    manage_template => false
    index => "logstash-%{tags}-%{+YYYY.MM.dd}"
  }
}

/etc/logstash-forwarder.conf

"files": [
    {
      "paths": [
        "/var/log/httpd/ssl_access_log",
        "/var/log/httpd/ssl_error_log"
       ],
      "fields": { "type": "apache", "tags": "mytag" }
    },

关联的filebeat配置为:

/etc/filebeat/filebeat.yml

filebeat:
  prospectors:
    -
     paths:
       - /var/log/httpd/access_log
     input_type: log
     document_type: apache
     fields:
       tags: mytag

在Kibana,而不是mytag,我在所有索引上都看到了beats_input_codec_plain_applied

4 个答案:

答案 0 :(得分:4)

我可以看到本主题中提到的两个问题。让我总结一下自己的利益,并希望其他访客也能解决这个问题。

  1. 格式在filebeat prospector中添加标签(每个浏览器标签自5.0或1.2.3以来可用作a-j注意到的)配置
  2. 坏:

     fields:
           tags: mytag
    

    好:

     fields:
           tags: ["mytag"]
    

    然而,还有更重要的问题

    1. 标签正在连接。我们希望标签是一个数组,但是如果我们将新添加的标签发送到logstash,我们将看到它们是ES中的连接字符串。
    2. 如果您只添加一个标记,则解决方法(根据hellb0y77)将删除filebeat添加的自动标记,在logstash(中央服务器端)中:

      filter {
          if "beats_input_codec_plain_applied" in [tags] {
              mutate {
                  remove_tag => ["beats_input_codec_plain_applied"]
              }
          }
      }
      

      如果想在filebeat中添加多个标签,这将无效。

      必须将logstash拆分为串联字符串,并将每个项目添加到标记中。也许在这种情况下,将filebeat end上的标签放入某个自定义字段,而不是"标签"字段并从logstash上的自定义字段中提取它们。

      无论如何,似乎没有办法通过更改filebeat配置来使其工作。唯一的方法是在接收logstash过滤器链时进行一些解析。另请参阅https://github.com/elastic/filebeat/issues/220

      如果您可以删除logstash,那么这也可能是解决方案。将日志从filebeat直接发送到elasticsearch时,标记会按预期显示在ES中。

答案 1 :(得分:1)

默认情况下,Filebeat会将您定义的字段添加到名为fields的键下的事件中。要更改此行为并将字段添加到事件的根目录,您必须设置fields_under_root: true

此外,在Filebeat 5.X中,tags是prospector下的配置选项。此标记列表与全局标记配置合并。对于Beats 5.X,此pull request包含使用fieldsfields_under_roottags的几个示例。

以下是如何更改Filebeat 1.X的配置:

filebeat:
  prospectors:
    - paths:
        - /var/log/httpd/access_log
      input_type: log
      document_type: apache
      fields:
        tags: ["mytag"]
      fields_under_root: true

答案 2 :(得分:1)

我已经解决了在logstash中插入过滤器的问题:

filter {
    if "beats_input_codec_plain_applied" in [tags] {
        mutate {
            remove_tag => ["beats_input_codec_plain_applied"]
        }
    }
}

答案 3 :(得分:0)

[xxxx @ yyyy init.d] #cat /etc/filebeat/filebeat.yml

###由Puppet管理的Filebeat配置(Ruby 1.8版本)###

filebeat:     spool_size:1024     publish_async:false     idle_timeout:10s     registry_file:。filebeat     config_dir:/etc/filebeat/conf.d

输出:     logstash:       主机:          - 1.1.1.1:5033

托运人:     标签:        - foo-beta

以上指定标记的方式有效,但在logstash中,您仍会看到默认的" beats_input_codec_plain_applied"。不知道如何摆脱它。