Эта серия представляет собой краткий обзор книги «RabbitMQ в действии: эффективное развертывание распределенных очередей сообщений».
В предыдущей статье обобщаются возможные ненормальные сценарии и анализируется гарантия доступности, предоставляемая RabbitMQ.После того, как сервер выйдет из строя, служба все еще может работать нормально. Кроме того, необходимо как можно скорее восстановить аварийный сервер, повторно присоединиться к кластеру и отправить неиспользованные сообщения.Благодаря мониторингу ошибки могут быть получены и обработаны как можно быстрее.
Кроме того, мы хотим активно разбираться в ситуации накопления и потребления сообщений, а также в нагрузке серверных узлов. RabbitMQ предоставляет несколько удобных и интуитивно понятных методов понимания, включая подключаемые модули веб-управления, REST API и сценарии rabbitmqadmin.
Через введение вы узнаете:
- плагин для веб-управления
- REST API
- скрипт RabbitMQadmin
- Nagios и мониторинг RabbitMQ
плагин для веб-управления
Подключаемый модуль RabbitMQ написан на Erlang и работает на той же виртуальной машине Erlang, что и сервер.Используйте следующую команду, чтобы включить подключаемый модуль веб-управления:
sudo ./rabbitmq-plugins enable rabbitmq_management
После запуска зайдите на порт 15672, чтобы увидеть главную страницу веб-страницы управления:
Добавить пользователя
По умолчанию предоставляется гостевой пользователь по умолчанию, а пароль также гостевой.В онлайн-среде необходимо создать нового пользователя и удалить гостевого пользователя.
Сначала перейдите на вкладку «Администратор», вы можете просматривать или добавлять пользователей, при добавлении пользователей вы можете указать Теги, которые эквивалентны ролям, и будут иметь соответствующие разрешения:
Щелкните имя пользователя в списке пользователей, чтобы назначить разрешения, изменить или удалить пользователей.При назначении разрешений вы можете уточнить его до темы под виртуальным и разделить их в соответствии с категориями чтения, записи и конфигурации:
Управление очередями, обменами, привязками
Переключитесь на вкладку «Биржи» для просмотра и управления биржами, щелкните имя биржи, чтобы просмотреть более подробную информацию, например, привязки биржи, и добавьте новые привязки:
Переключитесь на вкладку «Очереди», вы можете просмотреть информацию об очереди, щелкнув имя очереди, вы можете просмотреть статистику, такую как количество и размер сообщений во всех состояниях очереди:
Вы также можете просматривать потребителей и привязки, публиковать и получать сообщения:
REST API
Иногда необходимо инициализировать некоторые очереди и обмены.Каждый раз, когда развертывается новая среда, создавать ее шаг за шагом немного хлопотно.Легко реализовать автоматизированные скрипты через REST API.
Когда подключаемый модуль веб-управления включен, получается не только веб-интерфейс пользователя, но и API-интерфейс веб-управления на основе REST, который может вызываться любым языком или сценарием, если он имеет библиотеку HTTP.
Интерфейс вернет строку json, например, получение всех очередей:
curl -i -u admin:admin http://localhost:15672/api/queues
Вернет массив json, каждый элемент которого представляет собой очередь, содержащую различные свойства очереди:
скрипт RabbitMQadmin
Кроме того, для просмотра метаданных и некоторых статистических данных предоставляется скрипт rabbitmqadmin, который является оболочкой для REST API, использует чистый интерфейс для взаимодействия с ним, а выводимый контент форматируется для нашего удобства.
Например, чтобы просмотреть все очереди, вы можете написать:
./rabbitmqadmin list queues
вернет следующие результаты:
монитор
Мониторинг 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~