Nagios: различия между версиями

Материал из Linux Wiki
Перейти к навигацииПерейти к поиску
 
(не показано 12 промежуточных версий этого же участника)
Строка 1: Строка 1:
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/ создадим конфиг-файл с удобным для себя названием, позволяющим быстро определить, к какому хосту он относится. В файле описания хоста ожидается как минимум одна основная секция:
<pre>
define host{
        use                    generic-host
        host_name              FTP
        alias                  ftp.linuxoid.in
        display_name            FTP Server
        address                ftp.linuxoid.in
        }
</pre>
где:
* '''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 для отправки уведомлений, переопределяются настройки периодов уведомлений и т.п., в том числе задается команда для выполнения при отправке уведомления о сервисах и хостах (о ней ниже).
Далее в конфиге хоста описываются проверяемые сервисы, например:
<pre>
define service{
        use                    generic-service
        host_name              FTP
        service_description    Disk Usage
        check_command          ssh_all_disk!75!90
}
</pre>
где:
* '''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''':
<pre>
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"
        }
</pre>
Описание крайне простое:
* '''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''' - здесь можно сгруппировать несколько хостов в одну группу, например:
<pre>
define servicegroup {
      servicegroup_name                Hosting
      members                          FTP,FTP,Mail,Mail,MySQL,MySQL,Web Server,HTTP
}
</pre>
где:
* '''servicegroup_name''' - название группы, которое будет отображаться в веб-интерфейсе
* '''members''' - пары "имя,сервис", где "имя" - название хоста, включенного в группу, "сервис" - сервис для проверки работоспособности хоста
== Приложение 1 ==
Скрипт для мониторинга используемой памяти на Linux-системах. Это немного переделанный вариант [http://bezha.od.ua/nagios-memory-nrpe/ этого скрипта], позволяющий не использовать (не устанавливать) bc.
Скрипт необходимо сохранить в '''/usr/lib/nagios/plugins/check_memory.sh'''. Кроме этого, нужно сделать описание команды, например, в '''/etc/nagios3/custom_plugins/memory.cfg''':
<pre>
# '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$'"
    }
</pre>
После этого можно ссылаться на команду в конфигах:
check_command          ssh_check_mem!60!85
Скрипт:
----
<source lang=bash>
#!/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
</source>


==Ссылки==
==Ссылки==


* Полезно при изучении:
** http://linuxshare.ru/docs/net/nagios/nagios_osvaiv.html
** http://ubuntologia.ru/nagios
** http://openwiki.ru/wiki/Nagios
** http://xgu.ru/wiki/Nagios
* [http://www.daemony.ru/?p=673 Мониторинг параметров через ssh]
* [http://www.daemony.ru/?p=673 Мониторинг параметров через ssh]
* [http://bezha.od.ua/nagios-memory-nrpe/ Скрипт для мониторинга памяти] (bc можно убрать)
* [http://bezha.od.ua/nagios-memory-nrpe/ Скрипт для мониторинга памяти] (оригинал)
* [http://nagios.sourceforge.net/docs/3_0/toc.html Официальная документация]


[[Category:Мониторинг]]
[[Category:Мониторинг]]

Текущая версия на 12:58, 29 июня 2012

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

Ссылки