elasticsearch 按名称模式删除字段,elasticsearch,logstash,elasticsearch,Logstash" /> elasticsearch 按名称模式删除字段,elasticsearch,logstash,elasticsearch,Logstash" />

elasticsearch 按名称模式删除字段

elasticsearch 按名称模式删除字段,elasticsearch,logstash,elasticsearch,Logstash,我们目前正在使用带有elasticsearch的logstash来记录一些应用程序事件。 某些事件包含动态命名的字段。 我们希望应用一个过滤器,在进入elasticsearch之前删除或合并它们。 例如: { "Root": { "EventType": "Info", "Timestamp": 20150713153757.758 }, "Event": { "Message": "itemsViews Created in 1 mS

我们目前正在使用带有elasticsearch的logstash来记录一些应用程序事件。 某些事件包含动态命名的字段。
我们希望应用一个过滤器,在进入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'}