Плагин RabbitMQ
Мониторинг брокера сообщений RabbitMQ с подробными метриками, охватывающими очереди, сообщения, соединения, каналы и использование ресурсов.
Обзор
Плагин RabbitMQ собирает детальные метрики из RabbitMQ Management API, включая:
- Статистика сообщений - Готовые сообщения, неподтверждённые сообщения, всего сообщений
- Метрики очередей - Число очередей, глубина очередей, распределение потребителей
- Скорость сообщений - Скорость публикации, скорость доставки, скорость подтверждений
- Метрики соединений - Активные соединения, каналы, потребители
- Использование ресурсов - Использование памяти, свободное место на диске, файловые дескрипторы, сокеты
- Здоровье кластера - Статус узла, тревоги, время работы
Требования
Версия RabbitMQ
- Минимум: RabbitMQ 3.7
- Рекомендуется: RabbitMQ 3.11 или новее
- Протестировано с: RabbitMQ 3.9, 3.10, 3.11, 3.12
Плагин RabbitMQ Management
Обязательно: Плагин management должен быть включён
Проверьте, включён ли он:
sudo rabbitmq-plugins list | grep management
Включите, если отсутствует:
sudo rabbitmq-plugins enable rabbitmq_management
sudo systemctl restart rabbitmq-server
Зависимости Python
pip install requests>=2.28.0
Устанавливается автоматически при использовании PLUGINS=rabbitmq во время установки агента.
Доступ к API
Агенту нужен HTTP-доступ к RabbitMQ Management API (порт по умолчанию 15672).
Конфигурация
Базовая конфигурация
plugins:
rabbitmq:
enabled: true
host: localhost
port: 15672
username: guest
password: guest
С пользовательским пользователем
plugins:
rabbitmq:
enabled: true
host: localhost
port: 15672
username: monitor
password: your-secure-password
С HTTPS
plugins:
rabbitmq:
enabled: true
host: rabbitmq.example.com
port: 15671
username: monitor
password: your-password
use_ssl: true
verify_ssl: true
Все параметры конфигурации
plugins:
rabbitmq:
enabled: true # Enable/disable plugin
host: localhost # RabbitMQ host
port: 15672 # Management API port (15672=HTTP, 15671=HTTPS)
username: guest # Management username
password: guest # Management password
vhost: / # Virtual host (default: /)
use_ssl: false # Use HTTPS (default: false)
verify_ssl: true # Verify SSL certificates
timeout: 10 # Request timeout (seconds)
Переменные окружения
Конфигурацию можно переопределить переменными окружения:
export RABBITMQ_HOST="localhost"
export RABBITMQ_PORT="15672"
export RABBITMQ_USERNAME="monitor"
export RABBITMQ_PASSWORD="password"
Настройка RabbitMQ
Установка
Ubuntu/Debian:
# Add RabbitMQ repository
curl -1sLf 'https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/setup.deb.sh' | sudo bash
# Install RabbitMQ
sudo apt-get install rabbitmq-server
# Start service
sudo systemctl start rabbitmq-server
sudo systemctl enable rabbitmq-server
CentOS/RHEL:
# Add RabbitMQ repository
curl -1sLf 'https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/setup.rpm.sh' | sudo bash
# Install RabbitMQ
sudo yum install rabbitmq-server
# Start service
sudo systemctl start rabbitmq-server
sudo systemctl enable rabbitmq-server
Включение плагина Management
# Enable management plugin
sudo rabbitmq-plugins enable rabbitmq_management
# Restart RabbitMQ
sudo systemctl restart rabbitmq-server
Проверьте доступность management API:
curl http://localhost:15672/api/overview
Создание пользователя мониторинга
Создайте выделенного пользователя мониторинга:
# Create user
sudo rabbitmqctl add_user monitor secure-password
# Set tags (monitoring tag gives read-only access)
sudo rabbitmqctl set_user_tags monitor monitoring
# Grant permissions (read-only on all resources)
sudo rabbitmqctl set_permissions -p / monitor "^$" "^$" ".*"
Или используйте пользователя guest (не рекомендуется для продакшена):
Учётные данные по умолчанию:
- Имя пользователя:
guest - Пароль:
guest - Примечание: Пользователь
guestпо умолчанию имеет доступ только с localhost
Теги и права пользователя
Тег monitoring предоставляет доступ только для чтения к management API:
sudo rabbitmqctl set_user_tags monitor monitoring
Необходимые права:
configure:^$(нет прав на configure)write:^$(нет прав на запись)read:.*(чтение всех ресурсов)
sudo rabbitmqctl set_permissions -p / monitor "^$" "^$" ".*"
Включение удалённого доступа к Management API
По умолчанию management API слушает только на localhost.
Отредактируйте конфигурацию RabbitMQ:
sudo nano /etc/rabbitmq/rabbitmq.conf
Добавьте:
# Listen on all interfaces
management.tcp.ip = 0.0.0.0
Или используйте переменную окружения:
sudo nano /etc/rabbitmq/rabbitmq-env.conf
# Add:
RABBITMQ_MANAGEMENT_LISTENER_IP=0.0.0.0
Перезапустите RabbitMQ:
sudo systemctl restart rabbitmq-server
Примечание по безопасности: Открывайте management API только доверенным сетям. Используйте правила файрвола.
Собираемые метрики
Метрики сообщений
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
messages_ready |
Сообщения, готовые к доставке | Количество | Gauge |
messages_unacknowledged |
Доставленные, но не подтверждённые сообщения | Количество | Gauge |
messages_total |
Всего сообщений во всех очередях | Количество | Gauge |
publish_rate |
Скорость публикации сообщений | msg/s | Gauge |
deliver_rate |
Скорость доставки сообщений | msg/s | Gauge |
ack_rate |
Скорость подтверждения сообщений | msg/s | Gauge |
Метрики очередей
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
queue_count |
Всего очередей | Количество | Gauge |
consumers_total |
Всего потребителей | Количество | Gauge |
Метрики соединений
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
connections_total |
Активные соединения | Количество | Gauge |
channels_total |
Активные каналы | Количество | Gauge |
Метрики ресурсов
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
memory_used_mb |
Память, используемая RabbitMQ | MB | Gauge |
memory_limit_mb |
Лимит памяти | MB | Gauge |
disk_free_gb |
Свободное место на диске | GB | Gauge |
disk_free_alarm |
Статус дисковой тревоги (1=активна, 0=ок) | Boolean | Gauge |
fd_used |
Использовано файловых дескрипторов | Количество | Gauge |
fd_total |
Доступно файловых дескрипторов | Количество | Gauge |
sockets_used |
Использовано сокетов | Количество | Gauge |
sockets_total |
Доступно сокетов | Количество | Gauge |
Метрики узла
| Метрика | Описание | Единица | Тип |
|---|---|---|---|
node_name |
Имя узла RabbitMQ | Строка | Info |
uptime_seconds |
Время работы узла | Секунды | Gauge |
Метрики дашборда
Дашборд StatusRadar отображает:
Карточка обзора
- Messages Ready - Сообщения в очереди, ожидающие доставки
- Publish Rate - Сообщений опубликовано в секунду
- Queue Count - Всего очередей
- Memory Used - Утилизация памяти против лимита
- Connections - Активные клиентские соединения
- Consumers - Активные потребители сообщений
График сообщений во времени
- Готовые сообщения
- Неподтверждённые сообщения
- Тренд общего числа сообщений
График скорости сообщений
- Скорость публикации (msg/s)
- Скорость доставки (msg/s)
- Скорость подтверждений (msg/s)
График использования памяти
- Используемая память во времени
- Порог лимита памяти
График соединений и очередей
- Активные соединения
- Активные потребители
- Число очередей
- Число каналов
Таблица информации о сервере
- Имя узла и время работы
- Статистика сообщений
- Метрики очередей
- Число соединений и каналов
- Использование ресурсов (память, диск, файловые дескрипторы, сокеты)
- Статус тревог
Установка
Быстрая установка
PLUGINS='rabbitmq' \
TOKEN='your-agent-token' \
RABBITMQ_USERNAME='monitor' \
RABBITMQ_PASSWORD='your-password' \
bash -c "$(curl -sL https://statusradar.dev/install-agent.sh)"
Установка на существующий агент
-
Включите плагин RabbitMQ management (см. выше)
-
Настройте агент:
sudo nano /opt/statusradar/config/agent.yamlДобавьте:
plugins: rabbitmq: enabled: true host: localhost port: 15672 username: monitor password: your-secure-password -
Перезапустите агент:
sudo systemctl restart statusradar-agent -
Проверьте:
sudo journalctl -u statusradar-agent -n 50 --no-pager | grep rabbitmqОжидаемо:
INFO: Plugin rabbitmq: Metrics collected successfully INFO: Plugin rabbitmq: 5 queues, 123 messages ready
Тестирование
Ручной тест плагина
cd /opt/statusradar
python3 plugins/rabbitmq_plugin.py
Ожидаемый вывод:
Plugin: rabbitmq
Enabled: True
Available: True
Collecting metrics...
{
"node_name": "rabbit@localhost",
"uptime_seconds": 86400,
"messages_ready": 123,
"messages_unacknowledged": 45,
"messages_total": 168,
"queue_count": 5,
"publish_rate": 12.5,
"deliver_rate": 11.8,
"ack_rate": 11.8,
"connections_total": 8,
"channels_total": 12,
"consumers_total": 10,
"memory_used_mb": 145.6,
"memory_limit_mb": 1024.0,
"disk_free_gb": 25.3,
"disk_free_alarm": 0,
"fd_used": 45,
"fd_total": 1024,
"sockets_used": 12,
"sockets_total": 943
}
Тест Management API
# Get overview
curl -u monitor:password http://localhost:15672/api/overview
# Get queues
curl -u monitor:password http://localhost:15672/api/queues
# Get connections
curl -u monitor:password http://localhost:15672/api/connections
Доступ к веб-интерфейсу Management
Откройте браузер:
http://localhost:15672
Войдите с учётными данными (по умолчанию: guest/guest)
Устранение неполадок
Плагин не собирает метрики
Проверка 1: Запущен ли RabbitMQ?
sudo systemctl status rabbitmq-server
Проверка 2: Включён ли плагин management?
sudo rabbitmq-plugins list | grep management
# Should show: [E*] rabbitmq_management
Проверка 3: Может ли агент получить доступ к management API?
curl -u monitor:password http://localhost:15672/api/overview
Проверка 4: Проверьте логи агента
sudo journalctl -u statusradar-agent -n 100 --no-pager | grep rabbitmq
Распространённые ошибки
"Management plugin not enabled"
Ошибка:
ERROR: Plugin rabbitmq: HTTP 404 - management plugin not enabled
Решение:
sudo rabbitmq-plugins enable rabbitmq_management
sudo systemctl restart rabbitmq-server
"Authentication failed"
Ошибка:
ERROR: Plugin rabbitmq: HTTP 401 - Authentication failed
Причины:
- Неверные имя пользователя/пароль
- Пользователь не существует
- У пользователя нет прав
Решение:
# Verify user exists
sudo rabbitmqctl list_users
# Recreate user
sudo rabbitmqctl delete_user monitor
sudo rabbitmqctl add_user monitor secure-password
sudo rabbitmqctl set_user_tags monitor monitoring
sudo rabbitmqctl set_permissions -p / monitor "^$" "^$" ".*"
"Connection refused"
Ошибка:
ERROR: Plugin rabbitmq: Connection refused
Причины:
- RabbitMQ не запущен
- Management API не слушает на ожидаемом порту
- Файрвол блокирует соединение
Решение:
# Check RabbitMQ is running
sudo systemctl status rabbitmq-server
# Check port
sudo netstat -tlnp | grep 15672
# Check management listener
sudo rabbitmqctl status | grep listeners
"Guest access refused"
Ошибка:
ERROR: Plugin rabbitmq: HTTP 401 - Access refused for user 'guest'
Причина: Пользователь guest по умолчанию имеет доступ только с localhost
Решения:
Вариант 1: используйте localhost (если агент работает на том же сервере):
plugins:
rabbitmq:
host: localhost # or 127.0.0.1
Вариант 2: включите удалённый доступ для guest (не рекомендуется):
sudo nano /etc/rabbitmq/rabbitmq.conf
# Add:
loopback_users = none
Вариант 3: создайте выделенного пользователя (рекомендуется):
sudo rabbitmqctl add_user monitor password
sudo rabbitmqctl set_user_tags monitor monitoring
sudo rabbitmqctl set_permissions -p / monitor "^$" "^$" ".*"
Влияние на производительность
На RabbitMQ
Минимальное влияние:
- Management API возвращает предварительно рассчитанную статистику
- Без влияния на обработку или маршрутизацию сообщений
- Время ответа: < 50 мс
Бенчмарк:
- Накладные расходы: < 0.1% CPU
- Нет измеримого падения производительности
На агент
Использование ресурсов:
- Память: +12 MB
- CPU: +2% во время сбора
- Сеть: +2 KB за сбор
Время сбора: 0.1-0.5 секунды
Сценарии использования
1. Мониторинг глубины очередей
Отслеживайте:
- Готовые сообщения
- Неподтверждённые сообщения
- Скорость роста очередей
Настройте оповещения на:
- Готовые сообщения > 10,000 (затор в очереди)
- Быстрый рост сообщений
- Отсутствие потребителей на очередях
2. Мониторинг потребителей
Отслеживайте:
- Число потребителей на очередь
- Скорость доставки против скорости публикации
- Скорость подтверждений
Настройте оповещения на:
- Потребители = 0 (нет обработки)
- Скорость доставки < скорости публикации (отставание)
- Скорость ack < скорости доставки (медленная обработка)
3. Мониторинг соединений
Отслеживайте:
- Активные соединения
- Число каналов
- Скорость создания соединений
Настройте оповещения на:
- Соединения приближаются к лимиту
- Перегрузку соединениями (частое открытие/закрытие)
- Каналы без потребителей
4. Мониторинг ресурсов
Отслеживайте:
- Использование памяти против лимита
- Свободное место на диске
- Использование файловых дескрипторов
- Использование сокетов
Настройте оповещения на:
- Память > 80% от лимита
- Активную дисковую тревогу
- Файловые дескрипторы > 90% от лимита
5. Мониторинг скорости сообщений
Отслеживайте:
- Скорость публикации
- Скорость доставки
- Соотношение скорости ack
Оптимизируйте:
- Число потребителей
- Настройки prefetch
- Конфигурации очередей
Лучшие практики
1. Установите лимиты ресурсов
Лимит памяти (vm_memory_high_watermark):
sudo nano /etc/rabbitmq/rabbitmq.conf
# Add:
vm_memory_high_watermark.relative = 0.4 # 40% of system RAM
Лимит свободного места на диске:
disk_free_limit.absolute = 10GB
2. Следите за тревогами памяти
Когда срабатывает тревога памяти:
- Публикаторы блокируются
- Сообщения не могут быть опубликованы
- Потребители продолжают обработку
Проверьте статус тревог:
sudo rabbitmqctl status | grep alarms
3. Настройте файловые дескрипторы
Увеличьте лимит FD:
sudo nano /etc/systemd/system/rabbitmq-server.service.d/limits.conf
# Add:
[Service]
LimitNOFILE=65536
sudo systemctl daemon-reload
sudo systemctl restart rabbitmq-server
4. Следите за глубиной очередей
Здоровая глубина очереди: < 1000 сообщений на очередь
Если очереди растут:
- Добавьте больше потребителей
- Увеличьте prefetch count
- Оптимизируйте обработку потребителем
- Проверьте dead letter очереди
5. Используйте тег monitoring
Всегда создавайте пользователя мониторинга с тегом monitoring (только чтение):
sudo rabbitmqctl set_user_tags monitor monitoring
Никогда не используйте тег administrator для мониторинга - избыточные привилегии.
6. Включите heartbeat
Настройте интервал heartbeat:
heartbeat = 60
Помогает обнаруживать и очищать мёртвые соединения.
Тюнинг производительности RabbitMQ
Оптимизация потребителей
Установите подходящий prefetch count:
channel.basic_qos(prefetch_count=10)
- Слишком низкий → недозагруженные потребители
- Слишком высокий → проблемы с памятью
Конфигурация очередей
Durable очереди:
channel.queue_declare(queue='tasks', durable=True)
- Durable: Переживают перезапуски (медленнее)
- Transient: Быстрее, теряются при перезапуске
Lazy очереди (для больших очередей):
rabbitmqctl set_policy lazy-queue "^lazy-" '{"queue-mode":"lazy"}' --apply-to queues
Конфигурация кластера
Для высокой доступности:
# Set policy for mirrored queues
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
Расширенная конфигурация
Несколько виртуальных хостов
Мониторинг разных виртуальных хостов:
plugins:
rabbitmq_main:
enabled: true
host: localhost
vhost: /
username: monitor
password: password
rabbitmq_staging:
enabled: true
host: localhost
vhost: /staging
username: monitor
password: password
Кластер RabbitMQ
Мониторьте каждый узел отдельно:
plugins:
rabbitmq_node1:
enabled: true
host: rabbit1.example.com
port: 15672
username: monitor
password: password
rabbitmq_node2:
enabled: true
host: rabbit2.example.com
port: 15672
username: monitor
password: password
Docker-контейнер
Мониторинг RabbitMQ в Docker:
plugins:
rabbitmq:
enabled: true
host: rabbitmq-container
port: 15672
username: guest
password: guest
Docker run:
docker run -d --name rabbitmq \
-p 5672:5672 \
-p 15672:15672 \
rabbitmq:3-management
Примеры конфигураций
Базовый продакшен
plugins:
rabbitmq:
enabled: true
host: localhost
port: 15672
username: monitor
password: ${RABBITMQ_PASSWORD}
С HTTPS
plugins:
rabbitmq:
enabled: true
host: rabbitmq.internal
port: 15671
username: monitor
password: ${RABBITMQ_PASSWORD}
use_ssl: true
verify_ssl: true
Кластер высокой доступности
plugins:
rabbitmq_node1:
enabled: true
host: rabbit-node1.internal
port: 15672
username: monitor
password: ${RABBITMQ_PASSWORD}
rabbitmq_node2:
enabled: true
host: rabbit-node2.internal
port: 15672
username: monitor
password: ${RABBITMQ_PASSWORD}
rabbitmq_node3:
enabled: true
host: rabbit-node3.internal
port: 15672
username: monitor
password: ${RABBITMQ_PASSWORD}
Ограничения
Текущие ограничения
- Нет деталей по отдельным очередям - Только агрегированная статистика
- Нет метрик по отдельным exchange - Мониторинг на уровне exchange недоступен
- Нет деталей по потребителям - Метрики отдельных потребителей не собираются
Масштабируемость
Протестировано с:
- 1000+ очередей
- 10,000+ сообщений в секунду
- 500+ соединений
Производительность:
- Время ответа API слегка растёт с числом очередей
- Рекомендуется: < 1000 очередей для оптимальной производительности
Чек-лист мониторинга
Критические метрики:
- Готовые сообщения > 10,000
- Активная тревога памяти
- Активная дисковая тревога
- Файловые дескрипторы > 90%
Важные метрики: 5. Число потребителей = 0 6. Скорость публикации >> скорости доставки 7. Рост соединений 8. Утечки каналов
Пороги оповещений
# Recommended thresholds
messages_ready: > 10000
memory_usage_percent: > 80
disk_free_alarm: == 1
fd_usage_percent: > 90
consumers_total: == 0 # For queues that should have consumers
Дальнейшие шаги
- Обзор
- Требования
- Версия RabbitMQ
- Плагин RabbitMQ Management
- Зависимости Python
- Доступ к API
- Конфигурация
- Базовая конфигурация
- С пользовательским пользователем
- С HTTPS
- Все параметры конфигурации
- Переменные окружения
- Настройка RabbitMQ
- Установка
- Включение плагина Management
- Создание пользователя мониторинга
- Теги и права пользователя
- Включение удалённого доступа к Management API
- Собираемые метрики
- Метрики сообщений
- Метрики очередей
- Метрики соединений
- Метрики ресурсов
- Метрики узла
- Метрики дашборда
- Карточка обзора
- График сообщений во времени
- График скорости сообщений
- График использования памяти
- График соединений и очередей
- Таблица информации о сервере
- Установка
- Быстрая установка
- Установка на существующий агент
- Тестирование
- Ручной тест плагина
- Тест Management API
- Доступ к веб-интерфейсу Management
- Устранение неполадок
- Плагин не собирает метрики
- Распространённые ошибки
- Влияние на производительность
- На RabbitMQ
- На агент
- Сценарии использования
- 1. Мониторинг глубины очередей
- 2. Мониторинг потребителей
- 3. Мониторинг соединений
- 4. Мониторинг ресурсов
- 5. Мониторинг скорости сообщений
- Лучшие практики
- 1. Установите лимиты ресурсов
- 2. Следите за тревогами памяти
- 3. Настройте файловые дескрипторы
- 4. Следите за глубиной очередей
- 5. Используйте тег monitoring
- 6. Включите heartbeat
- Тюнинг производительности RabbitMQ
- Оптимизация потребителей
- Конфигурация очередей
- Конфигурация кластера
- Расширенная конфигурация
- Несколько виртуальных хостов
- Кластер RabbitMQ
- Docker-контейнер
- Примеры конфигураций
- Базовый продакшен
- С HTTPS
- Кластер высокой доступности
- Ограничения
- Текущие ограничения
- Масштабируемость
- Чек-лист мониторинга
- Пороги оповещений
- Дальнейшие шаги