elasticsearch 按名称模式删除字段
我们目前正在使用带有elasticsearch的logstash来记录一些应用程序事件。 某些事件包含动态命名的字段。elasticsearch 按名称模式删除字段,elasticsearch,logstash,elasticsearch,Logstash,我们目前正在使用带有elasticsearch的logstash来记录一些应用程序事件。 某些事件包含动态命名的字段。 我们希望应用一个过滤器,在进入elasticsearch之前删除或合并它们。 例如: { "Root": { "EventType": "Info", "Timestamp": 20150713153757.758 }, "Event": { "Message": "itemsViews Created in 1 mS
我们希望应用一个过滤器,在进入elasticsearch之前删除或合并它们。
例如:
{
"Root": {
"EventType": "Info",
"Timestamp": 20150713153757.758
},
"Event": {
"Message": "itemsViews Created in 1 mSec",
"Cache_11542": true,
"Cache_10242": false,
"Cache_55240": 124
}
}
在这种情况下,我们希望删除对象事件下所有以“Cache_”开头的字段
因此,elasticsearch的输出将是
{
"Root": {
"EventType": "Info",
"Timestamp": 20150713153757.758
},
"Event": {
"Message": "itemsViews Created in 1 mSec"
}
}
有没有办法在logstash配置文件中定义一个填充程序来实现这一点
非常感谢。看起来@magnus-bäck指出的可能是您的解决方案。我最初建议将“remove_field”数组与gsub过滤器结合使用。Gsub到regex匹配您的Cache*字段,然后可以将这些字段重命名为变量,以便在mutate中使用。但是,由于您有n个缓存字段,我更喜欢ruby脚本。:) 虽然这个问题不是的重复,但其中一个答案恰好也回答了这个问题。是的,但该参数不支持OP所需的通配符,因为字段是动态命名的。mutate文档明确声明()它支持动态字段。但是,它不支持regex。想知道是否可以使用gsub将regex模式应用于要删除的字段。所以“缓存\u 12345-->删除\u此\u字段”。那就让变异移除它吧?老实说,我没有尝试过,但似乎是可行的。在这种情况下,动态字段的意思只是过滤器在每个字段名规范中支持
%{varname}
插值,就像foo%{somefield}
的示例一样。不支持通配符或正则表达式。是的,我理解。但是,正如我所说,您可以使用gsub将字段替换为正则表达式匹配项和新字段名。但你是对的。。。ruby过滤器的答案是合法的。你可以用gsub替换字段名,但是你有n个动态字段…无法知道序列何时结束。谢谢,我能够通过以下代码解决这个问题:filter{ruby{code=>“if event['event']!=nil event['event']。to_hash.keys.each do | k | if k=~/Cache.*/event['event']。remove(k)end'}