ADG Оставить заявку
Блог DevOps 5 мин чтения

Grafana 6.0: обновились, собрали единый dashboard и наконец увидели всю инфраструктуру

Перешли на Grafana 6.0 GA и собрали единый dashboard поверх Prometheus, Loki и InfluxDB - операторы впервые получили цельную картину состояния инфраструктуры.

Контекст момента

Grafana 6.0 GA - новый интерфейс, переработанный Alerting и поддержка нескольких источников данных в одном panel

Grafana Labs выпустила 6.0 GA в начале марта, и мы обновились почти сразу - не из любви к острым ощущениям, а потому что одна фича закрывала конкретный зазор, который нас раздражал уже несколько месяцев.

Зазор выглядел так: Prometheus, Loki и InfluxDB у нас жили в отдельных вкладках Grafana 5. Операторы смотрели на метрики в одном окне, на логи - в другом, на сетевые тайм-серии из InfluxDB - в третьем. Когда что-то падало, нужно было прыгать между dashboards и мысленно совмещать временные метки. Это не конец света, но когда смотришь на инцидент в два часа ночи, лишние клики раздражают непропорционально сильно.

Grafana 6.0 позволяет добавлять несколько data source в одну панель. Мы наконец могли собрать один dashboard, где метрики, логи и сетевая статистика стоят рядом.

Что изменилось в 6.0

Основное, что нас касалось:

  • Новый интерфейс и панель Explore. Explore - отдельный режим для ad-hoc запросов, без необходимости добавлять панели в dashboard. Удобно для диагностики: открываешь Explore, пишешь PromQL или LogQL, получаешь ответ. В Grafana 5 для этого приходилось либо использовать временную панель, либо идти напрямую в Prometheus UI или Kibana.
  • Loki как первоклассный data source. Loki появился в Grafana 5.x через плагин, в 6.0 поддержка встроена и работает стабильнее. LogQL в Explore и в панелях ведёт себя предсказуемо.
  • Переработанный Alerting. Правила алертов теперь привязаны к панелям, а не к отдельному конфигу. Визуально видно порог прямо на графике. Это удобнее для ревью - когда кто-то новый смотрит на dashboard, он сразу понимает, при каком значении сработает алерт.
  • Folder permissions. Dashboards теперь можно группировать по папкам с отдельными правами на просмотр и редактирование. Для нас это значит, что команда разработки видит только своё окружение, а не чужую продакшн-инфраструктуру.

Как собирали единый dashboard

На практике интеграция трёх источников потребовала небольшой работы по согласованию меток и временных меток.

Самая нервная часть - InfluxDB. У нас в нём живут данные с сетевого оборудования: счётчики интерфейсов, трафик, ошибки. Временные метки там в секундах, у Prometheus в миллисекундах, у Loki вообще в наносекундах. Grafana это нормально переваривает, но при выравнивании панелей по времени нужно убедиться, что все источники используют одну timezone - мы пару раз ловили смещение на час из-за расхождения в настройках.

PromQL-панели с метриками хоста и Loki-панели с логами systemd встали рядом хорошо. Когда видишь всплеск CPU на графике и сразу под ним - логи с timestamp-ом в ту же минуту, это меняет скорость диагностики.

Схема того, что получилось:

graph LR
    P[Prometheus] --> G[Grafana 6.0]
    L[Loki] --> G
    I[InfluxDB] --> G
    G --> D[Единый dashboard]
    D --> M[Метрики хостов и K8s]
    D --> LG[Логи systemd / приложений]
    D --> N[Сетевой трафик и ошибки]

Alerting: что изменилось по-настоящему

В Grafana 5 алерты у нас были сложены в отдельном конфиге и никак не пересекались визуально с самими графиками. Когда меняли порог - правили конфиг, деплоили, и потом нужно было помнить что конкретная панель «про тот алерт». Это работало, но хрупко.

В 6.0 порог рисуется прямо на панели красной линией. Алерт настраивается через UI панели, хранится вместе с dashboard-ом. Для ревью при onboarding нового человека это существенная разница: он смотрит на график и сразу видит, где проходит граница.

Что нас немного смутило: алертинг в Grafana работает через polling - Grafana сама ходит в источник данных по расписанию и проверяет условие. Это нормально для большинства случаев, но означает, что минимальная задержка обнаружения алерта равна интервалу проверки. У нас это одна минута. Для критических алертов мы оставили Alertmanager поверх Prometheus с более тонкой настройкой - Grafana-алертинг закрывает ситуации попроще, где задержка в минуту приемлема.

Каналы уведомлений в 6.0 те же что были: Slack, email, PagerDuty, webhook. Всё настроили через UI за полчаса.

Про обновление с 5.x

Обновление прошло без сюрпризов на большинстве проектов. Dashboards в формате JSON перенеслись как есть. Единственное, что потребовало ручного внимания - плагины: несколько плагинов Grafana 5 потребовали обновления отдельно, иначе при старте Grafana 6.0 просто не загружала их.

Шаг, который мы теперь делаем перед обновлением: grafana-cli plugins list-remote и сверка с установленными - смотрим есть ли свежая версия под новый major. Занимает пять минут, но избавляет от разборок с логами в продакшне.

Где сейчас

Единый dashboard работает на нескольких managed-проектах как основной инструмент для дежурных. Операторы говорят что привыкли за неделю. Explore-режим используют активнее чем мы ожидали - оказывается, возможность быстро написать запрос без создания временных панелей существенно снижает порог для ad-hoc диагностики.

Loki на части проектов всё ещё пилотный. Собирать логи из Kubernetes через Promtail и смотреть на них рядом с метриками - это хорошо, но Loki требует привычки к LogQL и понимания того, что full-text search там устроен иначе чем в Elasticsearch. Подробнее про Loki в Kubernetes напишем отдельно.

Folder permissions пока настроили только на двух проектах - там где несколько команд с разным уровнем доступа. На остальных пока один общий workspace, но это скорее вопрос организации чем техники.

Контакт

Нужна такая же инженерная работа?

Опишите задачу и контекст. Ответим в течение рабочего дня, при необходимости подпишем NDA.