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.