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

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

Уведомления 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
}

Zabbix 1.8 API – PHP Class v1.0 (перепечатка)

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

Recently Zabbix, a server monitoring utility released Zabbix 1.8. One of the newest (and coolest) features is an API, with documentation! This means that finally, the world can begin to write software the digests the Zabbix API to pull data into various other portals, services, and platforms.

My first foray into this arena led me to making a class to make it easy for myself (and anyone else) to have a simple way to access Zabbix from PHP. First before you use the code you need to make a Zabbix user and group with the proper privileges. From my example below, I used the user apiuser, and password ap1. I recommend making it a LOT more secure.

So here is an example of what your user and his privileges should look like…
Zabbix API - User Creation
And here is what your group should look like when you’re done…
Zabbix API Group Creation

And finally, here’s an example of how to use the API… and as you’ll see in the example below, the hostname of my zabbix server is “genbook”, one of my private development environments. Scroll to the bottom to get the download link for the API and example code.

Grab my Zabbix API Class (v1.0), and example code here: zabbix_php_api_v1_0.zip

Your feedback, input, and patches are welcome. For now please use my comment form below to submit feedback. I will setup another method to contact me regarding suggesting improvements in the future.

Enjoy!

Удаленный мониторинг хардварного 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
}