Grafana

Материал из llmdocs — справочник разработчика
Портал: Git, CI/CD, DevOps
Grafana
РазработчикGrafana Labs
АвторТоркель Эдегор (Torkel Ödegaard)
Первый выпуск2014
ЯзыкGo (бэкенд), TypeScript и React (фронтенд)
ЛицензияAGPLv3 (с 2021, ранее Apache 2.0)
Порт по умолчанию3000
Связанные проектыLoki (логи), Tempo (трассы), Mimir (метрики), Alloy (сборщик)
ОблакоGrafana Cloud

Grafana — открытое веб-приложение для визуализации и анализа данных наблюдаемости: метрик, логов и трасс. Пользователь подключает источники данных — чаще всего Prometheus, — строит из панелей дашборды и настраивает алерты. Grafana сама не хранит метрики: она отправляет запросы в источники и отображает результат. Вместе с Prometheus она стала стандартным стеком мониторинга для серверов, Kubernetes и приложений.

История

Шведский разработчик Торкель Эдегор выпустил Grafana в 2014 году как форк Kibana 3, переделанный для временных рядов Graphite и InfluxDB.[1] Проект быстро стал популярен; вокруг него сложилась компания Grafana Labs, которая развивает целый набор открытых инструментов: Loki для логов (2018), Tempo для трасс, Mimir для долговременного хранения метрик, Pyroscope для профилирования и сборщик Alloy. Вместе их называют стеком LGTM (Loki, Grafana, Tempo, Mimir). В 2021 году Grafana и Loki перешли с лицензии Apache 2.0 на AGPLv3.[6]

Источники данных

Grafana поддерживает десятки источников из коробки и сотни через плагины:[2]

Тип Примеры Язык запросов
Метрики Prometheus, Mimir, VictoriaMetrics, InfluxDB, Graphite PromQL, InfluxQL, Flux
Логи Loki, Elasticsearch, OpenSearch LogQL, Lucene
Трассы Tempo, Jaeger, Zipkin TraceQL
SQL PostgreSQL, MySQL, ClickHouse SQL
Облака CloudWatch, Azure Monitor, Google Cloud Monitoring собственные

На одном дашборде можно совместить данные из разных источников, а режим Explore позволяет писать запросы интерактивно и переходить от метрики к логам и трассам того же момента — при условии, что они связаны общими метками или trace ID (см. Логирование и трассировка (OpenTelemetry)).

Дашборды

Дашборд состоит из панелей: временные ряды, одиночное значение (stat), шкалы, таблицы, тепловые карты, гистограммы, логи, графы узлов. Ключевые возможности:

  • Переменные — выпадающие списки (окружение, сервис, узел), значения подставляются в запросы: rate(http_requests_total{job="$job"}[5m]). Один дашборд обслуживает все сервисы.
  • Трансформации — объединение, фильтрация и вычисления над результатами запросов без изменения источника.
  • Аннотации — отметки событий на графиках, например моменты деплоя.
  • Импорт готовых дашбордов с grafana.com по номеру: известный Node Exporter Full (ID 1860) показывает всё о Linux-сервере.

Хороший дашборд отвечает на конкретный вопрос: сверху — «золотые сигналы» сервиса (трафик, ошибки, задержки, насыщение), ниже — детали для расследования.

Алерты

Grafana Alerting вычисляет правила по любым источникам, группирует срабатывания и отправляет уведомления через точки контакта: почту, Telegram, Slack, PagerDuty, вебхуки.[3] Политики уведомлений маршрутизируют алерты по меткам, а «тихие часы» (silences) временно отключают их во время работ. Если в инфраструктуре уже есть Prometheus с Alertmanager, алерты часто оставляют там, а Grafana использует только для визуализации.

Установка и конфигурация как код

docker run -d --name grafana -p 3000:3000 \
  -v grafana-data:/var/lib/grafana grafana/grafana-oss
# http://localhost:3000, вход admin/admin со сменой пароля

В Kubernetes Grafana обычно ставят Helm-чартом kube-prometheus-stack вместе с Prometheus и Alertmanager. Дашборды, источники и алерты лучше хранить в Git, а не создавать мышкой: Grafana загружает их из YAML- и JSON-файлов при старте (provisioning).[4]

# /etc/grafana/provisioning/datasources/prometheus.yaml
apiVersion: 1
datasources:
  - name: Prometheus
    type: prometheus
    url: http://prometheus:9090
    isDefault: true

Для больших установок используют провайдер Grafana в Terraform, библиотеки Grafonnet (Jsonnet) и Grafana Foundation SDK, позволяющие генерировать дашборды кодом.

Loki

Loki — система хранения логов, спроектированная «как Prometheus, но для логов»: она индексирует только метки (сервис, под, уровень), а сами строки хранит сжатыми в объектном хранилище.[5] Это гораздо дешевле полнотекстовых систем вроде Elasticsearch, хотя поиск по произвольному тексту медленнее. Запросы пишутся на LogQL:

{app="api", level="error"} |= "timeout" | json | duration > 2s

Альтернативы

Kibana и OpenSearch Dashboards (в экосистеме Elasticsearch), встроенные консоли облачных провайдеров, коммерческие Datadog и New Relic, а для простых случаев — встроенный интерфейс Prometheus или Netdata.

См. также

Источники

  1. Grafana Documentation
  2. Grafana — Data sources
  3. Grafana Alerting
  4. Grafana — Provisioning
  5. Grafana Loki Documentation
  6. Grafana Labs — Relicensing to AGPLv3 (2021)