шаблон фильтра logstash Grok не найден

Я пытался создать несколько пользовательских шаблонов Grok для logstash. Большинство из них работают нормально, но один поставил меня в тупик. Шаблон такой:

WINUSER (?<=User:\s)\w+ 

Вот образец данных, по которым ведется поиск:

2015-04-14 14:06:18 exchange.ows1.osborneit.com INFO 1149 NT AUTHORITY\NETWORK SERVICE Remote Desktop Services: User authentication succeeded:

User: administrator
Domain: .
Source Network Address: 172.24.1.32

Я тестировал это на http://grokconstructor.appspot.com/do/match, и он работает правильно, но похоже, что logstash его игнорирует. Кажется, я не могу понять, что делаю не так.

Ниже представлена ​​моя конфигурация logstash:

input {
   udp {
      type => "eventlog"
      codec => json
      port => 5140
   tags => ['windows', 'eventlog']
   }
}
filter {
  if [type] == "eventlog" {
  grok {
    match => [
    "message", "%{IP:client}",
    "message", "%{WINUSER:username}"
    ]
  }
 }
}
output {
  elasticsearch { host => localhost }
  stdout { codec => json }
}

Обновление: похоже, проблема не в шаблоне, а в порядке совпадения. Если я перемещаю совпадение WINUSER выше совпадения IP, оно работает, а совпадение IP - нет. Не уверен, почему оба не совпадают.


person George Osborne    schedule 14.04.2015    source источник


Ответы (1)


Оказывается, проблема была в разделе фильтра конфигурационного файла. Мне пришлось разбить совпадения Grok на несколько строк, как показано ниже.

filter {
  if [type] == "eventlog" {
  grok {
    match => [ "message", "%{IPV4:client}" ]
  }
  grok {
    match => [ "message", "%{WINUSER:username}" ]
  }
 }
}
person George Osborne    schedule 27.04.2015