Как настроить графики на панели Grafana?

Ответ

Настройка графиков в Grafana — это рутинная часть моей работы по визуализации метрик. Я делаю это так:

  1. Создание панели: В нужном дашборде нажимаю "Add panel" → "Add new panel".
  2. Выбор источника данных: В секции Query выбираю соответствующий бэкенд, например, Prometheus для метрик Kubernetes или Loki для логов.
  3. Написание запроса:
    • Для Prometheus указываю метрику и необходимые фильтры по лейблам: rate(container_cpu_usage_seconds_total{namespace="production"}[5m]).
    • Использую агрегационные функции (sum() by (pod), avg()) для группировки данных.
    • Для Loki пишу LogQL-запрос: {app="api-gateway"} |= "error" | logfmt | rate > 0.1.
  4. Настройка визуализации:
    • В Panel options выбираю подходящий тип визуализации: Time series для графиков, Stat для единичных значений, Bar gauge.
    • Настраиваю оси, легенду (Legend), пороги и цветовую палитру в Standard options.
  5. Добавление контекста и алертинга:
    • В Alert создаю правило уведомления, например, если значение CPU превышает 80% в течение 2 минут.
    • Добавляю аннотации (Annotations) для отметки событий деплоя или инцидентов прямо на графике.

Пример готовой панели для мониторинга запросов:

sum(rate(http_requests_total{job="web-service", code!~"5.."}[5m])) / sum(rate(http_requests_total{job="web-service"}[5m])) * 100

Этот запрос вычисляет процент успешных (не 5xx) HTTP-запросов. После всех настроек сохраняю панель, давая ей понятное имя.

Ответ 18+ 🔞

А, ну это ж классика, ёпта! Каждый раз одно и то же, но без этого никуда — как без кофе с утра. Слушай, как я это делаю, пока руки не отсохли.

Первым делом, конечно, панельку лепим. Тыкаешь в дашборде на «Add panel» → «Add new panel». Всё просто, как дважды два, но иногда интерфейс так тормозит, что терпения ноль, ебать.

Дальше — самое важное, источник данных. Тут надо головой думать, э бошка! Если метрики из кубернетеса — тыкаешь Prometheus. Если логи разгребать — то Loki, наш спаситель и утешитель. Выбрал не тот — потом сам от себя охуеешь, когда ничего не работает.

А вот теперь начинается магия, или, как я это называю, ёперный театрнаписание запроса.

  • Для Прометея пишешь что-то вроде rate(container_cpu_usage_seconds_total{namespace="production"}[5m]). Главное — лейблы не перепутать, а то получишь манда с ушами вместо графика.
  • Не забывай про агрегации: sum() by (pod), avg() — без них данные как стадо баранов, не сгруппировать.
  • Для Loki уже свой язык, LogQL: {app="api-gateway"} |= "error" | logfmt | rate > 0.1. Выглядит страшно, но вникаешь — и норм.

Потом идёт настройка визуализации. Тут можно ебушки-воробушки устроить.

  • В Panel options выбираешь, во что превратятся твои цифры: Time series для классического графика, Stat для одной большой циферки (чтоб начальство пугать), Bar gauge.
  • Потом ковыряешься в Standard options: оси, легенду (Legend), цвета. Можно сделать так красиво, что удивление пиздец, а можно так, что хуй в пальто — страшно смотреть.

Финал — алертинг и контекст. Вот где доверия ебать ноль ко всем этим системам, но делать надо.

  • В Alert настраиваешь правило: «если процессор пялится в потолок на 80% дольше двух минут — пиши пропало, пусть все бегут».
  • Добавляешь аннотации (Annotations) на график: вот тут деплой был, а вот тут вротберунчик случился и всё легло. Чтоб потом не гадать, что за пик такой интересный.

Вот тебе живой пример, как я мониторю запросы:

sum(rate(http_requests_total{job="web-service", code!~"5.."}[5m])) / sum(rate(http_requests_total{job="web-service"}[5m])) * 100

Короче, высчитываю процент запросов, которые не сдохли с ошибкой 5xx. Настроил цвета, пороги, алерты — и да похуй, сохраняешь панель, даёшь ей человеческое название, чтобы через месяц не гадать, что эта «Graph 15» вообще означает. Всё, можно идти чай пить.