Какие задачи решаем с помощью Zabbix и Prometheus
Проект: CRM-система POSIFLORA для цветочного бизнеса
CRM-система POSIFLORA помогает цветочному бизнесу держать работу под контролем: продавать букеты, учитывать остатки и часы работы сотрудников, планировать закупки. Все процессы — в одном интерфейсе. Работать с POSIFLORA удобно.
В системе уже работает больше 1000 пользователей: от небольших студий до крупных цветочных сетей со множеством магазинов.
Так выглядит интерфейс POSIFLORA
Для отслеживания неполадок используем две системы мониторинга: Zabbix и Prometheus
Чтобы POSiFLORA работала стабильно и не ломалась, мы отслеживаем неполадки с помощью системы мониторинга. Она собирает и анализирует данные, например:
- скорость загрузки каталога товаров;
- объем трафика;
- использование оперативной памяти.
При обнаружении опасности система мониторинга отправляет уведомление девопс-инженеру. Он разбирается с проблемой, и POSiFLORA продолжает работать без сбоев.
Система мониторинга должна следить не только за самой программой, которой пользуются клиенты, но и за инфраструктурой сервера, на который она загружена. Пользователи не видят серверную часть, но если она сломается, работать в программе не получится.
Раньше мы использовали одну систему мониторинга — Zabbix. С ее помощью удобно отслеживать работу и серверной, и клиентской частей. Однако Zabbix стал одной из причин излишней нагрузки на сервера. Чтобы это исправить, мы перебросили часть мониторинга на Prometheus.
Теперь мы используем две системы:
- Zabbix наблюдает за работой клиентской части.
- Prometheus в связке с Grafana и экспортерами Node Exporter и MySQL Exporter — за серверной.
Рассказываем подробно, как пришли к такому решению.
Проблема: Zabbix создавал лишнюю нагрузку
POSiFLORA использует для работы облачные сервера Yandex.Cloud. У них есть лимит нагрузки: одновременно сервер выдерживает 50 тысяч сетевых подключений. Если хотя бы один сервер достигнет лимита, POSiFLORA начнет тормозить и выдавать ошибки.
В обычные дни система справляется с нагрузкой, но в праздники количество операций резко увеличивается и число сетевых подключений тоже. В один из таких дней мы заметили, что приближаемся к лимиту. Если подключений будет больше, POSiFLORA не сможет вовремя обрабатывать команды флористов и работа цветочных магазинов встанет.
Чтобы этого не допустить, девопс-инженер проанализировал работу системы и нашел компоненты, которые создают слишком много подключений. Одним из них оказался Zabbix: на него приходилось 8—9 тысяч соединений. Если их число уменьшить, риск перегрузки системы снизится.
Лишние соединения возникали из-за реакции Zabbix на перезапуск Docker-контейнеров. Контейнеры — это безопасная «упаковка» для программного кода. В ней он загружается на сервер и исполняется, не конфликтуя с другими компонентами системы.
При перезапуске контейнеры создают виртуальные сетевые интерфейсы. Zabbix каждый раз их распознавал как новый объект мониторинга, собирал метрики и отдавал серверу. На каждую метрику Zabbix создавал по соединению — из-за этого возникала лишняя нагрузка.
Решение: разделить мониторинг между Zabbix и Prometheus
Чтобы снизить число сетевых соединений, мы отдали серверный мониторинг Prometheus. Сам Prometheus — это база данных. Для полноценной работы его дополняют экспортерами для сбора метрик и инструментами визуализации.
Отслеживание контейнеров — часть серверного мониторинга. Поэтому лишние соединения Zabbix пропали, когда он перестал следить за контейнерами. Prometheus получает и отдает все метрики в одном соединении. Он создает меньше нагрузки, чем Zabbix.
Тем не менее полностью перейти на Prometheus нельзя: он не умеет следить за клиентской частью POSiFLORA. Мы решили разделить работу между двумя системами мониторинга: за серверной частью, включая контейнеры, следит Prometheus, за клиентской — Zabbix.
Какие задачи решаем с помощью Prometheus
Мониторинг серверной части
Prometheus в связке с Grafana и экспортерами Node Exporter и MySQL Exporter следит за состоянием сервера:
- Node Exporter собирает системные метрики: данные об использовании оперативной памяти, загрузке процессора и сотни других показателей;
- MySQL Exporter собирает метрики сервера базы данных MySQL.
Экспортеры переводят данные на понятный базе данных язык и отправляют ей по запросу. В нашем случае — примерно каждые 10 секунд. База данных хранит их в течение заданного времени.
Визуализация и оповещения
Чтобы с данными было удобно работать, к Prometheus подключена Grafana — инструмент визуализации. Она строит информативные графики и отправляет уведомления об ошибках в Telegram.
Так выглядят графики, построенные по метрикам MySQL Exporter
Какие задачи решаем с помощью Zabbix
Мониторинг клиентской части
Zabbix отслеживает параметры POSiFLORA. Девопс-инженер создает в Zabbix запросы для проверки каждого параметра: количества активных устройств, скорости загрузки каталога, объема трафика и других. Система собирает и хранит данные.
Пример запроса на проверку количества активных устройств
Визуализация и оповещения
Чтобы девопс-инженер мог видеть все метрики сразу и анализировать их изменение во времени, Zabbix визуализирует данные в виде графиков.
Быстро реагировать на опасные ситуации помогает система триггеров и оповещений: девопс задает условия, при наступлении которых Zabbix понимает, что что-то идет не так, и присылает оповещение в Telegram. Девопс-инженер видит и решает проблему до того, как она нанесет вред.
Пример визуализации данных о работе POSiFLORA
Результаты: распределили нагрузку и обеспечили бесперебойную работу системы
Разделили мониторинг между Zabbix и Prometheus и решили проблему лишних соединений. Это обеспечит стабильную работу POSiFLORA в дни пиковых нагрузок.
Настроили мониторинг: постоянно отслеживаем работу POSiFLORA и ее серверной инфраструктуры.При нахождении ошибок система сразу же сообщает о них в Telegram.
Непрерывность работы POSiFLORA составляет 99,95%, а возможное время аварийной остановки — не более часа в год.