- PVSM.RU - https://www.pvsm.ru -
В нашей организации в качестве почтового сервера используется замечательный (мое мнение, может быть, ошибочное) продукт — Communigate Pro [1] (CGP). В прежние времена мониторинг работы серверов осуществлялся штатными средствами Communigate + logwatch для мониторинга операционной системы. Сейчас к этим средствам добавился Zabbix [2]. Все основные аспекты операционной системы мы отслеживаем при помощи Zabbix-агента, а статистику с CGP — при помощи SNMP-запросов. Эти способы охватывают практически все необходимые параметры системы. Но есть некоторые характеристики, которые просто так отслеживать не получится. В частности, для нас очень важны такие характеристики, как количество сообщений в очереди в конкретный домен и/или на определенный хост. В интерфейсе администратора CGP есть возможность эти очереди отслеживать, но хотелось бы, чтобы всю информацию можно было мониторить в одном месте. Итак, как же это сделано у нас.
У CGP есть хорошо документированный API [3] + библиотеки для работы с этим API на Perl и Java. И среди всего богатства функционала есть функция, которая позволяет проверить количество сообщений в очереди какого-либо модуля Communigate на некоторый хост или домен.
GETMESSAGEQUEUEINFO moduleName QUEUE queueName
Функция получает на вход два аргумента — имя модуля и имя очереди.
В ответ функция возвращает информацию об очереди, которая включает в себя:
Для дружелюбного использования этой функции пришлось написать небольшую утилиту [4]. Написана она на Perl. Хотелось на на любимом Python'e, но официальной питоновской библиотеки для CGP нет, а моя собственная еще дорабатывается. Для работы утилиты понадобится перловый модуль CLI.pm [5], который можно найти в документации к API CGP [6]. Основные возможности утилиты представлены в хелпе к ней.
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. Добавляем в конфигурационный файл агента следующие настройки.
# /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
Подробнее про синтаксис работы с этим параметром и «звездочку», в частности, можно прочитать в документации [7].
Вкратце, данная запись означает, что при запросе системы мониторинга по ключу cgp.queue.total[other.domain.org] агент системы мониторинга выполнит команду:
/usr/local/bin/check_cgp_queue -u cgpmon -w password -q other.domain.org -t
Или, иными словами, получит количество сообщений на указанный в квадратных скобках домен.
2. Перезапускаем агента.
Допустим, нас интересует состояния очередей на три домена:
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 [3]
Перловый интерфейс к CGP [6]
Подробней о UserParameter в Zabbix [7]
Исходный код для утилиты check_cgp_queue [4]
Автор: TorwaldSergesson
Источник [8]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/perl/59568
Ссылки в тексте:
[1] Communigate Pro: http://www.communigate.com/
[2] Zabbix: http://www.zabbix.com/
[3] API: http://www.communigate.com/CommuniGatePro/CLI.html
[4] утилиту: https://bitbucket.org/torwald/check_cgp_queue
[5] CLI.pm: http://www.communigate.com/CGPerl/CLI.pm
[6] API CGP: http://www.communigate.com/CGPerl/
[7] документации: https://www.zabbix.com/documentation/2.2/manual/config/items/userparameters
[8] Источник: http://habrahabr.ru/post/221795/
Нажмите здесь для печати.