Клонировать событие logstash N раз в значении из самого сообщения - PullRequest
0 голосов
/ 08 мая 2019

Как я могу клонировать событие "N" несколько раз, когда значение N происходит от самого события.

Например,Событие ввода выглядит так:

"Event1 [Host] Machine A (4 licenses)"
"Event2 [Host] Machine A (2 licenses)"
"Event3 [Host] Machine A (3 licenses)"

Я хочу вывод, который дал бы мне всего 9 событий после клонирования

"Event1 [Host] Machine A"
"Event1 [Host] Machine A"
"Event1 [Host] Machine A"
"Event1 [Host] Machine A"

"Event2 [Host] Machine A"
"Event2 [Host] Machine A"

"Event3 [Host] Machine A"
"Event3 [Host] Machine A"
"Event3 [Host] Machine A"

Вот что я пробовал:

input {
  file {
    path => "/code/file.txt"
    start_position => "beginning"
    sincedb_path => "/dev/null"
  }
}


filter {

   if [message] =~ /licenses/ {  
    grok {        
            match => [ "msg", "%{GREEDYDATA:junk} \(%{NUMBER:number} licenses\)"]
    }   

  }
}
output {
  stdout { codec => rubydebug }
}

У меня есть значение для цикла в переменной «число», но как мне клонировать это «количество раз»

Ответы [ 2 ]

0 голосов
/ 09 мая 2019

Вот как я решил это для всех, кому это интересно:

        grok {        
            match => [ "msg", "%{GREEDYDATA:junk} \(%{DATA:number} licenses\)"]
        }   
        ruby {
            code => '
                totallicenses = event.get("number")
                totallicenses.to_i.times { |i|
                    newevent = event.to_hash
                    generated = LogStash::Event.new(newevent)
                    new_event_block.call(generated)
                }
                event.cancel
                '
        }     

Последнее event.cancel - отмена текущего события и дублирование этого события N раз. В противном случае вы можете уменьшить количество до N-1 в самом цикле.

0 голосов
/ 09 мая 2019

Logstash не имеет циклической конструкции, поэтому похоже, что пришло время перейти на ruby.

Чтобы клонировать событие в ruby, проверьте код, который фильтр фильтрации клонов использует.

...