Nagios

Материал из Linux Wiki
Перейти к навигацииПерейти к поиску

Nagios - мощная система мониторинга и уведомлений о состоянии серверов и сетей.

Рассмотрим установку, конфигурирование и принципы работы на базе системы, работающей под Debian GNU/Linux.

Установка

Для запуска Nagios на нашем сервере понадобится установить следующие пакеты:

  • nagios3 - подтянет остальные необходимые пакеты
  • nagios-images - логотипы систем и сервисов
  • nagios-plugins-basic - набор плагинов - мини-программ, выполняющихся для проверки того или иного параметра. Подтянется автоматически при установке пакета nagios3

Командуем:

apt-get install nagios3 nagios-images

и приступаем к настройке. В процессе установки будет задан вопрос о пароле администратора Nagios - пользователе nagiosadmin.

Помимо основных пакетов, будет установлен также php и веб-сервер (при желании можно переопределить устанавливаемый веб-сервер, указав его явно. По умолчанию ставится Apache)

После установки попасть в веб-интерфейс можно по адресу http://localhost/nagios3/. По умолчанию описана рабочая конфигурация только нескольких сервисов на локалхосте.

Настройка и принципы конфигурирования

Основной файл настроек - /etc/nagios3/nagios.cfg. В нем, помимо задания основных параметров, подключаются также и другие конфиги, раскиданные по подкаталогам. Для удобства работы будет полезно создать (и объявить в файле настроек) каталоги, где будут находиться конфиг-файлы наших хостов и собственных плагинов. Допишем где-нибудь в начале файла:

cfg_dir=/etc/nagios3/hosts
cfg_dir=/etc/nagios3/custom_plugins

и создадим указанные каталоги:

mkdir -pm 755 /etc/nagios3/hosts /etc/nagios3/custom_plugins

Nagios обрабатывает только конфиги с расширением .cfg (поэтому, например, можно не обращать внимания на файлы .cfg-sample в некоторых системах).

В Nagios есть несколько типов описаний, одни описания могут служить шаблонами для других. Рассмотрим описание какого-либо хоста.

В созданном подкаталоге hosts/ создадим конфиг-файл с удобным для себя названием, позволяющим быстро определить, к какому хосту он относится. В файле описания хоста ожидается как минимум одна основная секция:

define host{
        use                     generic-host
        host_name               FTP
        alias                   ftp.linuxoid.in
        display_name            FTP Server
        address                 ftp.linuxoid.in
        }

где:

  • use - отсылка на описание темплейта generic-host в /etc/nagios3/conf.d/generic-host_nagios2.cfg
  • host_name - имя хоста для использования далее по конфигу. Также используется для отображения в веб-интерфейсе.
  • alias - псевдоним хоста
  • display_name - имя для отображения в веб-интерфейсе (в будущем, на данный момент не работает). Иначе говоря, можно задать имя хоста = имени домена, а для отображения использовать понятное человеку слово
  • address - IP-адрес или домен, для которого будет делаться проверка

generic-host - темплейт, описанный в файле /etc/nagios3/conf.d/generic-host_nagios2.cfg. Там для него описываются основные параметры, вроде включения уведомлений и периодов проверки. В свою очередь, в описании идут отсылки еще к нескольким шаблонам:

  • check_command - команда для проверки доступности хоста.
  • notification_period - шаблон расписания, которое описывается в файле /etc/nagios3/conf.d/timeperiods_nagios2.cfg
  • contact_groups - адрес группы получателей уведомлений; описывается в /etc/nagios3/conf.d/contacts_nagios2.cfg, в свою очередь там есть 2 подраздела:
    • contactgroup - то, на что, собственно, и идет отсылка. В группе описываются участники, по умолчанию это root, для которого идет отсылка на:
    • contact - тут задается email для отправки уведомлений, переопределяются настройки периодов уведомлений и т.п., в том числе задается команда для выполнения при отправке уведомления о сервисах и хостах (о ней ниже).

Далее в конфиге хоста описываются проверяемые сервисы, например:

define service{
        use                     generic-service
        host_name               FTP
        service_description     Disk Usage
        check_command           ssh_all_disk!75!90
}

где:

  • use - отсылка на шаблон описания сервиса. generic-service по умолчанию описывается в файле /etc/nagios3/conf.d/generic-service_nagios2.cfg
  • host_name - то, для чего будет делаться проверка сервиса - отсылка на описанный выше хост
  • service_description - описание сервиса - то, как оно будет выглядеть в веб-интерфейсе
  • check_command - отсылка на команду для проверки параметра. Восклицательными знаками разделяются передаваемые команде аргументы.

generic-service и его описание в /etc/nagios3/conf.d/generic-service_nagios2.cfg переопределяет настройки уведомлений для конкретного сервиса. Т.е., например, один параметр (сервис) одного и того же хоста может мониториться только в рабочие дни с уведомлением группе людей, а другой - 24 часа в сутки с уведомлением админу.

check_command - отсылка на описание команды, заданной в одном из конфигурационных файлов каталога с плагинами - в Debian это /etc/nagios-plugins/config/, плюс, как условились выше, свои команды будем размещать в /etc/nagios3/custom_plugins

В Debian команды плагинов разделены по отдельным группам: disk, load, mail и так далее. Рассмотрим упомянутую выше команду ssh_all_disk. Команда не входит в базовую поставку пакета с плагинами, поэтому была описана дополнительно в файле /etc/nagios3/custom_plugins/disk.cfg:

define command{
        command_name    ssh_all_disk
        command_line    /usr/lib/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -C "/usr/lib/nagios/plugins/check_disk -w '$ARG1$' -c '$ARG2$' -e"
        }

Описание крайне простое:

  • command_name задает имя команды - то, на что будет идти отсылка в других конфигах
  • command_line - выполняемая команда, которая должна вернуть OK (код выхода 0), WARNING (код выхода 1) или CRITICAL (код выхода 2), плюс опционально - результат. В данном случае одна команда вложена в другую - при проверке выполняется /usr/lib/nagios/plugins/check_by_ssh, которая подключается по SSH на удаленный хост, указанный в переменной $HOSTADDRESS$ (где идет отсылка на address в описании конкретного хоста) с пользователем, под которым работает nagios (по умолчанию nagios). Подключение происходит по ключам, так что предварительно надо позаботиться о создании нужного пользователя на удаленном хосте (useradd -rml nagios), создания и обмена с ним ключами. Далее на удаленном хосте выполняется команда, переданная в кавычках - /usr/lib/nagios/plugins/check_disk -w '$ARG1$' -c '$ARG2$' -e - т.е., выполняется команда для проверки диска (не забываем поставить на удаленном хосте nagios-plugins-basic), для которой первым аргументом передается значение для предупреждения, вторым - критическое значение заполненности диска.

Помимо команд плагинов, Nagios также подключает файл /etc/nagios3/commands.cfg, в котором описываются команды, выполняемые при создании уведомлений.

Дополнительные параметры конфигурации

Помимо перечисленных выше основных параметров, можно задавать ряд дополнительных, предназначенных больше для удобства.

  • /etc/nagios3/conf.d/extinfo_nagios2.cfg описывает логотип, отображаемый возле хоста. В свою очередь там идет отсылка на описание debian-servers, которое находится в hostgroups_nagios2.cfg
  • /etc/nagios3/conf.d/hostgroups_nagios2.cfg. Тут описываются группы хостов. В members через запятую перечисляются хосты - так, как они указаны в host_name в конфиге хоста.
  • /etc/nagios3/conf.d/services_nagios2.cfg - файл, делающий проверки основного сервиса для хоста, включенного в определенную группу в предыдущем файле. Например, для всех хостов, указанных как ssh-servers в группах хостов автоматически включится проверка работоспособности SSH
  • /etc/nagios3/conf.d/service_groups.cfg - здесь можно сгруппировать несколько хостов в одну группу, например:
define servicegroup {
       servicegroup_name                Hosting
       members                          FTP,FTP,Mail,Mail,MySQL,MySQL,Web Server,HTTP
}

где:

  • servicegroup_name - название группы, которое будет отображаться в веб-интерфейсе
  • members - пары "имя,сервис", где "имя" - название хоста, включенного в группу, "сервис" - сервис для проверки работоспособности хоста

Приложение 1

Скрипт для мониторинга используемой памяти на Linux-системах. Это немного переделанный вариант этого скрипта, позволяющий не использовать (не устанавливать) bc.

Скрипт необходимо сохранить в /usr/lib/nagios/plugins/check_memory.sh. Кроме этого, нужно сделать описание команды, например, в /etc/nagios3/custom_plugins/memory.cfg:

# 'ssh_check_mem' command definition
define command{
    command_name    ssh_check_mem
    command_line    /usr/lib64/nagios/plugins/check_by_ssh -H '$HOSTADDRESS$' -C "/usr/lib64/nagios/plugins/check_memory.sh -w '$ARG1$' -c '$ARG2$'"
    }

После этого можно ссылаться на команду в конфигах:

check_command           ssh_check_mem!60!85

Скрипт:


#!/bin/bash
#
# Script to check memory usage on Linux. Ignores memory used by disk cache.
#
print_help() {
    echo "Usage:"
    echo "[-w] Warning level as a percentage"
    echo "[-c] Critical level as a percentage"
    exit 0
}

while test -n "$1"; do
    case "$1" in
        --help|-h)
            print_help
            exit 0
            ;;
        -w)
            warn_level=$2
            shift
            ;;
        -c)
            critical_level=$2
            shift
            ;;
        *)
            echo "Unknown Argument: $1"
            print_help
            exit 3
            ;;
    esac
    shift
done

if [ "$warn_level" == "" ]; then
    echo "No Warning Level Specified"
    print_help
    exit 3;
fi

if [ "$critical_level" == "" ]; then
    echo "No Critical Level Specified"
    print_help
    exit 3;
fi

free=`free -m | grep "buffers/cache" | awk '{print $4}'`
used=` free -m | grep "buffers/cache" | awk '{print $3}'`

total=$(($free+$used))

result=$(($used*100/$total))

if [ "$result" -lt "$warn_level" ]; then
    echo "Memory OK. $result% used."
    exit 0;
elif [ "$result" -ge "$warn_level" ] && [ "$result" -le "$critical_level" ]; then
    echo "Memory WARNING. $result% used."
    exit 1;
elif [ "$result" -gt "$critical_level" ]; then
    echo "Memory CRITICAL. $result% used."
    exit 2;
fi

Ссылки