Игорь Олемской — практические заметки по системному администрированию Linux CentOS

Архив тега ‘nagios’

Уведомления Nagios посредством SMS (перепечатка)

Комментариев нет

Здесь пойдет речь о том как просто настроить отсылку уведомлений Nagios на SMS. Для отсылки я использовал сервис smsc.ru. Подойдет и любой другой, поддерживающий почтовый шлюз для отправки SMS.

Дальше пошли исходники и конфиги.

1. Настраиваем контакт для уведомления по SMS (contacts.cfg). График уведомлений и тип уведомлений по вкусу. В поле pager указываем мобильный номер.

define contact{
        contact_name                    admin_sms
        alias                           Admin SMS
        service_notification_period     24x7
        host_notification_period        24x7
        service_notification_options    w,u,c,r
        host_notification_options       d,r
        service_notification_commands   notify-by-custom-sms
        host_notification_commands      notify-by-custom-sms
        email                           admin@foobar.com
        pager                           +79991112233
        }

Добавляем этот контакт в соответствующую группу контактов.

2. Пишем скрипт отправки. Написано на пых-пых. Надо проверить правильность пути к интерпретатору (/usr/local/bin/php).

#!/usr/local/bin/php
<?
 
if (!eregi('^\+[0-9]{5,}$',$argv[1])) {
    echo "USAGE: echo 'message' | $argv[0] PHONENUMBER\n";
    exit;
}
 
$fp=fopen('php://stdin','r');
$mess='';
 
while ($buff=fread($fp,256)) {
    $mess.=$buff;
}
 
$mess=trim($mess);
fclose($fp);
 
$body=sprintf('username:password:::0,0,Nagios:%s:%s',$argv[1],$mess);
mail('send@send.smsc.ru','sms',$body);
 
?>

На скрипт ставим права 755, таким образом его можно юзать из командной строки. Назовем его notify_via_sms.php и положим, скажем, в /usr/local/bin/.

username и password – заменить на ваш логин и пароль в сервис рассылки SMS.

Проверить работу скрипта можно примерно так

echo "Test message" | /usr/local/bin/notify_via_sms.php ВАШ_НОМЕР

Номер разумеется в международном формате.

3. Теперь Nagios’у надо рассказать как пользоваться этим скриптом. В commands.cfg пишем:

define command
        command_name    notify-by-custom-sms
        command_line    /usr/bin/printf "%b" "$NOTIFICATIONTYPE$ ON $HOSTALIAS$\n$SERVICEDESC$ IS $SERVICESTATE$\n$SERVICEOUTPUT$" | /usr/local/bin/notify_via_sms.php $CONTACTPAGER$
        }

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

Nagios Plugin: check_ftp_login (перепечатка)

Комментариев нет

В общем нужно было проверять Nagios’ом не только порт фтп на удаленном хосте, но и работоспособность определенного аккаунтa FTP. Т.е. чтобы check_ftp заходил на FTP сервер и логинился под определенным юзером.

Существующая утилитка check_ftp из набора Nagios Plugins на момент написания статьи не умела делать логин. Точнее утилитки как таковой там и нет, там просто стоит симлинк check_ftp -> check_tcp.

По сему утилитка была написана на Perl с использованием Nagios::Plugin и Net::FTP.

Может так же использоваться как пример написания Nagios Plugins на Perl в виду простоты кода.

Сырец: http://www.pentarh.com/files/check_ftp_login

Пользоваться так.

1. Скопировать в диру с плагинами Nagios

2. Поставить чмод 755

3. Убедиться что стоят перловые модули Net::FTP и Nagios::Plugin (т.е. запустить утилитку и если все ок, она выдаст USAGE)

4. Прописать команду в commands.cfg:

define command{
   command_name    check_ftp_login
   command_line    $USER1$/check_ftp -H '$ARG1$' -u '$ARG2$' -p '$ARG3$'
}
5. Юзать, например так
define service{
   use             remote-service
   host_name ВАШХОСТ
   service_description FTP LOGIN
   check_command   check_ftp_login!ftp.foobar.com!FTP_LOGIN!FTP_PASSWORD
   normal_check_interval       10
}

Удаленный мониторинг хардварного RAID DELL Perc 6/i (LSI) с помощью Nagios и SNMPd (перепечатка)

Комментариев нет

Здесь можно узнать, как мониторить удаленно хардварный RAID DELL Perc 6/i (чип LSI) с помощью утилиты MegaCLI, самописных скриптов, SNMPd и Nagios в Linux (CentOS).

О том, как подготовить Nagios и SNMPd, рассказано в статье о мониторинге софтварного RAID. Туда добавить мне нечего, можно скопипастить инфу оттуда.

А вот скрипт raid_status.pl несколько изменился. Для его корректной работы нужно скачать утилитку LSI MegaCLI for Linux. Так же я ставил симлинк /opt/MegaRAID/MegaCli/MegaCli64 -> /usr/sbin/MegaCLI:

# ln -s /opt/MegaRAID/MegaCli/MegaCli64 /usr/sbin/MegaCli

Теперь надо подготовить два скрипта.

1. Скрипт AWK для приведения выдачи утилиты MegaCLI в удобочитаемый формат.

©одрал не помню откуда. Положить его в /root/scripts/analysis.awk:

# This is a little AWK program that interprets MegaCLI output
/Device Id/ { counter += 1; device[counter] = $3 }
/Firmware state/ { state_drive[counter] = $3 }
/Inquiry/ { name_drive[counter] = $3 " " $4 " " $5 " " $6 }
END {
for (i=1; i&lt;=counter; i+=1)
   printf ( "Device %02d (%s) status is: %s\n", device[i], name_drive[i], state_drive[i]);
}

2. Скрипт парсинга вывода предыдущего скрипта :)

Это уже писано лично ) Положить в /root/scripts/raid_status.pl

#!/usr/bin/perl
open $f,'/usr/sbin/MegaCli -PDList -aALL | /bin/awk -f /root/scripts/analysis.awk |';
$numraid=0;
$ok=1;
%dev=();
while (&lt;$f&gt;) {
   if (/^Device\s+(\d+)\s+\(([^)]+)\)\s+status is: (\w+)/) {
($d,$m,$s)=($1,$2,$3);
      if ($s !~ /Online/i) {
         $ok=0;
         $dev{$d}=$s;
      }
      $numraid++;
   }
}
 
close $f;
 
if ($numraid != 6) {
   print "FAILURE: numraid !=6";
   exit;
}
 
if ($ok!=1) {
   $s='';
   foreach (keys(%dev)) {
      $s.="$_ : ".$dev{$_}.'; ';
   }
   print "FAILURE: $s";
   exit;
}
print "OK";

Убедиться что скрипт выдает ОК. Настроить nagios как указано в начале статьи.

 

Мониторинг Software RAID в Linux с помощью Nagios (перепечатка)

Комментариев нет

Небольшой ликбез по удаленному мониторингу софтварного рейда в Linux с помощью Nagios и SNMPd.

1. Мониторинговый скрипт

[ДАННЫЙ СКРИПТ НЕПРАВИЛЬНЫЙ, НО НЕТ ВРЕМЕНИ ПОФИКСИТЬ]

Для начала подготовим перловый скрипт на машине, которую требуется мониторить. Скрипт  будет проверять рейд и выдавать «OK» или «FAILED: описание» в зависимости от статуса RAID.

#!/usr/bin/perl
open $f,’/proc/mdstat’;
$numraid=0;
$raids=5;
$ok=1;

%dev=();

while (<$f>) {
if (/^(md[0-9])\s*:\s*([a-zA-Z]+)/) {
($d,$s)=($1,$2);
if ($s !~ /active/i) {
$ok=0;
$dev{$d}=$s;
}
$numraid++;
}
}

close $f;

if ($numraid != $raids) {
print «FAILURE: numraid !=$raids»;
exit;
}

if ($ok!=1) {
$s=»;
foreach (keys (%dev)) {
$s.=»$_ : «.$dev{$_}.’; ‘;
}
print «FAILURE: $s»;
exit;
}

print «OK»;

В данном скрипте следует установить переменную $raids в значение общего числа софтварных рейд-массивов в вашей системе. Узнать сколько у вас рейдов можно командой «cat /proc/mdstat».

Положите скрипт в /root/scripts/raid_status.pl

2. Настраиваем SNMPd

/etc/snmp/snmpd.conf:

syslocation  «Cool datacenter»
syscontact  cool@admin.su
sysservices 72

# Здесь нужно перечислить айпишники, с которых позволено обращаться к SNMPd
# secret_pass – пароль комунити

com2sec nagios 1.2.3.4/32 secret_pass
com2sec nagios 127.0.0.1 secret_pass

group pgroup v2c nagios
view all included  .1
access pgroup «»      any       noauth    exact  all all  none

# для мониторинга какого то процесса поставить «proc имя_процесса»
# proc httpd
# proc vsftpd
# для мониторинга партишена поставить disk /partition
# disk /
# disk /var
# Для мониторинга ЛА поставить load 15 10 10
# load 15 10 10
# Для мониторинга свапа поставить swap минимальное_своб_место_свапа_кб
# swap 1500000

# Собственно, наш скрипт мониторинга RAID
exec raid_status /root/scripts/raid_status.pl

master agentx
AgentXSocket tcp:localhost:705

/etc/sysconfig/snmpd.options:

OPTIONS=»-Lf /var/log/snmpd.log»

Далее, стартуем snmpd и добавляем его в стартап:

# /etc/init.d/snmpd start
# chkconfig –level 3 snmpd on

3. Конфигурация удаленного Nagios’a

Задаем команду проверки RAID в commands.cfg:

define command{
command_name check_snmp_raid
command_line $USER1$/check_snmp -H $HOSTADDRESS$ -P 2c -o .1.3.6.1.4.1.2021.
8.1.101.$ARG1$ -C $ARG2$ -r «OK»
}

В конфигурации хоста ourhost.cfg:

# Определяем удаленный хост; 1.1.1.1 – айпи удаленного хоста
define host{
use             server
host_name       our_host
alias           Remote Host with software RAID
address         1.1.1.1
check_command   check-host-alive
}

#… здесь всякие другие проверки ЛА, свапа, свободного места, процессов и пр.

# Собсно мониторинг RAID, secret_pass – пароль комунити удаленного сервера

define service{
use             remote-service
host_name       our_host
service_description RAID status
check_command   check_snmp_raid!1!secret_pass
normal_check_interval       20
}