НейроАгент

Как настроить Grafana для отображения цветных логов в формате JSON

Настройка Grafana для отображения логов с цветными уровнями в формате JSON. Полное руководство для новичков с примерами конфигурации Promtail и pino-loki.

Вопрос

Как настроить Grafana для отображения логов в том же формате, что и в терминале?

Мой стек: pino, pino-loki, docker: grafana/loki (lts), grafana/grafana (lts).

Я новичок в Grafana и хотел бы не только использовать его для статистики и удобного мониторинга, но и добиться приятного визуального отображения логов.

Проблема:

  • После часа попыток я не смог вывести уровень логирования с цветом, как в примере на Grafana Playground.
  • Я смог разобрать поля в dashboard в виде таблицы, но это неудобно - JSON формат гораздо предпочтительнее.
  • Пробовал различные запросы и читал документацию, но не нашел решения. Возможно, я ищу то, чего не существует?
НейроАгент

Чтобы настроить Grafana для отображения логов в том же формате, что и в терминале с цветными уровнями, вам нужно правильно настроить обработку JSON логов и убедиться, что уровни логирования корректно распознаются. Основная проблема большинства новичков заключается в том, что Grafana не может автоматически определять уровни логирования, если они не правильно извлечены из JSON.


Содержание


Основные настройки для отображения JSON логов

Для того чтобы Grafana корректно отображала JSON логи с цветными индикаторами уровня, необходимо выполнить несколько ключевых шагов:

  1. Форматирование логов - ваши логи должны быть в формате JSON с полем level, например:

    json
    {"level": "info", "time": 1634567890, "pid": 1234, "hostname": "server", "msg": "Application started"}
    
  2. Извлечение уровня логирования - Grafana должна распознать поле уровня как level для автоматического окрашивания.

  3. Правильная настройка источника данных - в Loki нужно использовать соответствующие парсеры.

Важно: Как указано в документации Grafana, если в ваших логах присутствует поле уровня, Grafana автоматически использует его значения для определения цвета каждой строки.

Настройка Promtail для правильной обработки уровней логирования

Самая частая ошибка новичков - неправильная настройка Promtail. Ваша конфигурация должна включать:

yaml
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:

javascript
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 логами:

  1. Создайте новую панель типа “Logs”
  2. В настройках запроса выберите Loki как источник данных
  3. Используйте следующий запрос:
    {job="pino-logs"} |= ""
    
  4. В настройках панели перейдите во вкладку “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:

yaml
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:

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 логов, правильная настройка конвейера обработки логов является ключом к успешной визуализации.


Заключение

  1. Правильная структура JSON - ваши логи должны содержать поле level для автоматического окрашивания в Grafana.

  2. Настройка Promtail - используйте конвейеры для извлечения уровней логирования и преобразования форматов timestamp.

  3. Конфигурация pino-loki - убедитесь, что уровни логирования правильно форматируются и отправляются в Loki.

  4. Настройка панели - используйте режим “Logs Drilldown JSON viewer” для удобного просмотра JSON логов с цветовой индикацией уровня.

  5. Отладка проблем - если цвета не отображаются, проверьте настройки Promtail и убедитесь, что поле уровня правильно извлекается.

Следуя этим шагам, вы сможете настроить Grafana для отображения логов в том же формате, что и в терминале, с цветовой индикацией уровней и удобным JSON форматированием.


Источники

  1. Structured Logging in the Grafana monitoring stack - Medium
  2. Pino HTTP Logs - Grafana Labs
  3. Logs visualization in Grafana - Official Documentation
  4. Logs in Explore - Grafana Documentation
  5. Logs Drilldown JSON viewer - Grafana Documentation
  6. pino Loki transport configuration
  7. Visualizing Loki JSON logs in Grafana - Stack Overflow
  8. Ultimate Guide: Shipping Node.js Application Logs to Loki