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 — ограничение на количество одновременно выбираемых значений.