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

InfluxDB + ранний Grafana: строим операционный дашборд поверх collectd и Zabbix

Подключаем InfluxDB как time-series хранилище к collectd и Zabbix, поверх - Grafana. Графики наконец выглядят как инструмент, а не как артефакт 2005 года.

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

InfluxDB активно развивается в 2013 году как time-series БД, Grafana складывается как дашборд-инструмент поверх неё и Graphite

На Zabbix мы переехали летом. Мониторинг работает, триггеры срабатывают, алерты приходят. Но графики в Zabbix - это всегда был отдельный разговор. Встроенная визуализация делает своё дело: показывает нужную метрику за нужный период. Но только одну метрику на одном графике, в одном интерфейсе, который заточен под оператора мониторинга, а не под разговор с клиентом или дежурного инженера за 3 ночи.

Хотелось сделать что-то вроде операционного дашборда: несколько ключевых метрик на одном экране, понятный масштаб, возможность быстро провалиться в деталь. Cacti смотрели - слишком тяжело настраивать и визуально не лучше. Graphite интересен, но требует отдельного стека с Carbon и Whisper, и у его интерфейса своя специфика.

В итоге наткнулись на связку InfluxDB + Grafana.

Что это такое

InfluxDB - молодая time-series база данных, написанная на Go. Данные хранятся в виде временных рядов с тегами, HTTP API для записи и чтения, SQL-подобный язык запросов. Нет сложной инсталляции: один бинарник, конфиг, запустили. Для наших задач - принимать метрики с collectd и хранить их в виде, удобном для визуализации - подходит хорошо.

Grafana - веб-интерфейс для построения дашбордов. Умеет работать с InfluxDB и Graphite как с источниками данных. Дашборды - это JSON, их можно хранить в git и переносить между серверами. Интерфейс заметно современнее Zabbix: несколько графиков на одной странице, изменение временного окна перетаскиванием, масштабирование кликом.

Оба проекта активно разрабатываются, и это чувствуется: периодически что-то меняется между версиями, документация не всегда успевает. Но для внутреннего инструмента это терпимо.

Схема, которую подняли

collectd на каждом сервере собирает системные метрики: CPU, память, диск, сеть. У collectd есть плагин write_http - он умеет отдавать данные в формате JSON по HTTP. InfluxDB принимает этот формат нативно, то есть collectd пишет напрямую в InfluxDB без промежуточного агрегатора.

Для метрик из Zabbix сделали немного по-другому: написали небольшой скрипт, который через Zabbix API периодически тянет нужные метрики и кладёт в InfluxDB. Это не идеал - было бы чище настроить export напрямую из Zabbix, но готового модуля нет, а дублировать агенты не хотелось. Скрипт пока справляется.

Grafana поднята как отдельный nginx-сайт, смотрит в InfluxDB как в data source. Первый дашборд собрали за пару часов: CPU load average, потребление памяти, сетевой трафик по интерфейсам, дисковый I/O - всё на одном экране, временное окно по умолчанию последние 6 часов.

Что сразу понравилось

Временное окно. В Zabbix чтобы сдвинуть период надо ввести даты. В Grafana - потащил за нижнюю ось или выбрал из стандартных вариантов в верхнем углу. На дежурстве это реально быстрее.

Несколько метрик на одном графике. Смотреть CPU и memory на одной шкале не всегда нужно, но сравнить load average трёх серверов на одном панели - очень удобно при расследовании. В Zabbix это либо не делается, либо через костыли с custom screens.

JSON-дашборды. Сохранили первый рабочий дашборд в git. Если поднимать такую же инсталляцию для другого клиента - основа уже есть, только поменять имена хостов в запросах.

Внешний вид. Это звучит несерьёзно, но когда показываешь клиенту на сопровождении состояние его инфраструктуры, разница между графиком из Zabbix и графиком из Grafana видна сразу. Не в том смысле что данные другие - в том смысле что один выглядит как рабочий инструмент, другой как утилита из 2005 года.

Где пока не всё гладко

InfluxDB молодой продукт, и это означает что API и формат данных между релизами могут поменяться без особых предупреждений. Один раз уже словили несовместимость между версией которую использовали и плагином write_http в collectd - пришлось разбираться с форматом JSON вручную.

Retention policy - по умолчанию данные хранятся бесконечно. Для демостенда на несколько серверов это не проблема, но если собирать метрики с плотностью раз в 10 секунд с десятков хостов, размер базы начнёт расти заметно. Настроили retention на 90 дней для детальных данных и downsampling до часового разрешения для архива - InfluxDB это умеет через continuous queries.

Алертинга в Grafana пока нет. Дашборд - только визуализация. Алерты по-прежнему через Zabbix, Grafana - только для наблюдения. Это не минус, это просто разные инструменты для разных задач.

Где сейчас

Поднято на одном клиенте, смотрим в режиме пилота. Собираем метрики примерно с двадцати хостов - смешанный Linux-парк с несколькими Windows-серверами (там collectd не встаёт нативно, для них используем написанный скрипт через Performance Counters и тот же HTTP API). Дашборды живут в git, менять и дополнять удобно.

Zabbix никуда не делся - он по-прежнему делает мониторинг доступности и отправляет алерты. InfluxDB + Grafana - это слой визуализации метрик поверх того что уже есть, не замена. Пока выглядит как рабочая схема, будем смотреть как ведёт себя под реальной нагрузкой.

Контакт

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

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