Перейти к содержанию

RabbitMQ

Брокер сообщений: тревоги по памяти и диску, остановленные узлы и разделения сети, очереди, которые заполняются без читателей, очереди, которые больше не работают, и поток сообщений.

DumbMonit читает API управления с пользователем, помеченным monitoring, с пустыми правами: он видит состояние узлов, тревоги и очереди, и не может публиковать, потреблять, читать сообщение или что-либо менять. Один узел отчитывается за весь кластер.

Отказ, за которым стоит следить, — тот, о котором клиенты не сообщают. Когда узел пересекает верхнюю границу памяти или лимит свободного диска, RabbitMQ поднимает тревогу и блокирует каждого издателя в кластере: приложения просто зависают на publish, без ошибки. Второй — очередь, которая продолжает заполняться, потому что сервис, читавший из неё, остановился.

Что отслеживается

Все метрики с префиксом dumbmonit_rabbitmq_. Суммарные значения — это счётчики: графики и правила превращают их в скорости.

Метрика Что Метки
version_info значение 1 version, erlang, cluster
connections, channels, consumers, queues итоги по кластеру
messages_ready, messages_unacked сообщения, ожидающие во всех очередях, и доставленные, но ещё не подтверждённые
messages_published_total, messages_delivered_total, messages_redelivered_total, messages_unroutable_total поток сообщений; unroutable — сообщения, для которых не было связанной очереди
alarm 1, пока тревога поднята; память и диск присутствуют всегда, 0 без тревоги node, resource
alarms тревоги, поднятые в кластере
nodes, nodes_running, partitions
node_running, node_partitions на узел node
node_memory_used_bytes, node_memory_limit_bytes, node_memory_used_percent память относительно верхней границы node
node_disk_free_bytes, node_disk_free_limit_bytes свободный диск относительно лимита node
node_fd_used, node_fd_used_percent, node_uptime_seconds, node_being_drained node
queue_messages_ready, queue_messages_unacked, queue_consumers, queue_running на очередь, самые заполненные первыми, до числа отдельно наблюдаемых очередей vhost, queue
queues_without_consumers, queues_not_running среди этих очередей

Тревоги читаются из проверки здоровья /api/health/checks/alarms, которая видит их немедленно; статистика узлов отстаёт на несколько секунд.

Применяемые встроенные правила: «Тревога памяти или диска RabbitMQ», «Узел RabbitMQ не работает», «Разделение сети RabbitMQ», «Очередь RabbitMQ без потребителя», «Очередь RabbitMQ недоступна», плюс «Монитор недоступен».

Страница монитора

Панель над графиками читает то, что сохранила проверка; открытие страницы никогда не запрашивает RabbitMQ. Она сообщает, что не так, в одном предложении (тревоги, узлы и разделения, очереди с сообщениями без потребителя, не работающие очереди), затем — готовые и неподтверждённые сообщения, опубликованные и доставленные сообщения в секунду, подключения, потребители и очереди, затем — десять самых заполненных очередей с их потребителями и память и свободный диск каждого узла.

Создание пользователя RabbitMQ с тегом monitoring

  1. Включите плагин управления, если он ещё не включён (образы Docker с management уже его содержат). Его API слушает на порту 15672.

    rabbitmq-plugins enable rabbitmq_management
    
  2. Создайте пользователя только с тегом monitoring: он может читать состояние узлов, тревог и очередей, и не может ничего менять.

    rabbitmqctl add_user dumbmonit 'a-long-password'
    rabbitmqctl set_user_tags dumbmonit monitoring
    
  3. Дайте ему пустые права на каждом виртуальном хосте, чьи очереди вы хотите видеть. Тогда он сможет перечислять эти очереди, и всё равно не сможет публиковать, потреблять или читать сообщение. Повторите с -p для каждого другого виртуального хоста.

    rabbitmqctl set_permissions -p / dumbmonit '^$' '^$' '^$'
    
  4. В DumbMonit введите адрес одного узла, например «rabbit.lan», или «https://rabbit.lan:15671», когда API обслуживается по TLS. Один узел отчитывается за весь кластер: тревоги и разделения каждого узла, и каждую очередь.

Warning

Тревога по памяти или диску блокирует каждого издателя в кластере, и клиенты не получают ошибку: приложения просто зависают на publish. Очереди перечисляются, начиная с самых заполненных, до числа отдельно наблюдаемых очередей (по умолчанию 100); итоги всегда учитывают каждую очередь.

Учётные данные

Учётные данные Поля
Имя пользователя / пароль Пользователь monitoring, созданный выше, отправляется как базовая аутентификация HTTP.

Без прав на виртуальном хосте его очереди не перечисляются по отдельности; итоги по кластеру всё равно их учитывают.

Адрес: имя хоста или IP (rabbit.lan), host:port, или полный URL с префиксом пути за обратным прокси. Опции: протокол (по умолчанию HTTP), порт (15672), проверка сертификата, таймаут запроса (10 с), и число отдельно наблюдаемых очередей (100, от 0 до 500).