Перейти к содержанию

Multi-value и Include All

Обычная переменная подставляет одно значение в запрос. Но часто нужно выбрать несколько одновременно — например, показать CPU для трёх конкретных серверов. Для этого в Grafana есть опция Multi-value и специальный формат All.

Четыре формата подстановки

Включив multi-value (опция при создании/редактировании переменной), вы получаете доступ к разным форматам подстановки — в зависимости от того, какой синтаксис ожидает ваш источник данных.

Формат Синтаксис Пример результата
Pipe ${instance:pipe} server-a\|server-b\|server-c
CSV ${instance:csv} server-a,server-b,server-c
Raw ${instance:raw} server-aserver-bserver-c
Text ${instance:text} server-a server-b server-c

Pipe нужен Prometheus для регулярных выражений, CSV нужен SQL для IN(), Raw — редко, для экзотических источников, Text — для полнотекстового поиска.

All

Флаг Include All option добавляет специальное значение «All» в дропдаун. При выборе «All» Grafana либо подставляет кастомное значение (поле Custom all value), либо перечисляет все доступные значения в выбранном формате.

Обычно Custom all value оставляют как .* — и тогда запрос, например, label_values(up{instance=~"$instance"}, job) превращается в label_values(up{instance=~".*"}, job) — то есть фильтр снимается вообще.

Подводные камни

SQL и IN

SELECT * FROM metrics WHERE host IN (${host:csv})

При выборе трёх хостов подставится: host IN ('server-a','server-b','server-c'). Всё ок.

Но если выбран All и включено custom all value = *, то запрос превратится в host IN ('*'), что вернёт пустой результат. Для SQL при All нужно либо перехватывать значение All отдельно, либо использовать ${host:sqlstring}.

Prometheus и pipe

rate(cpu_usage{instance=~"${instance:pipe}"}[5m])

При выборе трёх инстансов подставится: rate(cpu_usage{instance=~"server-a|server-b|server-c"}[5m]). Это работает.

Но если переменная огромная (сотни инстансов), то и регулярка будет гигантская, и запрос замедлится. Ставьте Multi-value limit — ограничение на количество одновременно выбираемых значений.