Я пытался создать несколько пользовательских шаблонов 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 - нет. Не уверен, почему оба не совпадают.