Zabbix + Communigate Pro: мониторим очередь сообщений на выбранные домены и хосты

в 13:15, , рубрики: communigate pro, perl, zabbix, системное администрирование, метки: , ,

Предисловие

В нашей организации в качестве почтового сервера используется замечательный (мое мнение, может быть, ошибочное) продукт — Communigate Pro (CGP). В прежние времена мониторинг работы серверов осуществлялся штатными средствами Communigate + logwatch для мониторинга операционной системы. Сейчас к этим средствам добавился Zabbix. Все основные аспекты операционной системы мы отслеживаем при помощи Zabbix-агента, а статистику с CGP — при помощи SNMP-запросов. Эти способы охватывают практически все необходимые параметры системы. Но есть некоторые характеристики, которые просто так отслеживать не получится. В частности, для нас очень важны такие характеристики, как количество сообщений в очереди в конкретный домен и/или на определенный хост. В интерфейсе администратора CGP есть возможность эти очереди отслеживать, но хотелось бы, чтобы всю информацию можно было мониторить в одном месте. Итак, как же это сделано у нас.

Утилита для просмотра состояния очереди

У CGP есть хорошо документированный API + библиотеки для работы с этим API на Perl и Java. И среди всего богатства функционала есть функция, которая позволяет проверить количество сообщений в очереди какого-либо модуля Communigate на некоторый хост или домен.

GETMESSAGEQUEUEINFO moduleName QUEUE queueName

Функция получает на вход два аргумента — имя модуля и имя очереди.

  • Имя модуля. Модулей в CGP несколько, но нас конкретно интересует модуль SMTP.
  • Имя очереди. Соответствует имени домена или хоста.

В ответ функция возвращает информацию об очереди, которая включает в себя:

  • общее число сообщений в этой очереди;
  • общий размер сообщений;
  • время, до которого отложена повторная отправка сообщений;
  • краткая информация о последней ошибке в этой очереди (если она имела место);
  • состояние очереди (ожидание, доставка и т.д.).

Для дружелюбного использования этой функции пришлось написать небольшую утилиту. Написана она на Perl. Хотелось на на любимом Python'e, но официальной питоновской библиотеки для CGP нет, а моя собственная еще дорабатывается. Для работы утилиты понадобится перловый модуль CLI.pm, который можно найти в документации к API CGP. Основные возможности утилиты представлены в хелпе к ней.

check_queue [-h hostname] [-p port] -u username -w password [-m module] -q queue [-t | -s [-f]]
check_queue -h|--help

	-h hostname - address of DNS name of the server (Default: localhost)
	-p port - port for connection (Default: 106)
	-u username - account on CGatePro with grant 'Can View Queued Messages'
	-w password - user password
	-q queue - queue name to check
	-m module - name of CGP module (Default: SMTP)
	-t - if use this option then program return just total number of messages in queue
	-s - if use this options then program return just total size of messages in bytes
	-f - this option is used just with -s option, if it's set then size will be more readable.
	--help - print this help
	--debug - show debug lines

Примеры ее использования:

# полная информация о очереди
torwald@torwald-station:~$ ./check_cgp_queue.pl -h myserver.domain.org -u monitor -w password -q another.domain.org
Total:		41
Size:		65374728
Delay:		05-05-2014 06:04:28
State:		waiting

# количество сообщений в очереди
torwald@torwald-station:~$ ./check_cgp_queue.pl -h myserver.domain.org -u monitor -w password -q another.domain.org -t
41

Подключаем мониторинг

Предварительная подготовка

Я опишу подготовку для CentOS5 и CentOS6.

Вся подготовка сводится к следующему:

  1. Размещаем утилиту в /usr/local/bin (можно «отрезать» расширение) и даем права пользователю zabbix-агента (по умолчанию — zabbix) на запуск этой утилиты.
  2. Размещаем модуль CLI.pm там, где его будет «видно» интерпретатору Perl, запускаемому от имени zabbix. У меня это /usr/local/lib/perl5.
  3. В админском интерфейсе CGP cоздаем пользователя (например, cgpmon) с правами «Can Monitor» -> «Can View Queued Messages».
  4. Проверяем подключение из-под пользователя zabbix.
Настройка агента мониторинга

1. Добавляем в конфигурационный файл агента следующие настройки.

# /etc/zabbix_agentd.conf
# проверка числа сообщений в очереди
UserParameter=cgp.queue.total[*],/usr/local/bin/check_cgp_queue -u cgpmon -w password -q $1 -t
# проверка размера очереди
UserParameter=cgp.queue.size[*],/usr/local/bin/check_cgp_queue -u cgpmon -w password -q $1 -s

Подробнее про синтаксис работы с этим параметром и «звездочку», в частности, можно прочитать в документации.

Вкратце, данная запись означает, что при запросе системы мониторинга по ключу cgp.queue.total[other.domain.org] агент системы мониторинга выполнит команду:

/usr/local/bin/check_cgp_queue -u cgpmon -w password -q other.domain.org -t

Или, иными словами, получит количество сообщений на указанный в квадратных скобках домен.
2. Перезапускаем агента.

Настройка сервера мониторинга

Допустим, нас интересует состояния очередей на три домена:

  • foo.example.org
  • bar.example.org
  • tor.example.org

1. Создаем на сервере мониторинга отдельный шаблон (например, Template CGP Queues).
2. Добавляем туда элементы данных со следующими ключами:

# количество сообщений в очередях
cgp.queue.total[foo.example.org]
cgp.queue.total[bar.example.org]
cgp.queue.total[tor.example.org]
# размер сообщений
cgp.queue.size[foo.example.org]
cgp.queue.size[bar.example.org]
cgp.queue.size[tor.example.org]

3. Накатываем шаблоны на сервера.
4. Отключаем ненужные очереди. Например, нет смысла мониторить очередь SMTP на домен расположенный на этом же сервере, т.к. она всегда пустая.
5. Выставляем триггеры.
6. Включаем наблюдение.

Источники

Документация к Communigate Pro CLI и API
Перловый интерфейс к CGP
Подробней о UserParameter в Zabbix
Исходный код для утилиты check_cgp_queue

Автор: TorwaldSergesson

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js