LINUX.ORG.RU
ФорумAdmin

elasticsearch. filebeat разбор нестрандартных логов.

 ,


0

1

Нужно разобрать логи nginx в которых много того, что обычно не выводят в лог, подскажите, как написать паттерн который поможет разбирать все данные? Смотрю в сторону logstash но там на сколько я понимаю можно использовать уже готовые шаблоны, но не формировать свой паттерн. Меня бы полностью устроило чтобы задать собственный шаблон и названия полей для каждой из частей данных.

Подскажите примеры или как добиться? Спасибо!


Не совсем понятно, кто то тебя заставляет использовать готовые шаблоны для логсташа? Возьми и напиши свой. Если хочеш чтобы тебе написали твой шаблон, то пример логов на пастебин.

anonymous
()

Посмотрите в сторону grok. Если ваши логи можно описать шаблонами, конечно.

Deleted
()

Про grok уже сказали, единственное что хочется заметить - если будете парсить регулярками большой объем данных логстэш будет жрать ресурсы как не в себя. В моем случае оказалось проще логи nginx нормализовать и писать вообще json'ом.

micronekodesu ★★★
()
Ответ на: комментарий от micronekodesu

пример шаблона может кто-то привести? дальше я сам разберусь как. искал в сети - одна чепуха выходит вместо полезного.

VoDD87
() автор топика
Ответ на: комментарий от VoDD87

Плохо искали, вот например https://www.elastic.co/blog/do-you-grok-grok

Вот пример оттуда если вы прям Ъ

220.181.108.96 - - [13/Jun/2015:21:14:28 +0000] "GET /blog/geekery/xvfb-firefox.html HTTP/1.1" 200 10975 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"
%{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:verb} %{DATA:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:response:int} (?:-|%{NUMBER:bytes:int}) %{QS:referrer} %{QS:agent}
micronekodesu ★★★
()
Ответ на: комментарий от micronekodesu

а как быть если мне нужны все common форматы и плюс мой лог nginx своеобразный?

в примере ниже данные просто задваиваются на выходе

input { stdin { } }

filter {

grok { match => { «message» => «%{COMBINEDAPACHELOG}» } }

grok { match => { «message» => «%{COMBINEDAPACHELOG}» } }

date { match => [ «timestamp» , «dd/MMM/yyyy:HH:mm:ss Z» ] }

}

output { elasticsearch { hosts => [«localhost:9200»] } stdout { codec => rubydebug } }

VoDD87
() автор топика
Ответ на: комментарий от VoDD87

то есть я хочу скзаать что filebeat будет мне сливать вообще все логи, а я задаю grok у только то что мне нужно, как быть с остальным?

+ где то в логах можно найти записи которые logstash не смог распарсить?

VoDD87
() автор топика
Ответ на: комментарий от VoDD87

а как быть если мне нужны все common форматы

Правильный вариант это добавить на стороне filebeat какое-нибудь служебное поле, которое будет отображать «тип» лога, и потом в logstash проверять это поле и запускать нужный grok-фильтр или какие-то другие обработчики. Смотрите в сторону директивы field у filebeat. Иначе ваше сообщение будет прогоняться через все фильтры, спамить ошибками и вообще давать лишнюю нагрузку.

Если вы не знаете лог в каком формате придет - ну используйте все фильтры, логстеш прекратит обработку после того как успешно распарсит сообщение, просто вы зря будете расходовать ресурсы.

и плюс мой лог nginx своеобразный?

Так вы и описываете свой лог регулярками для grok, он не заставляет вас использовать какие-то «предустановленные» форматы. Пример я в предыдущем сообщении привел.

я задаю grok у только то что мне нужно, как быть с остальным?

У вас приходит сообщение с полем message, в котором хранится строка из лога. В случае grok вы говорите как распарсить эту строку и какие данные в результате в какие поля записать. Дальше вы работаете уже с этими полями, которые наполнил grok, само сообщение вам не нужно - можно либо просто оставить его, либо в логстеше удалить (в том же grok remove_filed => "message")

+ где то в логах можно найти записи которые logstash не смог распарсить?

Ну да, в логах логстеша, /var/log/logstash или как там у вас сконфигурировано. Но мне например с этим логом работать не удобно - проще написать конфиг, запустить logstash в режиме не-демона и по одному пихать ему сообщения и проверять как работает. Потому что потом из лога доставать это та еще задача. Ну и можно тестировать grok-фильры например в http://grokdebug.herokuapp.com/ .

micronekodesu ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.