Читать логи: Kibana, Grafana Loki, Sentry
↑ 1.7 Инструменты исследования: DevTools, логи, трассировки · ← Предыдущая · → Следующая
Зачем это аналитику и PM
Браузер видит только ответ странице. Почему сервис отказал, написано в журнале. Аналитику не нужно строить график: нужно сузить время, найти строку и сформулировать вопрос без секретов.
План темы
- поиск по trace id и времени
- уровни логов
- как формулировать запрос в поддержку
Объяснение
Журнал — строки, которые сервис сам решил записать. Интерфейсы разные, привычка одна: интервал времени, потом идентификатор или текст ошибки.
Kibana — экран поиска по журналам, которые лежат в Elasticsearch. Если компания на OpenSearch, экран может называться иначе. Grafana Loki хранит потоки логов, а смотрят их в Grafana. Язык запросов там LogQL. Sentry группирует ошибки в выпуски и события. Это не хвост всех логов сервиса. Подписи кнопок, меню и версии здесь не фиксируются: сверьте с вашим экраном.
Как три разных ящика. В одном карточки за смену. В другом лента по цеху. В третьем только бракованные детали, собранные стопками. Искать «всё» в ящике брака бессмысленно.
Что сужать
Сначала интервал. Без него поиск по короткому слову тонет. Часовой пояс интервала записывают так, как на экране, и дублируют в сообщении. Потом идентификатор запроса, если он есть, либо редкий кусок текста ошибки. Имена полей и меток потока берутся у команды. Пример формы запроса ниже не является запросом вашего стенда.
Уровни помогают отсечь шум. Часто встречаются error, warn или warning, info, debug. Точный набор и написание смотрите у себя. Ошибка пользователя иногда записана как info, если автор лога так решил. Пустой поиск по error не значит, что события не было.
В поддержку уходит не «не работает». Нужны стенд, время с поясом, что нажали, какой код или текст ждали, какой идентификатор нашли, чего в журнале нет.
| Куда смотреть | Что там обычно лежит |
|---|---|
| Kibana | строки журнала за интервал |
| Grafana и Loki | поток логов и фильтр строки |
| Sentry | группа ошибок и одно событие |
Примеры
Форма, не боевой запрос. Имя метки job выдумано для примера.
{job="example"} |= "trace-example"Сообщение в поддержку:
Стенд: test
Время: 2026-10-04 14:10 MSK, плюс-минус 2 минуты
Действие: сохранение учебного заказа
Ожидали код 201, на экране 500
Идентификатор из ответа: trace-example
В журнале за интервал этой строки не нашли. Куда смотреть дальше?Нюансы и подводные камни
- Чужой интервал «сегодня» без пояса сдвигает поиск на часы.
- Sentry без события не заменяет журнал доступа. Туда попадает не каждый отказ.
- Строка лога может содержать почту и токен. В задачу копируют идентификатор и код, не весь абзац.
- Уровень debug на бою часто выключен. Отсутствие подробной строки не доказывает, что шага не было.
- Grafana без выбранного источника показывает не те логи. Источник уточняют, если экран пуст.
Практика
Составьте сообщение в поддержку по учебному отказу: стенд, время с поясом, действие, ожидание и выдуманный идентификатор trace-example.
Ожидаемый результат: по тексту можно искать, не задавая уточняющих вопросов про «когда». В тексте нет живого допуска и нет утверждения, как называется кнопка в вашей Kibana.
Вопросы с ответами
Kibana и Loki — одно и то же?
Нет. Оба про журналы, но хранилище и язык поиска разные. Подписи экрана берите у себя, не из чужого скрина.
Sentry покажет каждый запрос?
Нет. Он собирает ошибки, которые туда отправили. Успешный вызов и многие отказы остаются только в журнале.
С чего начать поиск?
Интервал с поясом, затем идентификатор или редкий текст. Уровень error — сужение, не доказательство, что других строк нет.
Что нельзя вставлять в тикет?
Токен, cookie, полный абзац с персональными данными. Хватает времени, стенда, кода и идентификатора.
Связано с блоком Developer
- 7.4 Логи — ELK, Loki, централизованный сбор
- 7.2 Observability — логи, метрики, трейсинг, OpenTelemetry