Дашборды и переменные шаблонов

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

Переменная шаблона (template variable) — это параметр дашборда, который пользователь выбирает из выпадающего списка, а Grafana подставляет его в запросы панелей.

Без переменных вы плодите по дашборду на каждый сервис. С переменными — один дашборд с фильтром «сервис», и он подходит для всех. Это резко сокращает дублирование.

Зачем нужны переменные

Представьте дашборд «здоровье сервиса» с панелями RED. Если завести переменную service, в каждую панель можно подставить {service="$service"}, и при переключении в выпадашке весь дашборд перестроится под выбранный сервис.

Откуда берутся значения

Чаще всего значения переменной получают запросом к Prometheus через функцию label_values — она возвращает все существующие значения лейбла.

# значения переменной service
label_values(http_requests_total, service)

Так список сервисов всегда актуален: появился новый сервис — он сам возникнет в выпадашке.

Использование в панелях

Переменную подставляют через $имя прямо в PromQL панели.

# нагрузка выбранного сервиса
sum(rate(http_requests_total{service="$service"}[5m]))

# доля ошибок выбранного сервиса
sum(rate(http_requests_total{service="$service", status=~"5.."}[5m]))
  / sum(rate(http_requests_total{service="$service"}[5m]))

Как работает под капотом

При загрузке дашборда Grafana сначала вычисляет переменные: для query-переменной выполняет её запрос и заполняет выпадающий список. Затем в запросах панелей текстово подставляет выбранное значение вместо $service и отправляет уже готовый PromQL в источник. Переменные могут зависеть друг от друга: например, список инстансов фильтруется по уже выбранному сервису — Grafana пересчитывает их по цепочке.

Тип переменнойОткуда значения
Queryзапрос вроде label_values(...)
Customзаданный вручную список
Intervalнабор интервалов (1m, 5m, 1h)

Частые ошибки

  • Жёстко зашить имя сервиса в панель. Дашборд перестаёт быть переиспользуемым; используйте $service.
  • Не включить «All» или multi-value, когда нужно сравнение. Иногда полезно смотреть сразу несколько значений.
  • Опечатка в имени переменной. $servise подставится как пустая строка и сломает запрос.

Итог

  • Переменные шаблонов параметризуют дашборд через выпадающие списки.
  • Значения часто берут из label_values(...), поэтому список всегда актуален.
  • Подстановка $переменная идёт текстом в PromQL панелей.
Проверьте себя
1. Зачем нужны переменные шаблонов в Grafana?
AЧтобы хранить метрики
BЧтобы один дашборд работал для разных значений (сервисов, инстансов) через фильтр
CЧтобы ускорить scrape
DЧтобы заменить Alertmanager
2. Откуда обычно берутся значения query-переменной?
AИз файла CSV
BИз запроса label_values(...) к источнику данных
CИз Alertmanager
DИз логов