2017-02-08 101 views
0

我有一个Logstash过滤器集,它将字段Alert_level设置为基于匹配消息的正则表达式的整数。Logstash添加字段值

例子:

if [message] =~ /(?i)foo/ {mutate {add_field => { "Alert_level" => "3" }}} 
if [message] =~ /(?i)bar/ {mutate {add_field => { "Alert_level" => "2" }}} 

这些病例不是相互排斥的,有时会导致与2个或多个值事件Alert_level

message => "foobar" 
Alert_level => "2, 3" 

我想在Alert_level加起来值一个总的整数,其中上面的例子会导致这样的结果:

message => "foobar" 
Alert_level => "5" 
+0

你的意思是在** if **中有两个条件? – Kulasangar

回答

-1

当我明白你的问题,你需要的运营商内部的如果同时检查条件:

if "foobar" in [message] and "5" in [Alert_level]{ 
    //do something 
} 
+0

它在这个特定的情况下工作。但是我有超过50多行这样= = – Jam

+1

在这种情况下,你必须找出另一种方法来过滤掉它。如果警报级别如此之高,就像添加*标签*一样。你对条件操作符有什么期待?要*过滤*所有警报级别?我不希望看到另一个解决方案,因为不幸的是有多个条件语句。 – Kulasangar

+0

我不认为这是OP要求 –

1

有一个在logstash本身没有数学,但我喜欢darth_vader的标签的想法(如果你的水平每个只命中一次)。

您可以为警报级别设置标签,例如“alert_3”,“alert_4”等等,然后放入ruby过滤器以循环遍历它们,拆分数值并将它们一起添加到新字段中。 (使用像“alert_”这样的前哨前缀可以防止您尝试添加“_grokparsefailure”或其他非警报标记)。

还有其他一些关于SO的例子,用于在ruby中的字段之间循环。