Создаем плагин для Nagios на Bash, Perl, Python на CentOS 6

Первое, что нам необходимо сделать это установить RPMForge репозиторий и NRPE на клиента и сервер:

# rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
# yum -y install nagios-nrpe
# useradd nrpe && chkconfig nrpe on

Хранить будем наш плагин в директории, где хранятся и другие плагины (/usr/lib64/nagios/plugins/). В нашем примере мы создаем скрипт, который проверяет использование дискового пространства вызывая df из shell, и оповещаем при использовании дискового пространства более 85%.

BASH

#!/bin/bash
used_space=`df -h / | grep -v Filesystem | awk '{print $5}' | sed 's/%//g'`
case $used_space in
[1-84]*)
echo "OK - $used_space% of disk space used."
exit 0
;;
[85]*)
echo "WARNING - $used_space% of disk space used."
exit 1
;;
[86-100]*)
echo "CRITICAL - $used_space% of disk space used."
exit 2
;;
*)
echo "UNKNOWN - $used_space% of disk space used."
exit 3
;;
esac

PYTHON

#!/usr/bin/python
import os, sys
used_space=os.popen("df -h / | grep -v Filesystem | awk '{print $5}'").readline().strip()

if used_space < "85%":
        print "OK - %s of disk space used." % used_space
        sys.exit(0)
elif used_space == "85%":
        print "WARNING - %s of disk space used." % used_space
        sys.exit(1)
elif used_space > "85%":
        print "CRITICAL - %s of disk space used." % used_space
        sys.exit(2)
else:
        print "UKNOWN - %s of disk space used." % used_space
        sys.exit(3)

PERL

#!/usr/bin/perl
use strict;
use warnings;
use feature qw(switch say);

my $used_space = `df -h / \|awk 'FNR == 2 {print \$5}'`;

given ($used_space) {
    chomp($used_space);
    when ($used_space lt '85%') { print "OK - $used_space of disk space used."; exit(0);      }
    when ($used_space eq '85%') { print "WARNING - $used_space of disk space used."; exit(1);      }
    when ($used_space gt '85%') { print "CRITICAL - $used_space of disk space used."; exit(2); }
    default { print "UNKNOWN - $used_space of disk space used."; exit(3); }
}

Сохраняем скрипт в /usr/lib64/nagios/plugins/usedspace.sh(.py|.pl) и делаем его исполняемым

# chmod +x /usr/lib64/nagios/plugins/usedspace.sh(.py|.pl)

Весь NRPE плагин Nagios сводится к использованию определенных кодов выхода для запуска оповещений. Вот коды выхода Nagios:

Exit Code

Status

0

OK

1

WARNING

2

CRITICAL

3

UNKNOWN

 

Теперь добавляем наш скрипт в NRPE конфигурацию на клиентском хосте:

Удаляем оригинальный файл /etc/nagios/nrpe.cfg и добавляем следующие строки в него:

log_facility=daemon
pid_file=/var/run/nrpe/nrpe.pid
server_port=5666
nrpe_user=nrpe
nrpe_group=nrpe
allowed_hosts=192.168.1.1
dont_blame_nrpe=1
debug=0
command_timeout=60
connection_timeout=300
include_dir=/etc/nrpe.d/

command[usedspace_bash]=/usr/lib64/nagios/plugins/usedspace.sh(.py|.pl)

Где 192.168.1.1 наш мониторинг сервер. Перезапускаем NRPE сервис:

service nrpe restart

Добавляем новую команду в Nagios на Nagios сервере. Определяем новую команду в /etc/nagios/objects/commands.cfg:

define command{
        command_name    usedspace_bash
        command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c usedspace_bash
        }

Как видно, плагин использует NRPE для создания TCP соединения на порту 5666 и запускаем команду usedspace_bash, которую мы определили в /etc/nagios/nrpe.cfg на удаленном хосте. Добавьте проверку в ваш конфигурационный файл Nagios. В нашем примере мы будем мониторить сервер, который называется CentOSDroplet и отредактируйте /etc/nagios/servers/CentOSDroplet.cfg:

define service {
        use                             generic-service
        host_name                       CentOSDroplet
        service_description             Custom Disk Checker In Bash
        check_command                   usedspace_bash
        }

Перезапускаем Nagios:

service nagios restart

Совокупный перевод вот этих статей: раз два три

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Post Navigation