Автор: Senior Devops. Ведущий специалист по инфраструктуре Hostkey Никита Зубарев
В прошлых статьях мы рассказывали об архитектуре ELK-RabbitMQ и сервисе Invapi, который тоже использует брокер сообщений для общения с бэкэндом. В любой отказоустойчивой архитектуре необходим правильный мониторинг со всеми нотификациям. Кроме того, требуется не только мониторить работу кластера RabbitMQ, но и собирать метрики, проверять количество непрочитанных сообщений. Эти данные могут своевременно определить сбой в работе consumer — пользовательском приложении, которое получает сообщения. С версии 3.8.0 RabbitMQ поставляется со встроенной поддержкой Prometheus и Grafana.
Поддержка сборщика метрик Prometheus поставляется в плагине rabbitmq_prometheus. Плагин предоставляет все показатели RabbitMQ на выделенном TCP-порту в текстовом формате Prometheus. Для активации на кластере выполняем:
rabbitmq-plugins enable rabbitmq_prometheus
Появится открытый порт:
http/promethe: 15692
us:
Проверяем метрику:
Добавляем конфигурацию для Prometheus и Alertmanager:
- job_name: 'RABBIT MQ Prod NL'
static_configs:
- targets: ['rabbitnl-app01a.infra.hostkey.ru:15692','rabbitnl-app01b.infra.hostkey.ru:15692','rabbitnl-app01c.infra.hostkey.ru:15692']
Самое главное — целостность кластера и количество непрочитанных сообщений в очереди.
Если в очереди больше одного непрочитанного сообщения, отдаем алерт:
- alert: rabbitmq_queue_messages
expr: rabbitmq_queue_messages{job="RABBIT MQ Dev"} > 1
for: 1m
labels:
severity: page
annotations:
summary: Critical rabbitmq_queue_messages
- alert: unacknowledged messages
expr: rabbitmq_queue_messages_unacked{job="RABBIT MQ Prod NL"} > 1
for: 1m
labels:
severity: page
annotations:
summary: Critical rabbitmq_queue_messages_unacked
Аналогично выставляем алерты на целостность кластера.
Как было рассказано в первой статье по мониторингу, в Grafana есть возможность импортирования дашборда, добавляем id 10991.
Отображаемые показатели:
- Идентификация узла, в том числе версии RabbitMQ и Erlang/OTP.
- Память узла и диск доступны до блокировки издателей (триггеры тревоги).
- Доступны дескрипторы файлов узлов и сокеты TCP.
- Готовые и ожидающие сообщения.
- Частота входящих сообщений: опубликовано / перенаправлено в очереди / подтверждено / не подтверждено / возвращено / отброшено.
- Оценка исходящего сообщения: доставлено с автоматическим или ручным подтверждением / подтверждено / доставлено повторно.
- Операция опроса с автоматическим или ручным подтверждением, а также с пустыми операциями.
- Очереди, в том числе скорость объявления и удаления.
- Каналы, в том числе уровни открытия и закрытия.
- Соединения, в том числе открытые и закрытые курсы.
При необходимости недостающие параметры можно добавить (как создавать шаблоны, расскажем в следующих статьях).
Таким образом, инструменты мониторинга RabbitMQ позволяют проверять общие показатели узла, а также ready и unacknowledged messages. Важным преимуществом нашего решения является многоаспектный и оперативный контроль состояния оборудования.