Раздел 40 · Elasticsearch и ELK

Структурированное логирование: JSON вместо grok

junior~15 мин

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

Два урока подряд мы разбирали строки nginx: grok угадывал, где кончается адрес и начинается время, date переводил время из строки. Это работает, но хрупко: поменяй формат лога, и шаблон сломается для всех строк сразу. Для nginx и чужих программ деваться некуда, их формат не выбирают. А вот логи своих сервисов «Гонца» можно с самого начала писать так, чтобы разбирать было нечего.

Анкета вместо письма

Сравни два способа получить данные о человеке. Первый: он пишет письмо в свободной форме, а ты вычитываешь из текста имя, возраст и город. Второй: он заполняет анкету с готовыми полями. Во втором случае ничего угадывать не надо, а ошибиться можно только в самом поле.

Строка 2026-06-30 19:40:11,395 ERROR [http-nio-8080-exec-12] r.g.payments.BankGatewayClient - Payment authorization failed for order 104565 это письмо. А вот анкета, та же запись в JSON:

{"@timestamp":"2026-06-30T19:40:11.395Z","log.level":"ERROR","service.name":"payments","message":"Bank gateway timeout","trace.id":"a55396a66aada17e","order.id":104565,"duration_ms":30004,"error.type":"BankTimeoutException"}

Это структурированное логирование: каждая запись это объект JSON в одну строку. Такой формат называют NDJSON или JSON Lines.

Что это даёт

  • Разбирать нечего. Поля уже есть. Не нужен grok, не нужно угадывать границы.
  • Формат не ломается. Новое поле в записи просто появится в индексе, старые шаблоны от этого не перестанут работать.
  • Типы честные. duration_ms записан числом, order.id числом, и в Elasticsearch по ним сразу можно считать.
  • Контекст в каждой строке. Номер заказа, сервис, trace.id запроса. По trace.id потом находят все записи всех сервисов, через которые прошёл один заказ. Это мы будем делать в уроке про разбор инцидента.

урок из курса

Урок из курса «Elasticsearch и ELK». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.