Цепочки переменных¶
Одна переменная — уже сила. Но настоящая магия начинается, когда переменные зависят друг от друга. Выбираешь дата-центр → появляются серверы этого дата-центра. Выбираешь сервер → появляются сервисы этого сервера. Это и есть цепочка переменных.
Пример цепочки¶
Представьте: три дата-центра, в каждом десятки серверов, на каждом сервере — несколько приложений.
Шаг 1: Datacenter
label_values(up, datacenter)
Дропдаун: dc-east, dc-west, dc-central.
Шаг 2: Server
label_values(up{datacenter=~"$datacenter"}, instance)
Теперь запрос зависит от выбранного дата-центра. $datacenter=prague — и Grafana перестраивает список серверов только для dc-west.
Шаг 3: Application
label_values(up{datacenter=~"$datacenter", instance=~"$server"}, name)
Сужение продолжается: выбраны и дата-центр, и сервер — теперь список приложений содержит только приложения на выбранном сервере.
Цепочка выглядит так:
Datacenter → Server → Application
(3 варианта) (зависит) (зависит от двух)
Как настроить¶
На странице настройки переменной в поле Query Options задаётся регулярное выражение для фильтрации. По умолчанию — .*, берём всё. Если нужно, например, только серверы с префиксом prod-, пишем /prod-.*/.
Обязательно включите Include All option — иначе Grafana будет требовать выбрать значение до загрузки дашборда, и вы не сможете увидеть общую картину.
Активируйте Auto: off — тогда после каждого выбора в дропдауне запросы не побегут сразу, а вы дождётесь заполнения всех трёх дропдаунов и нажмёте Apply один раз.
Под капотом¶
Когда вы выбираете dc-west в первом дропдауне, Grafana перезапрашивает значения для второго дропдауна. Для этого она берёт запрос label_values(up{datacenter=~"$datacenter"}, instance), подставляет туда dc-west и отправляет в Prometheus. Prometheus возвращает список инстансов только для dc-west. Этот список становится вторым дропдауном. Вы выбираете server-42 из этого списка — Grafana делает то же самое для третьего дропдауна.
Каждый шаг цепочки — это полноценный запрос к источнику данных. Поэтому не делайте цепочек длиннее трёх-четырёх звеньев: каждый новый уровень добавляет задержку при загрузке дашборда. Пользователь должен нажимать Apply, но Grafana всё равно выполняет запросы для заполнения дропдаунов.
Совет¶
Не начинайте цепочку с переменной, у которой десять тысяч значений. Каждый дропдаун нагружает браузер при рендеринге. Если список серверов огромен — поставьте фильтр Multi-value limit и включите опцию «Hide if empty».