使用 filebeat 和 logstash 标记索引
Tags index with filebeat and logstash
我使用 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 中,我在所有索引上都看到了 beats_input_codec_plain_applied
,而不是 mytag
。
[xxxx@yyyy init.d]#猫/etc/filebeat/filebeat.yml
### 由 Puppet 管理的 Filebeat 配置(Ruby 1.8 版本)###
文件拍:
spool_size: 1024
publish_async: 错误
idle_timeout:10秒
registry_file:.filebeat
config_dir: /etc/filebeat/conf.d
输出:
日志存储:
主持人:
- 1.1.1.1:5033
托运人:
标签:
- foo-beta
上述指定标签的方式有效,但在 logstash 中您仍然会看到默认值 "beats_input_codec_plain_applied"。不确定如何摆脱它。
默认情况下,在 Filebeat 中,您定义的那些字段会添加到名为 fields
的键下的事件中。要更改此行为并将字段添加到事件的根目录中,您必须设置 fields_under_root: true
.
此外,在 Filebeat 5.X 中,tags
is a configuration option under the prospector. And this list of tags merges with the global tags configuration. This pull request 包含几个使用 fields
、fields_under_root
和 tags
用于 Beats 5.X 的示例。
以下是您应该如何更改 Filebeat 的配置 1.X:
filebeat:
prospectors:
- paths:
- /var/log/httpd/access_log
input_type: log
document_type: apache
fields:
tags: ["mytag"]
fields_under_root: true
我已经解决了向 logstash 插入过滤器的问题:
filter {
if "beats_input_codec_plain_applied" in [tags] {
mutate {
remove_tag => ["beats_input_codec_plain_applied"]
}
}
}
我可以看到这个主题中提到的两个问题。为了我自己的利益,让我总结一下,并希望其他也为这个问题而苦苦挣扎的访问者。
- 在 filebeat prospector 中添加标签的格式(每个 prospector 标签从 5.0 或 1.2.3 开始可用,正如 a-j 所注意到的)配置
不好:
fields:
tags: mytag
好:
fields:
tags: ["mytag"]
但是,还有更重要的问题
- 正在连接标签。我们希望标签是一个数组,但如果我们将新添加的标签发送到 logstash,我们将看到它们是 ES 中的串联字符串。
如果您只添加一个标签,解决方法(根据 hellb0y77)将删除 filebeat 添加的自动标签,在 logstash(中央服务器端)中:
filter {
if "beats_input_codec_plain_applied" in [tags] {
mutate {
remove_tag => ["beats_input_codec_plain_applied"]
}
}
}
如果想在 filebeat 中添加多个标签,这是行不通的。
必须让 logstash 拆分一个连接的字符串并将每个项目添加到标签中。也许在这种情况下会更好,将 filebeat 上的标签放在某个自定义字段中,而不是 "tags" 字段中,然后从 logstash 上的自定义字段中提取它们。
无论如何,似乎没有办法通过更改filebeat配置使其工作。唯一的方法是对接收的 logstash 过滤器链进行一些解析。另见 https://github.com/elastic/filebeat/issues/220
如果您可以删除 logstash,那么这也可能是适合您的解决方案。从filebeat直接发送日志到elasticsearch时,标签如期出现在ES中。
我使用 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 中,我在所有索引上都看到了 beats_input_codec_plain_applied
,而不是 mytag
。
[xxxx@yyyy init.d]#猫/etc/filebeat/filebeat.yml
### 由 Puppet 管理的 Filebeat 配置(Ruby 1.8 版本)###
文件拍: spool_size: 1024 publish_async: 错误 idle_timeout:10秒 registry_file:.filebeat config_dir: /etc/filebeat/conf.d
输出: 日志存储: 主持人: - 1.1.1.1:5033
托运人: 标签: - foo-beta
上述指定标签的方式有效,但在 logstash 中您仍然会看到默认值 "beats_input_codec_plain_applied"。不确定如何摆脱它。
默认情况下,在 Filebeat 中,您定义的那些字段会添加到名为 fields
的键下的事件中。要更改此行为并将字段添加到事件的根目录中,您必须设置 fields_under_root: true
.
此外,在 Filebeat 5.X 中,tags
is a configuration option under the prospector. And this list of tags merges with the global tags configuration. This pull request 包含几个使用 fields
、fields_under_root
和 tags
用于 Beats 5.X 的示例。
以下是您应该如何更改 Filebeat 的配置 1.X:
filebeat:
prospectors:
- paths:
- /var/log/httpd/access_log
input_type: log
document_type: apache
fields:
tags: ["mytag"]
fields_under_root: true
我已经解决了向 logstash 插入过滤器的问题:
filter {
if "beats_input_codec_plain_applied" in [tags] {
mutate {
remove_tag => ["beats_input_codec_plain_applied"]
}
}
}
我可以看到这个主题中提到的两个问题。为了我自己的利益,让我总结一下,并希望其他也为这个问题而苦苦挣扎的访问者。
- 在 filebeat prospector 中添加标签的格式(每个 prospector 标签从 5.0 或 1.2.3 开始可用,正如 a-j 所注意到的)配置
不好:
fields:
tags: mytag
好:
fields:
tags: ["mytag"]
但是,还有更重要的问题
- 正在连接标签。我们希望标签是一个数组,但如果我们将新添加的标签发送到 logstash,我们将看到它们是 ES 中的串联字符串。
如果您只添加一个标签,解决方法(根据 hellb0y77)将删除 filebeat 添加的自动标签,在 logstash(中央服务器端)中:
filter {
if "beats_input_codec_plain_applied" in [tags] {
mutate {
remove_tag => ["beats_input_codec_plain_applied"]
}
}
}
如果想在 filebeat 中添加多个标签,这是行不通的。
必须让 logstash 拆分一个连接的字符串并将每个项目添加到标签中。也许在这种情况下会更好,将 filebeat 上的标签放在某个自定义字段中,而不是 "tags" 字段中,然后从 logstash 上的自定义字段中提取它们。
无论如何,似乎没有办法通过更改filebeat配置使其工作。唯一的方法是对接收的 logstash 过滤器链进行一些解析。另见 https://github.com/elastic/filebeat/issues/220
如果您可以删除 logstash,那么这也可能是适合您的解决方案。从filebeat直接发送日志到elasticsearch时,标签如期出现在ES中。