Как извлечь значение из журнала с помощью grok и logstash

Я должен извлечь значение из журнала, состоящего из строк следующим образом:

<38>1 [2017-03-15T08:45:23.168Z] apache.01.mysite.com event=login;src_ip=xxx.xxx.xxx.xxx\, xxx.xxx.xxx.xxx\, xxx.xxx.xxx.xxx;site=FE-B1-Site;cstnr=1454528;user=498119;result=SUCCESS 

Например, с %{IP:source} я получаю только первый IP-адрес, но иногда у меня есть 3 IP-адреса. Как я могу извлечь все IP, «cstnr», «результат» и «пользователь»?


person karmax    schedule 20.03.2017    source источник


Ответы (1)


Похоже, у вас есть вложенный формат ключ-значение с разделителями. Первый разделитель — ;, каждый из них — key=value. Кроме того, значения разделены на ,'. У вас достаточно grok, чтобы получить первый IP-адрес, но я предлагаю сделать что-то немного другое:

  1. Используйте grok, чтобы получить всю строку после имени вашего сайта.
  2. Используйте фильтр kv с field_split => ';', который создаст поля с теми же именами, что и ваши ключи.
  3. Use the csv filter on the src_ip address captured in the kv filter stage.
    • Use columns => [ cstnr', 'result', 'user' ] to get those fields named right.
person sysadmin1138    schedule 20.03.2017