使用 filebeat 和 logstash 标记索引

hel*_*y77 4 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}"
  }
}
Run Code Online (Sandbox Code Playgroud)

/etc/logstash-forwarder.conf

"files": [
    {
      "paths": [
        "/var/log/httpd/ssl_access_log",
        "/var/log/httpd/ssl_error_log"
       ],
      "fields": { "type": "apache", "tags": "mytag" }
    },
Run Code Online (Sandbox Code Playgroud)

相关的 filebeat 配置是:

/etc/filebeat/filebeat.yml

filebeat:
  prospectors:
    -
     paths:
       - /var/log/httpd/access_log
     input_type: log
     document_type: apache
     fields:
       tags: mytag
Run Code Online (Sandbox Code Playgroud)

在 Kibana 中,mytag我看到的不是我beats_input_codec_plain_applied所有的索引。

rie*_*ann 8

我可以看到这个主题中提到的两个问题。让我为我自己的利益进行总结,并希望也能帮助解决这个问题的其他游客。

  1. 在 filebeat 探矿者中添加标签的格式(每个探矿者标签自 5.0 或 1.2.3 以来可用,如 aj 所注意到的)配置

坏的:

 fields:
       tags: mytag
Run Code Online (Sandbox Code Playgroud)

好的:

 fields:
       tags: ["mytag"]
Run Code Online (Sandbox Code Playgroud)

然而,还有一个更重要的问题

  1. 标签正在串联。我们希望标签是一个数组,但是如果我们将新添加的标签发送到 logstash,我们将看到它们是 ES 中的连接字符串。

如果您只添加一个标签,则解决方法(按照 hellb0y77)是在 logstash(中央服务器端)中删除 filebeat 添加的自动标签:

filter {
    if "beats_input_codec_plain_applied" in [tags] {
        mutate {
            remove_tag => ["beats_input_codec_plain_applied"]
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果想在 filebeat 中添加多个标签,这将不起作用。

必须让 logstash 拆分一个连接的字符串并将每个项目添加到标签。在这种情况下,将 filebeat 上的标签放在某个自定义字段中,而不是“标签”字段,并从 logstash 上的该自定义字段中提取它们,也许会更好。

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

如果您可以删除 logstash,那么这也可能是您的解决方案。当从filebeat 直接向elasticsearch 发送日志时,标签按预期出现在ES 中。


hel*_*y77 2

我已经解决了向 Logstash 插入过滤器的问题:

filter {
    if "beats_input_codec_plain_applied" in [tags] {
        mutate {
            remove_tag => ["beats_input_codec_plain_applied"]
        }
    }
}
Run Code Online (Sandbox Code Playgroud)