ELK. Склеивание лог...
 

ELK. Склеивание логов.

5 Записи
2 Пользователи
0 Reactions
2,700 Просмотры
(@progk)
Записи: 9
Active Member
Создатель темы
 

Здравствуйте.

Изучаю ELK-стек. Разбирать однострочные логи получается, проблема со склейкой многострочного лога.

Вот пример куска

[2019-03-26T09:30:00,877][INFO][36:44040130377103334][PlatformInfoBean][Send 'getAccountInfo' response: GetAccountInfoResponse:[userName]=User;[banTime]=null;]
[2019-03-26T09:30:00,879][DEBUG][36:44040130519649266][SoapHandler][
Outbound message:
<?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header/>
<S:Body>
<GetAccountInfoResponse xmlns="http://platforminfo.processing.ru/">
<UserName>User</UserName>
</GetAccountInfoResponse>
</S:Body>
</S:Envelope>
]
[2019-03-26T09:30:06,441][DEBUG][12960:44040136082174637][SoapHandler][
Inbound message:
<?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header/>
<S:Body>
<ns0:GetAccountInfoRequest xmlns:ns0="http://platforminfo.processing.ru/">
<ns0:localSystemId>11550000</ns0:localSystemId>
<ns0:appPkId>01</ns0:appPkId>
<ns0:profileId>2180000</ns0:profileId>
</ns0:GetAccountInfoRequest>
</S:Body>
</S:Envelope>
]
[2019-03-26T09:30:06,442][INFO][12960:44040136083827797][PlatformInfoBean][Receive 'getAccountInfo' request: GetAccountInfoRequest:[localSystemId]=11550000;[appPkId]=01;[profileId]=2180000;]
[2019-03-26T09:30:06,442][INFO][12960:4404013608380000][PublicBeanLocal_3nga0w_Impl][Start operation 'accountInfo', params:Request:[userId]=2180000;[region]=RU;]
[2019-03-26T09:30:06,442][INFO][12960:4404013608380000][PublicExecuter][Подготовлен запрос: ?account_id=2180000&language=ru&application_id=9cf167606e5ed897fcbb34fba6d00bc0]

На клиенте в Filebeat (секция filebeat.inputs) добавляю шаблон для склеивания

multiline.pattern: '\[$'
multiline.negate: true
multiline.match: after
multiline.flush_pattern: '^\]$'

И все бы ничего, Inbound message склеивается теперь в один message. НО все, что не подходит под шаблон тоже склеивается. Т.е. последние сообщения из приведенного лога

[2019-03-26T09:30:06,442], [2019-03-26T09:30:06,442], [2019-03-26T09:30:06,442] идут в одном message. Но правильнее их разделять по отдельности. 

При этом смотрю оф.документацию  https://www.elastic.co/guide/en/beats/filebeat/current/multiline-examples.html  (раздел multiline.match).  Если я правильно понимаю примеры, то это нормальная работа при настройке multiline. Возможно ли сохранить склейку и разделение построчного вывода логов в отдельных message ?

Скрины прикладываю.

 

 
Размещено : 26.03.2019 09:49
Метки темы
(@progk)
Записи: 9
Active Member
Создатель темы
 

Второй файл во вложении

 
Размещено : 26.03.2019 09:50
(@zerox)
Записи: 926
Prominent Member Admin
 

Когда я пытался склеивать большие логи, столкнулся с теми же проблемами. Я не знаю, как это красиво обходить. Получается очень негибкая и громоздкая система. Нужно разделять потоки логов.

Самое простое и очевидное решение - если есть возможность, изменить формат вывода логов, например, в json и отправлять в elk стэк в json формате. Возможно, есть более удобные способы формирования логов для elk, чтобы склеивать их в другом месте, а потом уже передавать в elk.

 
Размещено : 26.03.2019 10:17
(@progk)
Записи: 9
Active Member
Создатель темы
 

Вопрос решен. 

Надо было подходить к решению с другой стороны. 

Изменил паттерн

multiline.pattern: '^\[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}'
multiline.negate: true
multiline.match: after

т.е. начал разбор по началу строки (по дате). Поскольку в каждой строке (даже в многострочном логе) в начале стоит дата, то и склейка происходит по первому полю.

Официальная документация слишком "узкая" для такой большой и сложной системы...

 
Размещено : 27.03.2019 14:19
(@zerox)
Записи: 926
Prominent Member Admin
 

Спасибо за решение. 

Да, документация достаточно полная, но очень общая. С частными случаями приходится очень долго разбираться. Я так возился с правилами на ruby в logstash. Возможность заявлена и описана в документации, но как на практике писать рабочие правила не очень было понятно. 

 
Размещено : 27.03.2019 15:37
Используешь Telegram? Подпишись на канал автора →
This is default text for notification bar