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

Лучшие практики

Переменные — это инструмент, который может как облегчить жизнь, так и превратить дашборд в тыкву, которая грузится тридцать секунд и жрёт гигабайт памяти браузера. Вот как не допустить второго.

Именование

Хорошее имя переменной — сразу понятно, зачем она и откуда. Плохое — var1, qwerty, tmp. Используйте префиксы, обозначающие контекст или источник:

osquery_cpu
prometheus_env
loki_level
mysql_cluster

Глядя на дашборд спустя полгода после создания, вы не вспомните, что qwe — это на самом деле environment. А prometheus_env — сразу понятно: переменная из Prometheus, про окружение.

Сортировка

Всегда выбирайте сортировку значений в настройках переменной, особенно для типа Query. По умолчанию Prometheus может вернуть значения в любом порядке — prod, dev, staging. Включите Alphabetical — и в дропдауне всегда будет dev, prod, staging. Мелочь, но экономит секунды при каждом открытии дашборда.

Multi-value limit

Установите разумный лимит. Если в дропдауне 5000 серверов, и пользователь выбирает All, Grafana подставит регулярку из 5000 имён — и Prometheus ляжет. Задайте, например, лимит в 50 значений.

Кеширование

Если запрос для переменной тяжёлый (например, список всех регионов из Oracle с джойнами), включите кеширование в настройках переменной. Grafana не будет перезапрашивать значения при каждом открытии дашборда.

Query type и кардинальность

label_values(up, instance)

Вернёт тысячи значений, если у вас тысячи серверов. Лучше добавить фильтр:

label_values(up{environment=~"$environment"}, instance)

Так список сократится до сотни. Всегда ограничивайте скоуп запроса.

Ad hoc vs Variable

Ad hoc — для исследовательских задач: открыл дашборд и быстро фильтруешь что угодно по любому ключу.

Variable — для предсказуемых сценариев: каждый пользователь дашборда использует один и тот же набор фильтров, которые можно назвать понятными именами.

Ad hoc даёт гибкость, Variable — скорость и предсказуемость. В хорошо спроектированном дашборде они не конкурируют, а дополняют друг друга: основные фильтры — через переменные, дополнительные исследовательские — через Ad hoc.