LINUX.ORG.RU

Zabbix мониторинг очереди RabbitMQ

 ,


0

2

Товарищи, появилась задача мониторить конкретные очереди в RabbitMQ через Zabbix. Конкретно отслеживать ready месседж больше определенного котичества. В стандартном шаблоне под 6.0 этого нет. Понимаю, что нужно менять шаблон под себя, заводить новый элемент данных, но опыта в этом нет. У кого был опыт или просто знает как это сделать?

P.S. Также был бы благодарен за подсказки на статьи, книги или видеоуроки по изменению шаблонов и созданию под себя.



Последнее исправление: sivsoft (всего исправлений: 1)

Как бы всё есть в официальной доке. https://www.zabbix.com/documentation/current/en/manual/config/items/item

Давай конкретные вопросы, что попробовал, что не получилось.

shell-script ★★★★★
()
Последнее исправление: shell-script (всего исправлений: 1)
Ответ на: комментарий от shell-script

Пробовал создать элемент данных с типом HTTP agent, потому что заббикс агент не имеет нужного ключа в 6 версии. Попробовал использовать ключ: rabbitmq.queue.messages_ready[«{#VHOST}/{#QUEUE}»] Я не понимаю, что такое ключ, учитывая, что ниже идет URL, который тоже нужно ввести. Как они взаимодействуют совсем из документации не понятно. Пробовал вводить просто ничего не меняя. Пробовал вместо VHOST и QUEUE подставлять в виде виртуального хоста в рэббите и очереди. Пробовал добавлять внизу значения, в поля запроса, типа: VHOST = название виртуального хоста. Пробовал просто оставить без параметров rabbitmq.queue.messages_ready. Без толку. Я не понимаю на что вообще влияет ключ. Такое впечатление, что ни на что. Пробуешь тест, основное влияние URL. URL в виде: {$RABBITMQ.API.SCHEME}://{HOST.CONN}:{$RABBITMQ.API.PORT}/api/queues

Пробовал продолжать в виде: …/api/queues/виртуальный хост/очередь

Тоже ничего.

Максимум, что удавалось добиться, просто в JSON данные обо всех очередях с руганью, что данные не число, а строка.

Сейчас уже и так не могу. При попытке использовать ключ ругается, что ключ уже существует. Хотя я удалял созданный элемент данных.

sivsoft
() автор топика
Ответ на: комментарий от shell-script

Конкретный вопрос: как получиться количество сообщений ready в конкретной очереди у конкретного виртуального хоста по HTTP в элементе данных?

sivsoft
() автор топика
Ответ на: комментарий от sivsoft

шаблон взят этот? https://www.zabbix.com/integrations/rabbitmq

потому что заббикс агент не имеет нужного ключа в 6 версии

какого ключа? И это zabbix-agent или zabbix-agent2? хотя скорее всего не важно

Попробовал использовать ключ: rabbitmq.queue.messages_ready[«{#VHOST}/{#QUEUE}»]

это dependent item, он считается по данным из другого элемента.

Я не понимаю на что вообще влияет ключ

  1. служит для различия элементов и для сылок
  2. за некоторыми «ключами» спрятаны обработчики, которые получают данные через агента, некоторые ключи задаешь сам и делаешь обработчики для них

Сейчас уже и так не могу. При попытке использовать ключ ругается, что ключ уже существует.

импортируй шаблон заново, почисти хост и начни читать маны сначала.
Если я угадал с шаблоном, то там автообнаружение, которое создаст необходимые элементы
Для начала должны заработать элементы с ключами типа web.page.get[]. При этом править их не надо, нужные параметры, если они отличаются от дефолтных, надо задать через макросы (по факту это логин и пароль)

xgatron
()
Ответ на: комментарий от xgatron

В общем сделал через автодискавери. Находит, настроил, чтобы добавляла шаблон RabbitMQ node by Zabbix agent к нему и добавляла хост в заббикс. Нашло, метрики прописало, хост добавился. Увидев, что хост появился, я провисал макросы {$RABBITMQ.API.PASSWORD}, пользователь тот же, порт тоже не менял. Также прописал макрос {$RABBITMQ.CLUSTER.NAME}. API.HOST и API.CLUSTRER_HOST оставил как есть 127.0.0.1. В итоге не заработала. Идет ошибка: RabbitMQ: Failed to fetch nodes data (or no data for 30m). Заходил и смотрел последние данные по хосту. В одних метриках он пишет not authorized, в других permission denieded.

Попробовал поменять API.HOST и API.CLUSTRER_HOST на IP внешний - тот же результат.

Куда копать дальше, не знаю.

sivsoft
() автор топика
Ответ на: комментарий от sivsoft

Еще момент. Пробовал заходить в item RabbitMQ: Get nodes и сделать тест. Выдает Value: HTTP/1.1 500 Internal Server Error Connection: close

А сверху с треугольничком выдает ошибку: cannot perform regular expression «\n\s?\n(.*)» match for value of type «string»: pattern does not march

Что не так не пойму.

Также пользователь имеет права на мониторинг с VHOST /

sivsoft
() автор топика
Ответ на: комментарий от xgatron

Также проверил item RabbitMQ: Get queques получает JSON. Но как дальше? Метрики на количество сообщений конкретной очереди конкретного виртуального хоста не нашел. Как это настраивать тоже не понятно.

sivsoft
() автор топика
Ответ на: комментарий от sivsoft

Еще item то на очереди получает, в смысле JSON. Но в самом итеме препроцессинг не работает. Как раз та же ошибка, что и с Get nodes: ругается на «\n\s?\n(.*)»

sivsoft
() автор топика
Ответ на: комментарий от sivsoft

В общем сделал через автодискавери.

Моя ошибка. То, про что я говорил, называется Low-Level Discovery (LLD)

Увидев, что хост появился, я провисал макросы {$RABBITMQ.API.PASSWORD}, пользователь тот же, порт тоже не менял.

Плагин в RabbitMQ точно включен?
И вот эта штука точно была выполнена до конца? После включения плагина.

rabbitmqctl add_user zbx_monitor <PASSWORD>
rabbitmqctl set_permissions  -p / zbx_monitor "" "" ".*"
rabbitmqctl set_user_tags zbx_monitor monitoring

Еще item то на очереди получает, в смысле JSON. Но в самом итеме препроцессинг не работает. Как раз та же ошибка, что и с Get nodes: ругается на «\n\s?\n(.*)»

Сейчас нет возможности проверять чего там приходит. Какая версия рэббита?
Можно попробовать заменить регулярку на (.*) и посмотреть, что будет.

Также проверил item RabbitMQ: Get queques получает JSON. Но как дальше? Метрики на количество сообщений конкретной очереди конкретного виртуального хоста не нашел. Как это настраивать тоже не понятно.

В джейсоне нужное есть? Если есть, то создавать нужный item prototype используя jsonpath в препроцессинге (пример) и макросы LLD для задания ключей (это которые с #, вида {#MACRO}, искать в нужной LLD)
Но сначала все же добить авторизацию.

xgatron
()
Ответ на: комментарий от xgatron

Доступа рутового к серверу rabbit у меня сейчас нет. Я админ на rabbit, но не рут на серваке. Я другими занимаюсь, но в принципе попрошу дать доступ.

Моя ошибка. То, про что я говорил, называется Low-Level Discovery (LLD)

А, да понял. Попробую. Плаваю в этой теме, но попробую.

И вот эта штука точно была выполнена до конца? После включения плагина.

Судя по тому, что в тэгах у пользователя значится monitoring и доступ имеет к /, по идее выполнена до конца.

Сейчас нет возможности проверять чего там приходит. Какая версия рэббита?

3.8.28

Можно попробовать заменить регулярку на (.*) и посмотреть, что будет.

Попробую

В джейсоне нужное есть? Если есть, то создавать нужный item prototype используя jsonpath в препроцессинге (пример) и макросы LLD для задания ключей (это которые с #, вида {#MACRO}, искать в нужной LLD) Но сначала все же добить авторизацию.

В принципе есть там все очереди нужные, ready messages и прочее.

sivsoft
() автор топика
Ответ на: комментарий от sivsoft

Вроде писал, но пропало (емпти стринг на форуме превратилось в пустоту )) )

В общем выдает

пустую строку (емпти стринг)

т.е. ничего не выдает, хотя и ошибки нет )

sivsoft
() автор топика
Ответ на: комментарий от sivsoft

В общем решил этот вопрос, используя RabbitMQ node by HTTP и прописан правильно макросы и самое главное - название хоста. В общем там «интересная» особенность у этих шаблонов. Они задают коннект, используя HOST.NAME. Но что это такое? Это не макрос и нигде не видно, как его задать. Короче, это Visible name хоста, которое берется из Заббикса. Раскладывается имя кластера: cluster@node. {$RABBITMQ.CLUSTER.NAME} задаем как cluster, по аналогии, а node в данном случае нужно обозвать хост в Visible name. После этого начинает работать метрика RabbitMQ: Get nodes, дальше все подтягивается через итем прототипс.

sivsoft
() автор топика
1 декабря 2023 г.
Ответ на: комментарий от sivsoft

Вообще использование переменной HOST.NAME (значение которой извлекается из поля Visible name) оказалось крайне сомнительным решением разработика шаблона. Пришлось его править, так как Visible name может и должно устанавливаться произвольным, таким каким пользователям мониторинга удобнее воспринимать информацию о хостах, а не в жесткой привязке к имени хоста внутри одного контейнера с кроликом..

anonymous
()