gentoo linux
k s i m u t e
з а м е т к и   о   с и с т е м н о м   а д м и н и с т р и р о в а н и и    
версия v1.3.0
main menu main
Rambler's Top100
  »  WIKI
  »  Заметки (микро-блог)
  »  Smart HDD мониторинг
  »  Linux Software Raid
  »  Windows + Xserver
  »  Pptpd kill
  »  Stress Test pptpd
  »  Консоль на com порту
  »  Cisco 827 h323
  »  Squid + sarg Логи
  »  Squid и 2 канала
  »  arpd
  »  OpenVpn
  »  Perl HTML Parsing
  »  Мониторинг очереди Postfix
  »  Main


Rambler's Top100

Мониторинг очереди Postfix с помощью snmp + nagios Postfix
Коробанов Сергей
Октябрь 1, 2008 Задача:

Случилась несколько месяцев назад у нас проблема с почтовым сервером. Абоненты заразились очередным спам вирусом под M$.
И как результат - огромное кол-во писем в очереди. Доставка почты почти встала время доставки 3-4 часа.
почтовик связка postfix + amavisd + clamav + dovecot + postgresql.
Определил источники спама, зафаерволил, написал скрипт удаляющий спам сообщения. Но осадок остался.
День неработающей почтовой слубы это не шутка.
Надо сделать мониторинг кол-ва сообщений в очереди, чтобы вовремя принимать меры.
nagios внедрен много лет назад, он нам и поможет :).

Кол-во сообщений будем узнавать с помощью скрипта на bash, передавать используя snmp.

SNMP (Simple Network Management Protocol) - является протоколом прикладного уровня, предназначенным для облегчения обмена информацией управления между сетевыми устройствами.
Пользуясь информацией SNMP (такой, как показатель числа пакетов в секунду и коэффициент сетевых ошибок), сетевые администраторы могут более просто управлять производительностью сети и обнаруживать и решать сетевые проблемы.

Дальше читаем что такое snmp и как его использовать. Документации море. Google и opennet поможет! (кто в первый раз слышит про SNMP - внедряйте сразу и MRTG или RRDtool - мощьные инструменты)

Создаем скрипт:
cat count.sh #
#!/bin/bash

POSTSP="/var/spool/postfix"
find $POSTSP/active $POSTSP/incoming $POSTSP/deferred -type f | wc -l
В /etc/snmpd/snmpd.conf добавляем следующую строку:
exec postspool  /POSTMON/count.sh
Стартуем snmpd, проверяем
snmpwalk -v 1 -c COMMUNITY localhost .1.3.6.1.4.1.2021

UCD-SNMP-MIB::extIndex.1 = INTEGER: 1
UCD-SNMP-MIB::extNames.1 = STRING: postspool
UCD-SNMP-MIB::extCommand.1 = STRING: /POSTMON/count.sh
UCD-SNMP-MIB::extResult.1 = INTEGER: 0
UCD-SNMP-MIB::extOutput.1 = STRING: 20
UCD-SNMP-MIB::extErrFix.1 = INTEGER: noError(0)
UCD-SNMP-MIB::extErrFixCmd.1 = STRING:

Нас интересует:
UCD-SNMP-MIB::extOutput.1 = STRING: 20 
Это и есть кол-во сообщений в очереди postfix
всего 20, т.к. сервер в данном случае тестовый.
snmpwalk -v 1 -c COMMUNITY localhost .1.3.6.1.4.1.2021.extTable.1.extOutput.1
UCD-SNMP-MIB::extOutput.1 = STRING: 20
Красота!
Конфигурируем nagios:
Сначала сделаем комманду проверки назовем ее check_mailq checkcommands.cfg
define command{
            command_name        check_mailq
            command_line        $USER1$/check_snmp -H $HOSTADDRESS$ -C COMMUNITY 
	    -o .1.3.6.1.4.1.2021.extTable.1.extOutput.1 -w 500  -c 1000
                }
Warning при 500 сообщениях Critical при 1000 Создаем сервис:
services.cfg
#mailq
define service{
        use                             servers-service         ; Name of service template to use
        hostgroup_name                  postq
        service_description             Mailq at postfix service
        check_command                   check_mailq
        }

Добавляем шаблон хоста и хост hosts.cfg Сначала шаблон (т.к. почтовиков у нас много шаблон нужен.
Если один почтовик параметры проверки можно прописать в описании хоста)
define host{
        name                            postmailq               
        notifications_enabled           1               ; Host notifications are enabled
        event_handler_enabled           1               ; Host event handler is enabled
        flap_detection_enabled          1               ; Flap detection is enabled
        process_perf_data               1               ; Process performance data
        retain_status_information       1               ; Retain status information across program restarts
        retain_nonstatus_information    1               ; Retain non-status information across program restarts

        check_command                                   check_mailq
        max_check_attempts      1
        notification_interval   0
        notification_period     24x7
        notification_options    d,r
        register                        0               
        }
Описание хоста:
		
define host{
            use                 postmailq               ; Name of host template to use
            host_name           mail.postq
            alias               trancom.ru post service Postfix mailq monitoring
            address             1.2.3.4
            parents             mail ; mail - родитель проверка доступности сервера ping (другой define)
            contact_groups admin
            }
Создаем группу хостов и добавляем в нее наш почтовик.
hostgroups.cfg
define hostgroup{
        hostgroup_name  postq
        alias           Postfix mail q
        members         mail.postq
        }
Релоадим nagios и получаем мониторинг очереди с алармингом!

Спасибо Chumka с linux.org.ru, подсказал куда копать :) Ато я уже собирался писать демона на perl Perl:Net:Server, который при обращении на порт выдает кол-во сообщений в очереди.
и написать модуль к nagios, используя Perl:Net:telnet который коннектится к почтовику, считывает кол-во писем в очереди и алармит.
Такое решение тоже имеет право на жизнь, но через snmp гораздо красивее, проще и безглючнее.

Ссылки

http://ru.wikipedia.org/wiki/SNMP http://www.nagios.org/
красивая земля
назад
на главную
наверх
наверх
далее
другие статьи
на главную | contact | © « 2006, Korobanov Sergey»