2017-02-08 77 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中的字段之間循環。