用于全局变化子索引模式的Logstash配置 [英] Logstash configuration to globally mutate sub index patterns
本文介绍了用于全局变化子索引模式的Logstash配置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个ELK堆栈,带有一些已配置的索引模式。作为内部需求的一部分,我需要将一个json对象(它是该索引模式的一部分)全局编辑为";string";。 到目前为止,这样的json对象是由许多子字段随机填充的,比如";date";、";temps";以及更多的子字段。 所有这些都由ELK自动管理,但我需要将它们全部处理并转换(强制转换)为&q;字符串&q;。
所以,基本配置如下:
type A: "long"
type B: "int"
type C: "string"
type D: "json object"
其中,类型D是嵌套的json对象,它包括(作为子字段)许多其他索引模式和字段,如(例如)";typeD.date";、";typeD.temps";、";typeD.explit";等等。
我需要将所有&typeD*
";对象转换为字符串。
到目前为止,我尝试将.conf与logstash一起使用,但不起作用。我将在(多次)尝试后粘贴我的配置。我在自己的本地码头环境中尝试了所有这些配置。
我从中测试logstash的日志名为log_file.json,它包含许多采样行,还包括我要使用此变异操作全局编辑的索引模式。
input {
file{
type => "json"
path => "/home/container/logstash/log_file.json"
start_position => "beginning"
sincedb_path => "/dev/null"
codec => json
}
}
filter {
if [message] =~ /A{.+}z/ {
json {
source => "message"
}
json {
source => "[message][typeD]"
}
mutate {
convert => ["typeD.*","string"]
}
}
}
output {
elasticsearch {
hosts => "http://localhost:9200"
index => "logstash-test-%{+yyyy.MM.dd}"
}
stdout{}
}
另外,通过Kibana登录后,我可以看到logstash已经正确创建并加载了(Conf)文件,但是它仍然无法将索引模式转换为字符串。
我需要知道哪些编辑是配置工作所必需的。logstash配置文件是否需要编辑?设置中是否有任何错误?
谢谢
推荐答案
您不能像convert => ["typeD.*","string"]
那样进行通配符突变。你必须用递归函数编写一个Ruby过滤来迭代[TYPED]的所有内容。类似于
ruby {
code => '
def stringify(object, name, event)
if object == nil
event.set(name, "nil" )
elsif object.kind_of?(Hash) and object != {}
object.each { |k, v| stringify(v, "#{name}[#{k}]", event) }
elsif object.kind_of?(Array) and object != []
object.each_index { |i|
stringify(object[i], "#{name}[#{i}]", event)
}
else
event.set(name, object.to_s)
end
end
stringify(event.get("typeD"), "[typeD]", event)
'
}
也就是说,如果您要将数据发送到Elastic Search,最好在ElasticSearch中使用通配符匹配字段名的dynamic template执行此操作。
这篇关于用于全局变化子索引模式的Logstash配置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文