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所有的索引。
我可以看到这个主题中提到的两个问题。让我为我自己的利益进行总结,并希望也能帮助解决这个问题的其他游客。
坏的:
fields:
tags: mytag
Run Code Online (Sandbox Code Playgroud)
好的:
fields:
tags: ["mytag"]
Run Code Online (Sandbox Code Playgroud)
然而,还有一个更重要的问题
如果您只添加一个标签,则解决方法(按照 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 中。
我已经解决了向 Logstash 插入过滤器的问题:
filter {
if "beats_input_codec_plain_applied" in [tags] {
mutate {
remove_tag => ["beats_input_codec_plain_applied"]
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19732 次 |
| 最近记录: |