Nagios Memory Monitoring with Nrpe

Nagios не включает plugin для мониторинга памяти. Вероятнее всего потому что нет единой команды для подсчета свободной памяти. Так как вся свободная память идет в буферы и в кэш

Логика скрипта:

free=`free -m | grep "buffers/cache" | awk '{print $4}'`
used=` free -m | grep "buffers/cache" | awk '{print $3}'`
total=$(($free+$used))
result=$(echo "$used / $total * 100" |bc -l|cut -c -2)

Полный листинг скрипта:

#!/bin/bash
#
# Script to check memory usage on Linux. Ignores memory used by disk cache.
#
# Requires the bc command
#
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=$(echo "$used / $total * 100" |bc -l|cut -c -2)

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

Использование скрипта

# ./check_memory -w 50 -c 55
Memory OK. 33% used.
# # ./check_memory -w 25 -c 20
Memory CRITICAL. 33% used.

Добавляем мониторинг памяти в Nagios
На сервере в Nagios hosts добавляем:

# Service definition
define service{
# Name of service template to use
               use                           generic-service
               host_name                     TEST
               service_description           LA
               is_volatile                   0
               check_period                  24x7
               max_check_attempts            3
               normal_check_interval         1
               retry_check_interval          1
               #contact_groups               admins
               notification_interval         120
               notification_period           24x7
               notification_options          c,r
               check_command                 check_nrpe!check_memory
}

Перезагружаем Nagios

# service nagios restart

На Машине клиенте добавляем данный скрипт в папку с плагинами Nagios

# vi /usr/lib/nagios/plugins/check_memory
# Копируем скрипт
# chmod 755 check_memory

В файле /etc/nagios/nrpe.cfg задаем параметры проверки warning и critical

command[check_memory]=/usr/lib/nagios/plugins/check_memory -w 85 -c 90

Перезагружаем nrpe

# service nrpe restart

Результат: