Дашборды и переменные шаблонов
Урок про то, как сделать один дашборд пригодным для всех сервисов через переменные.
Переменная шаблона (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 панелей.