Я пытаюсь настроить logstash для управления моими различными источниками журналов, одним из которых является Mongrel2. Формат, используемый Mongrel2 является tnetstring
, где регистрационное сообщение примет формуШаблоны фильтра groch для logstash
86:9:localhost,12:192.168.33.1,5:57089#10:1411396297#3:GET,1:/,8:HTTP/1.1,3:200#6:145978#]
Я хочу, чтобы написать свои собственные шаблоны ГРОК извлечь определенные поля из вышеуказанного формата. Я получил помощь по this question, пытаясь извлечь хост. Так что, если в grok-patterns
я определяю
M2HOST ^(?:[^:]*\:){2}(?<hostname>[^,]*)
, а затем в logstash конф указать
filter {
grok {
match => [ "message", "%{M2HOST}" ]
}
}
это работает, как ожидалось. Проблема, которую я сейчас имею, - это указать несколько шаблонов, например. M2HOST, M2ADDR и т.д. Я попытался определения дополнительных параграфов в одних и тех же ГРОК-шаблоны файл
M2HOST ^(?:[^:]*\:){2}(?<hostname>[^,]*)
M2ADDR ^(?:[^:]*\:){3}(?<address>[^,]*)
и изменение logstash конф
filter {
grok {
match => [ "message", "%{M2HOST} %{M2ADDR}" ]
}
}
, но теперь я просто получаю ошибку _grokparsefailure
.
ваша проблема здесь конкатенация, думаю заменив M2HOST и M2ADDR своим регулярным выражением, вы получите '^ (?: [^:] * \:) {2} (? [^,] *)^(?: [^:] * \ :) {3} (? [^,] *) 'У вас есть начало линии в середине вашего матча, что, очевидно, не может Работа. Основная идея с puliples ALIASES состоит в том, чтобы разделить часть регулярного выражения, чтобы повторно использовать их, но не волшебным образом объединить их. –
Tensibai
ах ок. Я хочу применить к сообщению сообщение M2HOST, а затем сообщение M2ADDR. Знаете ли вы, какой будет правильный синтаксис? –
Ну, я бы поработал с тестировщиком grok, который вы уже знаете, попробуйте, чтобы соответствовать каждому полю, после этого вы можете разделить интересные части. для этого exmeple я бы сказал (испытал) '(?: [^:] *:) {2} (? [^,] *) [^:] * :(? [^,] *)' будет делать –
Tensibai