Поиск по сайту:

Как написать собственный плагин для проверки Nagios


На этой странице

  1. Соображения
  2. Коды выхода
  3. Пример подключаемого модуля
  4. Установите новую команду проверки и сервис
  5. Используйте NRPE для запуска на клиентах
    1. Общая установка на клиенте на основе Debian
    2. Конфигурация для пользовательских сценариев

    Это руководство было протестировано с использованием Debian 9.2.

    Несмотря на то, что Nagios Exchange имеет тысячи доступных для бесплатной загрузки плагинов, иногда статус, который необходимо проверить, очень специфичен для вашего сценария.

    Соображения

    Предполагается, что:

    • У вас установлен и запущен Nagios (если нет, вы можете следовать этому руководству).
    • Вы знакомы с основами администрирования Nagios.

    Сервер Nagios в этом примере размещен на 192.168.0.150, а пример клиента размещен на IP 192.168.0.200.

    Коды выхода

    Чтобы определить статус отслеживаемой службы, Nagios запускает для нее подключаемый модуль проверки. Nagios может определить статус службы, прочитав код завершения проверки.

    Nagios понимает следующие коды выхода:

    • 0 — сервис в порядке.
    • 1 – Служба содержит ПРЕДУПРЕЖДЕНИЕ.
    • 2 — Служба находится в критическом состоянии.
    • 3 – Статус службы НЕИЗВЕСТЕН.

    Программа может быть написана на любом языке для работы в качестве плагина проверки Nagios. На основе проверенного условия плагин может сообщить Nagios о неисправной службе.

    Пример плагина

    Я буду использовать простой пример. Я написал плагин в сценарии bash для проверки текущих предупреждений. Давайте рассмотрим, что у меня есть сервер Nagios, настроенный на оповещение только о критическом статусе, поэтому я хочу оповещение, если у меня слишком много служб со статусом предупреждения.

    Рассмотрим следующий скрипт (check_warnings.sh):

    #!/bin/bash
    
    countWarnings=$(/usr/local/nagios/bin/nagiostats | grep "Ok/Warn/Unk/Crit:" | sed 's/[[:space:]]//g' | cut -d"/" -f5)
    
    if (($countWarnings<=5)); then
                    echo "OK - $countWarnings services in Warning state"
                    exit 0
            elif ((6<=$countWarnings && $countWarnings<=30)); then
    				# This case makes no sense because it only adds one warning.
    				# It is just to make an example on all possible exits.
                    echo "WARNING - $countWarnings services in Warning state"
                    exit 1
            elif ((30<=$countWarnings)); then
                    echo "CRITICAL - $countWarnings services in Warning state"
                    exit 2
            else
                    echo "UNKNOWN - $countWarnings"
                    exit 3
    fi

    Основываясь на информации, предоставленной инструментом nagiostats, я предполагаю, что все в порядке, если пять или менее служб находятся в состоянии предупреждения.

    Я оставлю этот скрипт со всеми другими плагинами Nagios внутри /usr/local/nagios/libexec/ (этот каталог может отличаться в зависимости от вашей конфигурации).

    Как и любой плагин Nagios, вы захотите проверить его из командной строки, прежде чем добавлять его в файлы конфигурации.

    Не забудьте разрешить выполнение скрипта:

    sudo chmod +x /usr/local/nagios/libexec/check_warnings.sh

    А затем запустите его как любой другой скрипт:

    Результатом является текстовое сообщение и код выхода:

    Установите новую команду проверки и службу

    Этот шаг будет таким же для ваших собственных плагинов, а также если вы загрузите сторонний плагин из Интернета.

    Сначала вы должны определить команду в файле commands.cfg. Расположение этого файла зависит от выполненной вами конфигурации, в моем случае это /usr/local/nagios/etc/objects/commands.cfg.

    Поэтому я добавлю в конец файла следующий блок:

    # Custom plugins commands...
    define command{
    	command_name check_warnings
    	command_line $USER1$/check_warnings.sh
    }

    Помните, что переменная $USER1$— это локальная переменная Nagios, установленная в файле resource.cfg, в моем случае указывающая на /usr/local/nagios/libexec.

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

    Отредактируйте файл /usr/local/nagios/etc/objects/localhost.cfg и добавьте следующий блок:

    # Example - Check current warnings...
    define service{
    	use local-service
    	host_name localhost
    	service_description Nagios Server Warnings
    	check_command check_warnings
    }

    Теперь все готово, осталось только перезагрузить Nagios, чтобы снова прочитать файлы конфигурации.

    Всегда помните, перед перезагрузкой Nagios убедитесь, что в конфигурации нет ошибок. Вы делаете это с помощью команды nagios -v от имени пользователя root:

    sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

    Вы должны получить что-то вроде этого:

    Убедитесь, что он возвращает 0 ошибок и 0 предупреждений, и перейдите к перезагрузке службы:

    sudo systemctl reload-or-restart nagios.service

    После перезагрузки службы вы увидите соответствующую проверку в файле localhost. Сначала в ожидании:

    И после выполнения с его результатом:

    Используйте NRPE для запуска на клиентах

    Чтобы запустить скрипт на удаленном клиенте, вам нужно настроить Nagios Remote Plugin Executor (NRPE)

    Поскольку это руководство основано на Debian 9, я покажу в качестве примера, как его установить, но вы можете найти инструкции для любого дистрибутива.

    Общая установка на клиенте на базе Debian

    Обратите внимание, что все настройки в этом разделе выполняются на проверяемом клиенте, а не на сервере nagios.

    Установите плагины NRPE и Nagios:

    sudo apt-get install libcurl4-openssl-dev nagios-plugins nagios-nrpe-server nagios-nrpe-plugin --no-install-recommends
    sudo ln -s /usr/lib/nagios/plugins/check_nrpe /usr/bin/check_nrpe

    Разрешите серверу Nagios выполнять команды на клиенте, добавив его в запись allow_hosts в файле /etc/nagios/nrpe.cfg. Строка должна выглядеть так:

    allowed_hosts=127.0.0.1,::1,192.168.0.150

    Определите стандартные проверки, которые вы будете выполнять на каждом клиенте с NRPE. Определите проверки в /etc/nagios/nrpe_local.cfg. Например, модель для файла может быть:

    ######################################
    # Do any local nrpe configuration here
    ######################################
    #-----------------------------------------------------------------------------------
    # Users
       command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10
    
    # Load
       command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
       command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z
       command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200
    
    # Disk
       command[check_root]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /
       command[check_boot]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /boot
       command[check_usr]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /usr
       command[check_var]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /var
       command[check_tmp]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /tmp
       # If you want to add a non-standard mount point:
       # command[check_mnt1]=/usr/lib/nagios/plugins/check_disk -w 4% -c 1% -p /export
    #-----------------------------------------------------------------------------------

    Идея наличия этого универсального файла заключается в том, чтобы вы могли проверить его на каждом клиенте.

    Убедитесь, что локальный файл и каталог .d включены в основной файл конфигурации с помощью:

    cat /etc/nagios/nrpe.cfg | grep include | grep -v ^#

    Перезапустите службу:

    sudo systemctl restart nagios-nrpe-server.service

    Убедитесь, что служба NRPE запущена:

    cat /etc/services | grep nrpe
    netstat -at | grep nrpe

    Теперь проверьте одну из ранее определенных команд NRPE с сервера Nagios:

    Обратите внимание, что команда NRPE check_users была определена в файле /etc/nagios/nrpe_local.cfg для запуска /usr/lib/nagios/plugins/check_users -w 5 -c 10.

    Если у вас нет плагина на сервере Nagios, вы можете установить его с помощью:

    sudo apt-get install nagios-nrpe-plugin

    Итак, резюмируя, NRPE запустит скрипт на удаленном хосте и вернет код выхода на сервер Nagios.

    Конфигурация для пользовательских сценариев

    Чтобы использовать пользовательский скрипт в качестве плагина для удаленного запуска через NRPE, вы должны сначала написать скрипт на сервере, например, в /usr/local/scripts/check_root_home_du.sh:

    #!/bin/bash
    
    homeUsage=$(du -s /root/ | cut -f1)
    
    if (($homeUsage<=$((1024*1024)))); then
                    echo "OK - Root home usage is $(du -sh /root/ | cut -f1)"
                    exit 0
            elif (($((1024*1024))<$homeUsage && $homeUsage<=$((3*1024*1024)))); then
                    echo "WARNING - Root home usage is $(du -sh /root/ | cut -f1)"
                    exit 1
            elif (($((3*1024*1024))<$homeUsage)); then
                    echo "CRITICAL - Root home usage is $(du -sh /root/ | cut -f1)"
                    exit 2
            else
                    echo "UNKNOWN - Value received: $homeUsage"
                    exit 3
    fi

    Разрешить выполнение скрипта:

    sudo chmod +x /usr/local/scripts/check_root_home_du.sh

    Предыдущий скрипт представляет собой очень простой пример, проверяющий использование диска в каталоге /root и устанавливающий порог для того, чтобы считать его нормальным, предупредительным или критическим.

    Добавьте команду в файл конфигурации NRPE на клиенте (/etc/nagios/nrpe_local.cfg):

    # Custom
       command[check_root_home_du]=/usr/local/scripts/check_root_home_du.sh

    И перезапустите прослушиватель NRPE:

    sudo systemctl restart nagios-nrpe-server.service

    Теперь мы можем получить доступ к серверу и протестировать его, как любой стандартный плагин.

    Установите проверку NRPE в файлах конфигурации сервера

    Теперь мы знаем, что пользовательский плагин работает на клиенте и на сервере, и что NRPE взаимодействует правильно, мы можем приступить к настройке файлов Nagios для проверки удаленного устройства. Итак, на сервере устанавливаем файлы:

    /usr/local/nagios/etc/objects/commands.cfg:

    #...
    define command{
    	command_name check_nrpe
    	command_line /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
    }

    /usr/local/nagios/etc/objects/nrpeclient.cfg:

    define host{
        use          linux-server
        host_name    nrpeclient
        alias        nrpeclient
        address      192.168.0.200
    }
    
    define service{
    	use                 local-service
    	host_name           nrpeclient
    	service_description Root Home Usage
    	check_command       check_nrpe!check_root_home_du
    }
    

    Обратите внимание, что ! mark отделяет команду от аргументов в записи check_command. Это определяет, что check_nrpe — это команда, а check_root_home_du — это значение $ARG1$.

    Также, в зависимости от вашей конфигурации, вы должны добавить этот последний файл в основной файл (/usr/local/nagios/etc/nagios.cfg):

    #...
    cfg_file=/usr/local/nagios/etc/objects/nrpeclient.cfg
    #...

    Проверьте конфигурацию и, если ошибок и предупреждений нет, перезагрузите сервис:

    /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
    sudo systemctl reload-or-restart nagios.service

    И теперь у вас есть новая пользовательская проверка на хосте:

    Заключение

    У Nagios есть огромная библиотека плагинов, доступных на Nagios Exchange. Однако в большой среде, скорее всего, потребуются некоторые специальные проверки для конкретных целей, например: проверка определенного результата задачи, мониторинг собственного разработанного приложения и т. д.

    Гибкость, обеспечиваемая Nagios, идеально подходит для таких сценариев.