Как я могу исключить события синтаксического анализа с помощью фильтра kv, который не соответствует шаблону

#elasticsearch #filter #logstash #kivy-language

#elasticsearch #Фильтр #logstash #kivy-language

Вопрос:

Я анализирую журналы из многих демонов решения UTM. Конфигурация Grok и kv выглядит следующим образом:

  grok {
      match => [ "message", "%{SYSLOGPROG} %{NOTSPACE:syslog_hostname} %{DATA:syslog_program}(?:[%{POSINT:syslog_pid}])?: %{GREEDYDATA:syslog_message}" ]
    }
    kv {
      id => "syslogkv"
      source => "syslog_message"
      trim_key => " "
      trim_value => " "
      value_split => "="
      field_split => " "
    }
  

Обычно события выглядят так

     <30>2019:04:23-20:13:38 hostname ulogd[5354]: id="2001" severity="info" sys="SecureNet" sub="packetfilter" name="Packet dropped" action="drop" fwrule="60002" initf="eth3.5" outitf="eth5" srcmac="c8:9c:1d:af:68:7f" dstmac="00:1a:8c:f0:f5:23" srcip="x.x.x.x" dstip="y.y.y.y" proto="17" length="56" tos="0x00" prec="0x00" ttl="63" srcport="5892" dstport="53" 
  

и анализируется без каких-либо проблем

Но когда некоторые демоны генерируют события, похожие (например, WAF)

 <139>2019:04:23-16:21:38 hostname httpd[1475]: [security2:error] [pid 1475:tid 3743300464] [client x.x.x.x] ModSecurity: Warning. Pattern match "([\\~\\!\\@\\#\\$\\%\\^\\amp;\\*\\(\\)\\-\\ \\=\\{\\}\\[\\]\\|\\:\\;\"\\'\\\xc2\xb4\\\xe2\x80\x99\\\xe2\x80\x98\\`\\<\\>].*?){8,}"
  

мой вывод прерывается, и logstash прекращает обработку любых журналов.
Как я могу исключить события синтаксического анализа kv с помощью регулярного выражения или любого шаблона?
Простыми словами — не используйте kv, если первые слова в syslog_message начинаются с «[» или любого другого регулярного выражения.

Комментарии:

1. Если я исключу эти события из фильтра kv, он не будет анализировать события. Помогите мне, пожалуйста, написать фильтр для событий, который начинается с символа «[» и содержит события типа: [field:string] [field:string] [field string] также может содержать случайные данные, которые я не хочу разбирать между [][] , например: [field:string] randomdata [field:string]

Ответ №1:

Оберните свой фильтр kv в условие для поля:

 if [syslog_message] !~ /^[/ {
    kv { }
}
  

Комментарии:

1. разве это не должно выглядеть так if [syslog_message] !~ /^[/ { kv { } } ?

2. Исправлено, чтобы отменить условие.

3. Если я исключу эти события из фильтра kv, он не будет анализировать события. Помогите мне, пожалуйста, написать фильтр для событий, который начинается с символа «[» и содержит события типа: [field:string] [field:string] [field string] также может содержать случайные данные, которые я не хочу разбирать между [][] , например: [field:string] randomdata [field:string]

4. Я думаю, у вас есть три варианта: (1) измените исходный вывод на лучший формат; (2) преобразуйте вывод во что-то, что может быть проанализировано с помощью kv{}; (3) создайте свой собственный шаблон grok для сообщения. Я бы выбрал # 1 или # 3.