我有一个标准的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()"
这可以做更多的变异技巧。
像这样:
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字段,但这不应该太重要。