Logstash / Elasticsearch – 在输出conf中将字段转换为小写字母

我有一个标准的ELK栈,当前存储了大量的日志输出。 我正在尝试将我的索引分隔为特定源码。

作为我的FileBeatsconfiguration的一部分,一些标准字段总是作为每个消息的一部分生成(并且是特定于位置的),我想用它作为我的ES索引的基础:

output { elasticsearch { hosts => ["http://elasticsearch.mydomain.com:80"] index => "logstash-%{+YYYY.MM.dd}-%{[fields][identifier]}" } } 

但是,ES拒绝一些索引,因为该字段包含大写字母 – 标识符具有可接受的值,如myfoo,但也可以是MyBar

 [logstash.outputs.elasticsearch] Could not index event to Elasticsearch. {"reason"=>"Invalid index name [logstash-2017.06.02-MyBar], must be lowercase"} 

框不是必需的,我可以添加一个mutatefilter来强制小写有问题的字段,但我宁愿存储标识符字段与适当的shell,但使用较小的版本的索引名称。

在弹性search输出中是否有可以调用的函数来降低有问题的字段? 就像是

  index => "logstash-%{+YYYY.MM.dd}-%{[fields][identifier]}.lowercase()" 

这可以做更多的变异技巧。

  1. 使用mutate创build一个新的字段,设置为您的标识符。
  2. 在第二个mutate中,小写那个新的字段。
  3. 在输出中使用新的字段。

像这样:

 filter { mutate { add_field => { "lc_identifier" => "%{fields}%{identifier}" } } mutate { lowercase => [ "lc_identifier" ] } } output { elasticsearch { hosts => ["http://elasticsearch.example.com:80"] index => "logstash-%{+YYYY.MM.dd}-%{[lc_identifier]}" } } 

你最终将在你的索引中有一个lc_identifier字段,但这不应该太重要。