Похожие чаты

Всем привет, есть вопрос по дупликации сообщений в полях после

обработки grok фильтрами в Logstash.
Кейс следующий: множество сервисов посылает различного рода логи в Logstah с помощью Filebeat, в Logstash пайплайне определяется тип сервиса и на основании этого, к лог-лайну применяются grok фильтры, например:
filter {
if "api_access" in [service_name] {
grok {
match => { "message" => \[%{DATA:IP_address}\]\[%{DATA:User_ID}\]" }
}
grok {
match => { "message" => "\[%{DATA:IP_address}\]\[%{DATA:User_ID}\]\[%{DATA:Session_ID}\]" }
}
grok {
match => { "message" => "\[%{DATA:IP_address}\]\[%{DATA:User_ID}\]\[%{DATA:Session_ID}\]\[%{DATA:loglevel}\] ExecutionTime = %{NUMBER:exec_time}" }
}
grok {
match => { "message" => "\[%{DATA:IP_address}\]\[%{DATA:User_ID}\]\[%{DATA:Session_ID}\]\[%{DATA:loglevel}\]\[%{DATA:category}\](?<log_message>%{GREEDYDATA})" }
}
}
else if {check other services}
}
Примеры немного урезаны чтобы повысить читаемость.
Идея была такова: последний Grok фильтр является общим, т.е. он применится в последнюю очередь и всё равно обработает лог даже если предыдущие фильтры не подошли.
Как я понимаю, проблема в том, что к сообщению поочередно применятся каждый grok фильтр, в конечном итоге у меня несколько одинаковых значений в IP_address, User_ID, Session_ID, loglevel и т.д.
Пробовал использовать break_on_match с true/false, но результат идентичный, данные дуплицированы.
Подскажите пожалуйста, как это можно исправить сохранив при этом идею множества Grok фильтров?
Спасибо.

2 ответов

15 просмотров
Pavel-V Автор вопроса

Для потомков так сказать: Решил кейс, необходимо было правильно установить порядок Grok фильтров и заключить их в if условия с проверкой на наличие _grokparsefailure in [tags], т.е. если есть проблема с парсингом -> двигаемся дальше по условию, если нет, оставляем последнее отфильтрованное сообщение

Pavel-V Автор вопроса
Pavel V
Для потомков так сказать: Решил кейс, необходимо б...

Также добавлю, что можно обойтись и другим методом, более быстрым, распарсив логлайн сначала жадным Grok фильтром через {GREEDYDATA:log_message} например и затем уже обрабатывать данные из log_message в последующих Grok фильтрах.

Похожие вопросы

Обсуждают сегодня

А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
I arrived here after a Chico Crypto show highlighted the project & the Team - the fact that the Team had a long history of successfully working with household names gave me e...
Banter is Bullish
1
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
Где в Астане можно купить мясо для шашлыков?
Dancing Іңұқәһүғө
21
Hi I have recently invested in ewt . Any way to stake it ?
K ì V
11
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
Добрый день подскажите пожалуйста может кто то сталкивался с ошибками Sentry 22.10.0 развернутым из helm чарт в Kubernetes? Изначально 3 дня назад очень стало много событий ух...
Tire4 Finist Devops
1
Ну чё, сегодня все в гавно?))
ᅠ🚀
20
Карта сайта