Небольшой ликбез по удаленному мониторингу софтварного рейда в 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
}