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