Продолжение цикла статей:
- Магия преобразований: ЖР, ТЖ, RAS/RAC, логи - универсальное решение Vector
- Магия преобразований Vector, часть 2: технологический журнал
Посвящена тонкостям универсального разбора последовательного журнала регистрации (не в формате SQLite) и пример отправки ошибок напрямую в Sentry.
Sentry - это система отслеживания ошибок (баг-трекинг), более подробно можно ознакомиться в следующих статьях:
- Cбор и анализ ошибок при помощи Sentry, или как упростить жизнь себе и пользователям
- Часовой на страже логов
- Использование Sentry в контексте розничной сети
- Группировка проблем в Sentry
Практическая часть
На входе в конвейер Vector имеет многострочный текст одной строки журнала регистрации (как и в ситуации с технологическим журналом):
Но часть реквизитов (Users, Computers, Applications, Events, Metadata, Servers, Ports и PortsAdd) представляют из себя ссылки на значения, находящиеся в общем файле 1Cv8.lgf, расположенным в том же каталоге:
Вероятно, это сделано для быстрого формирования списков отбора по этим реквизитам.
Первичная внутренняя картина на входе блока Sources типа File (отладочный вывод в формате JSON; правая часть строк message обрезана на скриншоте, она полностью содержит многострочную строку):
Первым шагом в блоке трансформации с типом remap с помощью регулярного выражения разложим message на составляющие:
Далее, в этом же блоке, выполним конвертации некоторых реквизитов и используем "таблицы обогащения" (информация о них содержится в первой части):
Следующим шагом нам необходимо "обогатить" часть реквизитов за счёт значений из файла 1Cv8.lgf. Сделать это можно в Vector только в отдельном блоке трансформации с типом lua:
Авторство кода на lua принадлежит Алексею Калилецу (axilab), оригинальная статья Выгрузка журнала регистрации 1С в ClickHouse с помощью Vector, публикуется с незначительными изменениями с письменного согласия автора.
Профит! Данные можно отправлять дальше, к примеру, в ClickHouse или ElasticSearch.
Экспорт в Sentry
Если вам нужен только экспорт ошибок из журнала регистрации в Sentry, то после первого блока трансформации нужно добавить блок-фильтр (что бы не тратить ресурсы сервера на обогащение данных, которые в последствии будут отброшены).
Что бы данные отправить в Sentry, добавим отдельный блок фильтрации и отдельный блок трансформации, где приведём данные к нужному нам формату, например:
Завершаем блоком sinks с типом http, проверяем:
Примечание
Хотелось бы обратить внимание, что если вы экспортируете журнал регистрации (не важно какими средствами) в реальном времени, то информация о статусах транзакций будет недостоверна, т.к. строки в журнал не только добавляются, но и изменяются - по мере изменения статусов транзакций. Так же хотелось бы отметить, что в баг-трекинге 1С зарегистрирована ошибка № 70066363, связанная с некорректной работой данного механизма при определённых условиях (каких именно не известно):