RabbitMQ Combat: управление интерфейсом и мониторинг

задняя часть RabbitMQ

Эта серия представляет собой краткий обзор книги «RabbitMQ в действии: эффективное развертывание распределенных очередей сообщений».

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

Кроме того, мы хотим активно разбираться в ситуации накопления и потребления сообщений, а также в нагрузке серверных узлов. RabbitMQ предоставляет несколько удобных и интуитивно понятных методов понимания, включая подключаемые модули веб-управления, REST API и сценарии rabbitmqadmin.

Через введение вы узнаете:

  • плагин для веб-управления
  • REST API
  • скрипт RabbitMQadmin
  • Nagios и мониторинг RabbitMQ

плагин для веб-управления

Подключаемый модуль RabbitMQ написан на Erlang и работает на той же виртуальной машине Erlang, что и сервер.Используйте следующую команду, чтобы включить подключаемый модуль веб-управления:

sudo ./rabbitmq-plugins enable rabbitmq_management

После запуска зайдите на порт 15672, чтобы увидеть главную страницу веб-страницы управления:

RabbitMQ主页面

Добавить пользователя

По умолчанию предоставляется гостевой пользователь по умолчанию, а пароль также гостевой.В онлайн-среде необходимо создать нового пользователя и удалить гостевого пользователя.

Сначала перейдите на вкладку «Администратор», вы можете просматривать или добавлять пользователей, при добавлении пользователей вы можете указать Теги, которые эквивалентны ролям, и будут иметь соответствующие разрешения:

查看和添加用户

Щелкните имя пользователя в списке пользователей, чтобы назначить разрешения, изменить или удалить пользователей.При назначении разрешений вы можете уточнить его до темы под виртуальным и разделить их в соответствии с категориями чтения, записи и конфигурации:

添加权限

Управление очередями, обменами, привязками

Переключитесь на вкладку «Биржи» для просмотра и управления биржами, щелкните имя биржи, чтобы просмотреть более подробную информацию, например, привязки биржи, и добавьте новые привязки:

交换器

交换器绑定

Переключитесь на вкладку «Очереди», вы можете просмотреть информацию об очереди, щелкнув имя очереди, вы можете просмотреть статистику, такую ​​​​как количество и размер сообщений во всех состояниях очереди:

队列列表

队列统计信息

Вы также можете просматривать потребителей и привязки, публиковать и получать сообщения:

查看消费者和绑定

REST API

Иногда необходимо инициализировать некоторые очереди и обмены.Каждый раз, когда развертывается новая среда, создавать ее шаг за шагом немного хлопотно.Легко реализовать автоматизированные скрипты через REST API.

Когда подключаемый модуль веб-управления включен, получается не только веб-интерфейс пользователя, но и API-интерфейс веб-управления на основе REST, который может вызываться любым языком или сценарием, если он имеет библиотеку HTTP.

Интерфейс вернет строку json, например, получение всех очередей:

curl -i -u admin:admin http://localhost:15672/api/queues

Вернет массив json, каждый элемент которого представляет собой очередь, содержащую различные свойства очереди:

REST API请求结果

скрипт RabbitMQadmin

Кроме того, для просмотра метаданных и некоторых статистических данных предоставляется скрипт rabbitmqadmin, который является оболочкой для REST API, использует чистый интерфейс для взаимодействия с ним, а выводимый контент форматируется для нашего удобства.

Например, чтобы просмотреть все очереди, вы можете написать:

./rabbitmqadmin list queues

вернет следующие результаты:

rabbitmqadmin返回结果

монитор

Мониторинг RabbitMQ заключается не только в том, чтобы убедиться, что порт 5672 открыт и может принимать TCP-соединения, но также в возможности имитировать клиент AMQP, чтобы убедиться, что канал подхватывается после соединения, если вы можете использовать REST API, чтобы узнать правильно ли функционируют все компоненты, из которых состоит RabbitMQ, и если да, то было бы лучше, если бы они могли нормально общаться.

Книга знакомит с использованием фреймворка мониторинга Nagios для мониторинга. Я не использовал его раньше. Я собрал здесь некоторую информацию и дам краткое введение.

Nagios

Nagios — это инструмент мониторинга с открытым исходным кодом, который может эффективно отслеживать состояние хостов Windows, Linux и Unix, сетевые настройки, такие как коммутаторы, маршрутизаторы, принтеры и т. д. Когда состояние системы или службы является ненормальным, будет отправлено электронное письмо или SMS-уведомление, чтобы уведомить об эксплуатации веб-сайта и обслуживающему персоналу в первый раз, а обычное электронное письмо или SMS-уведомление будет отправлено после восстановления статуса.

Он не включает в себя эту часть самой функции.Все функции мониторинга и обнаружения выполняются через различные плагины.После запуска Nagios он будет автоматически периодически вызывать плагин для определения состояния сервера.В то же время Nagios будет поддерживать очередь, и все подключаемые модули возвращаются Возвращенная информация о состоянии поступает в очередь, Nagios каждый раз считывает информацию из головы очереди и после обработки отображает результаты состояния через Интернет.

Nagios может распознавать 4 вида возвращаемой информации о статусе:

  • 0 (ОК) означает нормальный/зеленый статус;
  • 1 (ПРЕДУПРЕЖДЕНИЕ) означает предупреждение/желтый цвет;
  • 2(КРИТИЧЕСКИЙ) означает очень серьезную ошибку/красный;
  • 3 (НЕИЗВЕСТНО) означает неизвестную ошибку/темно-желтый цвет.

Nagios оценивает состояние объекта мониторинга по значению, возвращаемому плагином, и отображает его через Интернет, чтобы администратор мог вовремя найти неисправность.

Как он управляет объектами удаленного сервера, используя плагин NRPE, основной процесс выглядит следующим образом:

  • Nagios выполняет установленный в нем плагин check_nrpe и сообщает check_nrpe, какие сервисы детектировать;
  • Через SSL check_nrpe подключается к демону NRPE на удаленной машине;
  • NRPE запускает различные локальные плагины для определения локальных служб и статуса;
  • NRPE отправляет результат обнаружения в check_nrpe на стороне хоста, а check_nrpe отправляет результат в очередь состояния Nagios;
  • Nagios по очереди считывает информацию из очереди, а затем отображает результаты;
Мониторинг RabbitMQ

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

Основная идея состоит в том, чтобы написать сценарий обнаружения, необходимый для Nagios, использовать клиент AMQP или REST API для получения интересующей информации мониторинга и возвращать различные коды состояния в зависимости от ситуации.

Конкретные сценарии не будут вводиться один за другим. Вот пример для контроля правильности постоянной конфигурации очереди. Получите информацию об очереди через api/queues//, чтобы определить, является ли ее устойчивый атрибут истинным. следует:

import sys, json, httplib, urllib, base64, socket

# 1.定义状态码
EXIT_OK = 0
EXIT_WARNING = 1
EXIT_CRITICAL = 2
EXIT_UNKNOWN = 3

# 2.解析参数
server, port = sys.argv[1].split(":")
vhost = sys.argv[2]
username = sys.argv[3]
password = sys.argv[4]
queue_name = sys.argv[5]
auto_delete = json.loads(sys.argv[6].lower())
durable = json.loads(sys.argv[7].lower())

# 3.连接服务器
conn = httplib.HTTPConnection(server, port)

# 4.构建api路径
path = "/api/queues/%s/%s" % (urllib.quote(vhost, safe=""),
                              urllib.quote(queue_name))
method = "GET"

# 5.执行http请求
credentials = base64.b64encode("%s:%s" % (username, password))
try:
    conn.request(method, path, "",
                 {"Content-Type" : "application/json",
                  "Authorization" : "Basic " + credentials})

# 6.连接异常,退出
except socket.error:
    print "UNKNOWN: Could not connect to %s:%s" % (server, port)
    exit(EXIT_UNKNOWN)

response = conn.getresponse()

# 7.状态码为404,说明队列不存在,退出
if response.status == 404:
    print "CRITICAL: Queue %s does not exist." % queue_name
    exit(EXIT_CRITICAL)

# 8.durable属性是否正确
if response["durable"] != durable:
    print "WARN: Queue '%s' - durable flag is NOT %s." % \
          (queue_name, durable)
    exit(EXIT_WARNING)

# 9.返回正常
print "OK: Queue %s configured correctly." % queue_name
exit(EXIT_OK)

В следующей статье будут рассмотрены вопросы безопасности и производительности RabbitMQ.

Добро пожаловать, чтобы отсканировать QR-код ниже и подписаться на мою личную общедоступную учетную запись WeChat~

情情说