Как настроить Grafana для отображения логов в том же формате, что и в терминале?
Мой стек: pino, pino-loki, docker: grafana/loki (lts), grafana/grafana (lts).
Я новичок в Grafana и хотел бы не только использовать его для статистики и удобного мониторинга, но и добиться приятного визуального отображения логов.
Проблема:
- После часа попыток я не смог вывести уровень логирования с цветом, как в примере на Grafana Playground.
- Я смог разобрать поля в dashboard в виде таблицы, но это неудобно - JSON формат гораздо предпочтительнее.
- Пробовал различные запросы и читал документацию, но не нашел решения. Возможно, я ищу то, чего не существует?
Чтобы настроить Grafana для отображения логов в том же формате, что и в терминале с цветными уровнями, вам нужно правильно настроить обработку JSON логов и убедиться, что уровни логирования корректно распознаются. Основная проблема большинства новичков заключается в том, что Grafana не может автоматически определять уровни логирования, если они не правильно извлечены из JSON.
Содержание
- Основные настройки для отображения JSON логов
- Настройка Promtail для правильной обработки уровней логирования
- Конфигурация pino-loki
- [Настройка панели логов в Grafana](#настройка-панели-логов в-grafana)
- Решение типичных проблем
- Примеры для Node.js приложений
Основные настройки для отображения JSON логов
Для того чтобы Grafana корректно отображала JSON логи с цветными индикаторами уровня, необходимо выполнить несколько ключевых шагов:
-
Форматирование логов - ваши логи должны быть в формате JSON с полем
level, например:json{"level": "info", "time": 1634567890, "pid": 1234, "hostname": "server", "msg": "Application started"} -
Извлечение уровня логирования - Grafana должна распознать поле уровня как
levelдля автоматического окрашивания. -
Правильная настройка источника данных - в Loki нужно использовать соответствующие парсеры.
Важно: Как указано в документации Grafana, если в ваших логах присутствует поле уровня, Grafana автоматически использует его значения для определения цвета каждой строки.
Настройка Promtail для правильной обработки уровней логирования
Самая частая ошибка новичков - неправильная настройка Promtail. Ваша конфигурация должна включать:
scrape_configs:
- job_name: pino-logs
pipeline_stages:
# Основное преобразование для pino логов
- json:
expressions:
level: level
msg: msg
time: time
# Преобразование timestamp в читаемый формат
- timestamp:
source: time
format: UnixMs
# Извлечение уровня для цветного отображения
- labels:
level:
Совет: Если ваши логи содержат нестандартную структуру, используйте примеры из документации Promtail для настройки парсинга.
Конфигурация pino-loki
Ваше Node.js приложение должно использовать правильную конфигурацию pino-loki:
const pino = require('pino');
const LokiTransport = require('pino-loki');
const logger = pino({
level: 'info',
formatters: {
level: (label) => {
return { level: label };
}
}
}, LokiTransport({
host: 'http://loki:3100',
labels: { job: 'pino-logs' },
interval: 5
}));
Важно: Как указано в официальной документации pino, при использовании pino-loki убедитесь, что уровни логирования правильно форматируются для корректной обработки Grafana.
Настройка панели логов в Grafana
Для создания панели с цветными JSON логами:
- Создайте новую панель типа “Logs”
- В настройках запроса выберите Loki как источник данных
- Используйте следующий запрос:
{job="pino-logs"} |= "" - В настройках панели перейдите во вкладку “Panel options” и убедитесь, что включена опция “Enable log level colors”
Для лучшего отображения JSON используйте режим “Logs Drilldown JSON viewer”, как описано в документации Grafana:
Примечание: Режим “Logs Drilldown JSON viewer” позволяет легко просматривать и взаимодействовать с форматированными JSON логами, фильтровать их и делать ваши визуализации более релевантными.
Решение типичных проблем
Проблема: Логи не окрашиваются по уровням
Решение: Убедитесь, что:
- Поле уровня называется
level - Promtail правильно извлекает это поле
- В настройках панели включена опция цветового кодирования
Проблема: JSON отображается в виде таблицы
Решение: В настройках панели выберите формат отображения “Logs Drilldown JSON viewer” вместо стандартного табличного вида.
Проблема: Нет доступа к Grafana Playground
Решение: Примеры настройки можно найти в репозитории Grafana dashboards, где демонстрируется использование Loki для визуализации логов Pino.
Примеры для Node.js приложений
Вот полный пример настройки:
docker-compose.yml:
version: '3.8'
services:
loki:
image: grafana/loki:latest
ports:
- "3100:3100"
command: -config.file=/etc/loki/local-config.yaml
promtail:
image: grafana/promtail:latest
volumes:
- ./promtail-config.yaml:/etc/promtail/config.yml
- /var/log:/var/log
command: -config.file=/etc/promtail/config.yml
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
depends_on:
- loki
promtail-config.yaml:
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://loki:3100/loki/api/v1/push
scrape_configs:
- job_name: pino-logs
pipeline_stages:
- json:
expressions:
level: level
msg: msg
time: time
- timestamp:
source: time
format: UnixMs
- labels:
level:
Совет: Как показано в этом руководстве по настройке Node.js логов, правильная настройка конвейера обработки логов является ключом к успешной визуализации.
Заключение
-
Правильная структура JSON - ваши логи должны содержать поле
levelдля автоматического окрашивания в Grafana. -
Настройка Promtail - используйте конвейеры для извлечения уровней логирования и преобразования форматов timestamp.
-
Конфигурация pino-loki - убедитесь, что уровни логирования правильно форматируются и отправляются в Loki.
-
Настройка панели - используйте режим “Logs Drilldown JSON viewer” для удобного просмотра JSON логов с цветовой индикацией уровня.
-
Отладка проблем - если цвета не отображаются, проверьте настройки Promtail и убедитесь, что поле уровня правильно извлекается.
Следуя этим шагам, вы сможете настроить Grafana для отображения логов в том же формате, что и в терминале, с цветовой индикацией уровней и удобным JSON форматированием.
Источники
- Structured Logging in the Grafana monitoring stack - Medium
- Pino HTTP Logs - Grafana Labs
- Logs visualization in Grafana - Official Documentation
- Logs in Explore - Grafana Documentation
- Logs Drilldown JSON viewer - Grafana Documentation
- pino Loki transport configuration
- Visualizing Loki JSON logs in Grafana - Stack Overflow
- Ultimate Guide: Shipping Node.js Application Logs to Loki