Назад | Перейти на главную страницу

Плагин Nagios для создания снимка процесса при высокой нагрузке

Мы настроили Nagios с участием check_load через NRPE плагин для мониторинга загрузки сервера, он сообщает, когда нагрузка высока, но не имеет возможности сделать снимок основных процессов (например, top команда) в то время.

Есть ли nagios NRPE плагины для этого?

Вы можете сделать это с обработчики событий.

Сначала добавьте обработчик событий для определения средней нагрузки:

define service{
    use                     generic-service
    host_name               xx
    service_description     Load_Average
    check_command           check_nrpe!check_load
    event_handler           processes_snapshot!xx
    contact_groups          admin-sms
}

В processes_snapshot команда определена в commands.cfg:

define command{
    command_name    processes_snapshot
    command_line    $USER1$/eventhandlers/processes_snapshot.sh $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$
}

Во-вторых, напишите сценарий обработчика событий (processes_snapshot.sh):

#!/bin/bash

case "$1" in
    OK)
        ;;
    WARNING)
        /usr/local/nagios/libexec/check_nrpe -H $4 -c processes_snapshot
        ;;
    UNKNOWN)
        ;;
    CRITICAL)
        /usr/local/nagios/libexec/check_nrpe -H $4 -c processes_snapshot
        ;;
esac

exit 0

Команда processes_snapshot определяется в nrpe.cfg на xx хост, как показано ниже:

command[processes_snapshot]=top -cSbn 1 | tail -n +8 | sort -rn -k11 | head > /tmp/proc_snap.txt

PS: Я не тестировал эту конфигурацию.

Вот что я сделал, чтобы получить снимок списка процессов прямо в письмах с уведомлениями, основанный на идее @quanta. Он может содержать пути, специфичные для способа установки Nagios на машинах Debian / Ubuntu:

  1. Создал скрипт-оболочку /usr/local/sbin/check_load который вызывает оригинал и добавляет снимок процесса, если код выхода равен 1 (ПРЕДУПРЕЖДЕНИЕ) или 2 (КРИТИЧНО):

    #!/bin/sh
    /usr/lib/nagios/plugins/check_load "$@" || {
        rc=$?
        echo
        # http://nagios.sourceforge.net/docs/3_0/pluginapi.html
        # | separates long output from perfdata
        COLUMNS=1000 top -cSbn 1|sed -e 's/|/<BAR>/g' -e 's/ \+$//'
        exit $rc
    }
    

    Это устанавливает для COLUMNS большое число, поэтому имена процессов / командные строки не будут усечены до 40 символов, запускаются сверху в пакетном режиме для одной итерации (-bn 1), запрашивает полные командные строки (-c) и совокупное время ЦП (-S) для отображения, а затем проверяет, что вывод top не усекается при первом | персонаж, заменив его на <BAR>.

    Я считаю, что порядок сортировки top по умолчанию является адекватным - попытка повторной сортировки по совокупному времени ЦП, как было предложено в ответе @quanta, помещает системные демоны, такие как init или crond, вверху, что не помогает мне выяснить, какой сценарий CGI был отвечает за скачок ЦП. Также таким образом я сохраняю верхний колонтитул.

    Не забывай chmod +x /usr/local/sbin/check_load

  2. редактировать /etc/nagios-plugins/config/load.cfg и заменить check_load вход

    command_line    /usr/lib/nagios/plugins/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$'
    

    с участием

    command_line    /usr/local/sbin/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$'
    
  3. редактировать /etc/nagios3/commands.cfg и обновите уведомить сервис по электронной почте запись, поэтому она включает $ LONGSERVICEOUTPUT $ в сгенерированные электронные письма. Слишком долго вставлять сюда; в основном найти Info:\n\n$SERVICEOUTPUT$\n" | /usr/bin/mail бит и измените его на Info:\n\n$SERVICEOUTPUT$\n$LONGSERVICEOUTPUT$\n" | /usr/bin/mail.

  4. Перезагрузите nagios: service nagios3 restart.

Я не пробовал это с NRPE.

Я предпочитаю:

command[processes_snapshot]=top -cSbn 1 | head -14 | tail -8