Home > AlertMon

AlertMon

AlertMon is a project mainly written in PERL and SHELL, based on the GPL-2.0 license.

Система мониторинга и "горячего" реагирования на внештатные ситуации

 Система слежения за работоспособностью различных компонентов системы 
   (мониторинга) и "горячего" реагирования на внештатные ситуации.
        http://www.opennet.ru/dev/alertmon/

По всем вопросам следует обращаться к автору: Maxim Chirkov [email protected]


Комплект поставки:

Для обслуживаемых серверов:

topmon.pl       - основной скрипт мониторинга, запускается периодически 
          через cron.

topmon.conf     - пример файла конфигурации с детальным описанием 
          поддерживаемых настроек и параметров конфигурации.
          Доп. примеры см. в директории examples.

snmp_export.pl  - скрипт для вызова из snmpd, для экспорта информации
          о текущих алертах на центральный сервер мониторинга 
          на работает web-интерфес контроля за состоянием
          обслуживаемых серверов и построения графиков.

plugins/        - модули расширения, см. README.plugins.

add-ons/        - разные полезные мелочи, скрипт для преобразования
          файлов конфигурации от alertmon2, чистки директорий с 
          логами и т.д.
install.pl      - скрипт для установки (можно просто все скопировать 
          в /usr/local/alertmon).

Для сервера мониторинга (web-интерфейс и сводная инфорация по всем системам):

Cодержимое директории servermon/ snmp_lookup.pl - скрипт для размещения на центральном сервере мониторинга, для опроса всех машин на которых выполняется snmp_export.pl и синхронизации данных о текущих алертах в локальном хранилище. Запускается через cron.

servermon.conf  - конфигурационный файл в котором представлен список
          машин в сети мониторинга и некоторые параметры по
          умолчанию.

create_graph.pl - скипт для прорисовки графиков из командной строки
          (устарел, заменен на create_one.cgi)

Cодержимое директории servermon/cgi-bin

show_alerts.cgi - Индексный CGI-скрипт с основным интерфесом мониторнига;

create_one.cgi  - CGI-скрипт для рисования одного графика;

show_graph.cgi  - CGI-скрипт для вывода групп графиков;

templates/      - директория с темплейтами, определяющими внешний вид
          системы мониторинга.

Назначение:

При администрировании группы разнесенных по сети UNIX серверов возникает 
потребность в небольшой программе мониторинга, от которой требуется
определять внештатные ситуации, сообщать о них администратору, вести лог
возникающих проблем и автоматически пытаться восстановить нормальный 
режим работы. Так же желательно на каждом из этих серверов осуществлять 
функции слежения за работой "соседей", при нарушении функционирования 
которых начинать бить тревогу, на случай если "сосед" окажется не в 
состоянии самостоятельно дать знать о себе. Таким образом строится
распределенная система мониторинга, отличающаяся от централизованной
большей оперативностью, точностью и надежностью.
Именно для выполнения этих задач и была написана данная программа. 

Выполняемые функции:

- Выявление аномалий работы системы через графики с динамикой изменения
  различных зарактеристик системы (графики как общие/суммарные, так и 
  детальные/частные).
- Расследования причин сбоев в работе программного обеспечения (например, 
  перегрузка из-за флуда) путем анализа детальных дампов состояния системы.
- Посылка уведомления об обнаруженных проблемах на email (пейджер) или 
  слежение посредством web-интерфейса.
- Контроль работоспособности процессов в системе, с возможностью перезапуска
  упавшего процесса.
- Контроль превышения максимально допустимого числа процессов.
- Контроль наличия свободного дискового пространства.
- Контроль работы DNS серверов.
- Контроль достижимости хостов (tcp, udp, icmp).
- Проверка работоспособности сетевых сервисов (pop3, smtp, http, ftp и т.д.).
- Вызов внешних скриптов проверки (например, контролируется Load Average,
  целостность рутинга, работоспособность gated, активность интерфейсов,
  число сетевых соединений и т.д.).
- Несколько установленных на разных машинах alertmon'ов образуют
  распределенную систему мониторинга с возможностью централизованного
  наблюдения за состоянием каждой машины.

Установка:

Для установки скопируйте alertmon.pl в любое место по Вашему усмотрению 
(рекомендую /etc), отредактируйте параметры конфигурации в скрипте
Для работы alertmon.pl необходимо установить модули Net::DNS и Net::Ping, 
если они отсутствуют.

Обеспечьте периодическое выполнение скрипта посредством программы cron:
# crontab -e
*/5 * * * * /etc/alertmon.pl

Если необходимо задействовать не только функции мониторинга, но 
восстановления нормального функционирования (например, перезапустить gated 
при его "зависании"), то скрипт должен выполняться с правами root 
пользователя (uid 0).

Для осуществления слежения за состоянием контролируемого объекта - 
следует установить cgi скрипт alertview.cgi в cgi-bin директорию вашего 
web сервера, предварительно отредактировав параметры конфигурации внутри 
этого файла и ограничить доступ к этому скрипту посредством настроек 
.htaccess:
AuthType Basic
AuthName Monitoring
AuthUserFile <путь к файлу с паролем, создается с помощью программы htpasswd>
require valid-user
Например:
cd /usr/local/apache/cgi-bin
mkdir alert
cd alert
cp ~/src/alert/alertview.cgi /usr/local/apache/cgi-bin/alert/alertview.cgi
vi alertview.cgi
cat > .htaccess
        AuthType Basic
    AuthName Monitoring
    AuthUserFile /usr/local/apache/.passwd
    require valid-user
^D
/usr/local/apache/bin/htpasswd -c /usr/local/apache/.passwd username

Для централизованного наблюдения за несколькими хостами с установленным
alertmon (сетью мониторов) необходимо скопировать с cgi-bin директорию
скрипт alertsum.cgi, предварительно описав хосты где установлен монитор
внутри этого скрипта.

Интеграция с NetSaint:

Изменяем параметры настройки (описываем все хосты на которых запущен alertmon)
в файле for_netsaint/check_alert.sh.
Копируем for_netsaint/check_alert.sh в libexec (где лежат plugin'ы) 
директорию NetSaint'а.
В файле конфигурации NetSaint commands.cfg добавляем строку вида:
command[check_alert]=/usr/local/netsaint/libexec/check_alert.sh $ARG1$

В файле hosts.cfg, для каждого хоста на котором функционирует alertmon
прописываем:
service[some-host]=Alert mon;0;24x7;5;10;1;admins;120;24x7;0;1;0;;check_alert!# service[hook-host]=Alert mon;0;24x7;5;10;1;admins;120;24x7;0;1;0;;check_alert!name

где "name" - имя хоста описанное внутри for_netsaint/check_alert.sh.