我在使用sprintf来引用elasticsearch输出插件中的事件字段时遇到了麻烦,我不确定为什么。以下是从Filebeat接收到并在过滤完成后发送给Elasticsearch的事件:
{
"beat" => {
"hostname" => "ca86fed16953",
"name" => "ca86fed16953",
"version" => "6.5.1"
},
"@timestamp" => 2018-12-02T05:13:21.879Z,
"host" => {
"name" => "ca86fed16953"
},
"tags" => [
[0] "beats_input_codec_plain_applied",
[1] "_grokparsefailure"
],
"fields" => {
"env" => "DEV"
},
"source" => "/usr/share/filebeat/dockerlogs/logstash_DEV.log",
"@version" => "1",
"prospector" => {
"type" => "log"
},
"bgp_id" => "42313900",
"message" => "{<some message here>}",
"offset" => 1440990627,
"input" => {
"type" => "log"
},
"docker" => {
"container" => {
"id" => "logstash_DEV.log"
}
}
}
我正在尝试根据filebeat的环境为文件编制索引。这是我的配置文件:
input {
http { }
beats {
port => 5044
}
}
filter {
grok {
patterns_dir => ["/usr/share/logstash/pipeline/patterns"]
break_on_match => false
match => { "message" => ["%{RUBY_LOGGER}"]
}
}
}
output {
elasticsearch {
hosts => ["elasticsearch:9200"]
index => "%{[fields][env]}-%{+yyyy.MM.dd}"
}
stdout { codec => rubydebug }
}
我认为所引用的事件字段在到达Elasticsearch输出插件时已经被填充了。但是,在kibana端,它不注册格式化索引。相反,其原因如下:
我做错了什么?
答案 0 :(得分:1)
在Elasticsearch Output插件文档中:
https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html#plugins-outputs-elasticsearch-manage_template
是需要其他索引名称的支持,还是想要 通常,更改模板中的映射,自定义模板可以 通过将template设置为模板文件的路径来指定。
将manage_template设置为false将禁用此功能。如果您需要 更好地控制模板创建(例如创建索引) 动态地基于字段名称),您应该将manage_template设置为 并使用REST API手动应用模板。
默认情况下,如果使用除logstash-%{+ YYYY.MM.dd}以外的其他索引名称,elasticsearch要求您指定自定义模板。要禁用此功能,我们需要添加 manage_template => false 键。
因此,通过这套新的信息,有效的配置应为:
output {
elasticsearch {
hosts => ["elasticsearch:9200"]
index => "%{[fields][env]}-%{+yyyy.MM.dd}"
manage_template => false
}
stdout { codec => rubydebug }
}