Использование if-else с Logsta sh split - PullRequest
0 голосов
/ 13 января 2020

У меня есть строковое поле с именем description, ограниченное _.

Я разделил это следующим образом:

filter {
    mutate {
        split => ["description", "_"]
        add_field => {"location" => "%{[description][3]}"}
    }

Как я могу проверить, являются ли значения разделения пустыми или нет?

Я пытался:

if !["%{[description][3]}"] {
    # do something
}

if ![[description][3]] {
    # do something
}

if ![description][3] {
    # do something
}

Ни один из них не работает.

Цель состоит в том, чтобы в качестве фактического значения было указано значение нового поля location или общее значение c, например NA.

1 Ответ

1 голос
/ 14 января 2020

вы сделали действительно простую ошибку с вашим mutate split.

это

mutate {
        split => ["description", "_"]
        add_field => {"location" => "%{[description][3]}"}
    }

должно было быть

mutate {
        split => ["description"=> "_"]   <=== see I removed the comma and added =>
        add_field => {"location" => "%{[description][3]}"}
    }

вот образец, который я тестировал с

filter {
  mutate {
        remove_field => ["headers", "@version"]
        add_field => { "description" => "Python_Java_ruby_perl " } 
  }
  mutate {
        split => {"description" =>  "_"}
  }

  if [description][4] {
    mutate {
     add_field => {"result" => "The 4 th field exists"}
    }   
  } else {

    mutate {
     add_field => {"result" => "The 4 th field  DOES NOT exists"}
    }   
 }

и результат на консоли (поскольку 4-го элемента нет, он перешел в else block

{
           "host" => "0:0:0:0:0:0:0:1",
         "result" => "The 4 th field  DOES NOT exists",  <==== from else block
     "@timestamp" => 2020-01-14T19:35:41.013Z,
        "message" => "hello",
    "description" => [
        [0] "Python",
        [1] "Java",
        [2] "ruby",
        [3] "perl "
    ]
}
...