#logstash
#logstash
Вопрос:
В моем файле журнала у меня есть записи, подобные следующим:
2014-06-25 12:36:18,176 [10] ((null)) INFO [s=(null)] [u=(null)] Hello from Serilog, running as "David"! [Program]
2014-06-25 12:36:18,207 [10] ((null)) WARN [s=(null)] [u=(null)] =======MyOwnLogger====== Hello from log4net, running as David! [MyOwnLogger]
2014-06-25 12:36:18,209 [10] ((null)) ERROR [s=(null)] [u=(null)] =======MyOwnLogger====== Hello from log4net, running as David! [MyOwnLogger]
которые имеют информацию об уровне журнала, ПРЕДУПРЕЖДАЮТ и ОШИБКА соответственно.
Что я хотел бы сделать, так это выводить в Elasticsearch только те записи, которые имеют уровень ОШИБОК. Вот мой файл конфигурации Logstash:
input {
file {
path => "Somepath/*.log"
}
}
# This filter doesn't work
filter {
if [loglevel] != "error" {
drop { }
}
}
output {
elasticsearch { host => localhost }
stdout {}
}
Фактически, в настоящее время в Elasticsearch ничего не отправляется. Я знаю, что это связано с фильтром, потому что, если его там нет, все записи отправляются в Elastisearch.
Комментарии:
1. где ваш
grok
фильтр для анализа записей?2. @Alcanzar: Как новичок во всем этом, я следовал инструкциям по logstash.net/docs/1.4.2/filters/drop . Существует фильтр удаления, и я не пытаюсь использовать фильтр grok. Я просто не знаю, как его правильно использовать.
3. Взгляните на документы для grok и определите шаблон, который будет соответствовать вашим записям ( grokdebug.herokuapp.com это сайт, который может помочь вам протестировать это).
Ответ №1:
Попробуйте этот фильтр grok. Это работает у меня с вашими журналами
filter {
grok {
match => ["message","%{TIMESTAMP_ISO8601:logtime} [%{NUMBER}] ((%{WORD})) %{WORD:loglevel} %{GREEDYDATA:other}"]
}
if [loglevel]!= "ERROR" {
drop {}
}
}
Во-первых, вам нужно проверить уровень журнала, затем просто вы можете использовать поле, чтобы выполнить условие if else и решить, удалять или нет.