Logstash——條件判斷


 

前言

有時您只想在特定條件下過濾或輸出事件。為此,您可以使用條件(conditional)。比如在elk系統中想要添加一個type類型的關鍵字來根據不同的條件賦值,最后好做統計。

 

條件語法

if EXPRESSION {
  ...
} else if EXPRESSION {
  ...
} else {
  ...
}

 

比較操作

  • 相等: ==, !=, <, >, <=, >=
  • 正則: =~(匹配正則), !~(不匹配正則)
  • 包含: in(包含), not in(不包含)

 

布爾操作

  - and(與), or(或), nand(非與), xor(非或)

 

一元運算符

表達式可能很長且很復雜。表達式可以包含其他表達式,您可以使用!來取消表達式,並且可以使用括號(...)對它們進行分組。

  • - !(取反)
  • - ()(復合表達式)
  • !()(對復合表達式結果取反)

 

示例

如若action是login則mutate filter刪除secret字段:

filter {
  if [action] == "login" {
    mutate { remove_field => "secret" }
  }
}

若是正則匹配,成功后添加自定義字段:

filter {
    if [message] =~ /\w+\s+\/\w+(\/learner\/course\/)/ {
        mutate {
            add_field => { "learner_type" => "course" }
        }
    }
}

在一個條件里指定多個表達式:

output {
  # Send production errors to pagerduty
  if [loglevel] == "ERROR" and [deployment] == "production" {
    pagerduty {
    ...
    }
  }
}

在in條件,可以比較字段值:

filter {
  if [foo] in [foobar] {
    mutate { add_tag => "field in field" }
  }
  if [foo] in "foo" {
    mutate { add_tag => "field in string" }
  }
  if "hello" in [greeting] {
    mutate { add_tag => "string in field" }
  }
  if [foo] in ["hello", "world", "foo"] {
    mutate { add_tag => "field in list" }
  }
  if [missing] in [alsomissing] {
    mutate { add_tag => "shouldnotexist" }
  }
  if !("foo" in ["hello", "world"]) {
    mutate { add_tag => "shouldexist" }
  }
}

not in示例:

output {
  if "_grokparsefailure" not in [tags] {
    elasticsearch { ... }
  }
}

 

 

參考資料:

官方文檔-conditionals

ELK logstash 配置語法(24th)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM