Что такое Grafana и как визуализировать метрики?
Grafana — open-source платформа для визуализации, мониторинга и анализа данных из множества источников. Grafana не хранит данные — только визуализирует их из подключённых data sources.
Аналогия из жизни: Grafana — это телевизор с множеством входов (HDMI, USB, антенна). Он не создаёт контент, но показывает видео из любого подключённого источника в удобном формате.
Ключевые компоненты
| Компонент | Описание |
|---|---|
| Data Sources | Подключения к хранилищам: Prometheus (PromQL), Loki (LogQL), Tempo, Elasticsearch, PostgreSQL |
| Dashboards | Набор панелей для визуализации данных |
| Panels | Отдельные визуализации: Time series, Stat, Gauge, Table, Heatmap, Logs, Traces |
Настройка data sources (provisioning)
# grafana/provisioning/datasources/datasources.yml
apiVersion: 1
datasources:
- name: Prometheus
type: prometheus
access: proxy
url: http://prometheus:9090
isDefault: true
jsonData:
exemplarTraceIdDestinations:
- name: traceID
datasourceUid: tempo
- name: Loki
type: loki
access: proxy
url: http://loki:3100
jsonData:
derivedFields:
- name: TraceID
matcherRegex: "traceId=(\\w+)"
url: "$${__value.raw}"
datasourceUid: tempo
- name: Tempo
type: tempo
access: proxy
url: http://tempo:3200
jsonData:
tracesToLogsV2:
datasourceUid: loki
filterByTraceID: true
tracesToMetrics:
datasourceUid: prometheus
Стандартные дашборды для Spring Boot
| ID | Название | Что показывает |
|---|---|---|
| 4701 | JVM (Micrometer) | Heap, non-heap, GC, threads, classloading |
| 11378 | Spring Boot Statistics | HTTP requests, response times, error rates |
| 6756 | HikariCP | Connections (active, idle, pending), timeouts |
| 7362 | Kafka Consumer | Lag, records consumed, fetch latency |
Пример PromQL-запросов для дашборда
Пример
# HTTP Requests Rate (по статусу)
sum by (status) (rate(http_server_requests_seconds_count{application="$application"}[5m]))
# HTTP Response Time (p99, p95, p50)
histogram_quantile(0.99, sum(rate(http_server_requests_seconds_bucket{application="$application"}[5m])) by (le))
# JVM Heap Used
jvm_memory_used_bytes{application="$application", area="heap"}
# HikariCP Active Connections
hikaricp_connections_active{application="$application"}
Переменные (Variables) в дашбордах
Переменные позволяют создавать параметризованные дашборды:
Пример
# Variable: application
Type: Query
Query: label_values(jvm_memory_used_bytes, application)
# Variable: instance
Type: Query
Query: label_values(jvm_memory_used_bytes{application="$application"}, instance)
Используются в запросах как $application, $instance.
Docker Compose для локального observability-стека
# docker-compose-observability.yml
version: '3.8'
services:
prometheus:
image: prom/prometheus:v2.53.0
ports:
- "9090:9090"
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
- ./prometheus/alert_rules.yml:/etc/prometheus/alert_rules.yml
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.retention.time=7d'
- '--web.enable-lifecycle'
grafana:
image: grafana/grafana:11.1.0
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
- GF_INSTALL_PLUGINS=grafana-clock-panel
volumes:
- ./grafana/provisioning:/etc/grafana/provisioning
- grafana-data:/var/lib/grafana
loki:
image: grafana/loki:3.1.0
ports:
- "3100:3100"
command: -config.file=/etc/loki/local-config.yaml
tempo:
image: grafana/tempo:2.5.0
ports:
- "3200:3200"
- "4317:4317" # OTLP gRPC
- "4318:4318" # OTLP HTTP
command: ["-config.file=/etc/tempo/tempo.yaml"]
volumes:
- ./tempo/tempo.yaml:/etc/tempo/tempo.yaml
promtail:
image: grafana/promtail:3.1.0
volumes:
- /var/log:/var/log
- ./promtail/config.yml:/etc/promtail/config.yml
command: -config.file=/etc/promtail/config.yml
volumes:
grafana-data:
Важное
- Grafana не хранит данные — только визуализирует. Данные остаются в Prometheus, Loki, Tempo и т.д.
- Dashboard as Code: дашборды можно хранить как JSON и версионировать в Git (provisioning).
- Корреляция сигналов: настройте связи между Prometheus -> Tempo (exemplars), Loki -> Tempo (derived fields), Tempo -> Loki/Prometheus (trace-to-logs/metrics).
- Grafana поддерживает Explore режим для ad-hoc запросов (отладки), в отличие от дашбордов, которые предназначены для постоянного мониторинга.
Частые ошибки
- Перегруженные дашборды: 30 панелей на одном дашборде — нечитаемо. Разделяйте по уровням: Overview -> Service -> Detail.
- Хардкод значений: используйте переменные (
$application,$instance) вместо конкретных имён в запросах. - Отсутствие документации на дашборде: добавляйте Text-панели с описанием, что мониторится и какие пороговые значения нормальны.
- Не настроенные корреляции: клик из графика метрик должен вести к трейсу, из трейса — к логам.
Как используется в 2026
- Grafana 11+ с нативной поддержкой AI-ассистента (Grafana LLM) для генерации PromQL/LogQL запросов.
- Grafana Scenes — новый фреймворк для программного создания дашбордов на TypeScript.
- Grafana OnCall — встроенный инструмент для управления дежурствами и эскалациями.
- Unified Alerting — единая система алертинга для всех data sources (Prometheus, Loki, SQL и др.).
- Grafana Cloud с бесплатным уровнем — популярный выбор для стартапов.
На собеседовании: подчеркните, что Grafana — инструмент визуализации, а не хранения данных. Упомяните корреляцию сигналов (metrics -> traces -> logs) — это показывает зрелое понимание observability-стека. Знание конкретных dashboard ID (4701, 11378) производит хорошее впечатление.