МНОГОКРАТНО, ЕСЛИ ЛИБО СОСТОЯНИЕ В LOGSTASH С И ОПЕРАТОРОМ - PullRequest
0 голосов
/ 31 октября 2019

если я использую эту логику в logstash, она работает

if "a" in [msg] or "b" in [msg]

, но мне нужно использовать и кондиционирование. если я заменю или на и , то произойдет сбой. Есть ли какая-нибудь идея?

Это не удастся

if "a" in [msg] and "b" in [msg]

Что я хочу сделать, это когда есть выбранные строки a и b, и использовать фильтр, как определено, Любая помощь высоко ценится

1 Ответ

1 голос
/ 31 октября 2019

Это работает для меня.

filter {  
  grok {
    match => [ "message", "%{GREEDYDATA:my_data}" ]
    tag_on_failure => [ "_failure", "_grokparsefailure" ]
  }

  if "sandeep" in [my_data] and "kanabar" in [my_data]{
    mutate {
      add_field => { "status" => "Both name and surname present"}
    }
  }
  else if "sandeep" in [my_data] or "kanabar" in [my_data]{
    mutate {
      add_field => { "status" => "either name/surname present"}
    }
  }
}

Выход тестового прогона:

Input --> name:"sandeep test"
Output:
{
    "@timestamp" => 2019-10-31T11:27:33.941Z,
       "my_data" => "name:\"sandeep test\"",
      "@version" => "1",
          "host" => "M22959216G3QD",
       "message" => "name:\"sandeep test\"",
        "status" => "either name/surname present"
}
Input --> :"test kanabar"
Output:
{
    "@timestamp" => 2019-10-31T11:27:43.389Z,
       "my_data" => "name:\"test kanabar\"",
      "@version" => "1",
          "host" => "my_host",
       "message" => "name:\"test kanabar\"",
        "status" => "either name/surname present"
}
Input --> :"sandeep kanabar"
Output:
{
    "@timestamp" => 2019-10-31T11:27:50.516Z,
       "my_data" => "name:\"sandeep kanabar\"",
      "@version" => "1",
          "host" => "M22959216G3QD",
       "message" => "name:\"sandeep kanabar\"",
        "status" => "Both name and surname present"
}
...