XenのdiskをnagiosでSNMPから監視する

- Xen Server の df
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/cciss/c0d0p1 4.0G 2.9G 860M 78% /
none 380M 0 380M 0% /dev/shm
/dev/mapper/XSLocalEXT--17839832--589c--e778--a7dd--90d0c6a1a263-17839832--589c--e778--a6ed--90d0c6a1a263
60G 24G 34G 42% /var/run/sr-mount/17839832-589c-e778-a6ed-90d0c6a1a263

- mount pointが長過ぎる〜
そのままでやるとこうなる
./check_snmp_disk -H -C public -m d -w 90 -c 95
DISKS / : (2968 M/4032 M) 73% --- /var/run/sr-mount/d : (38063 M/110593 M) 34% --- /var/run/sr-mount/1 : (23701 M/60798 M) 38% ---

- nagiosのconfigをこうすれば監視は可能
define service{
use generic-service
host_name
name Linux_sr-mount
service_description Disk_/var/run/sr-mount/17839832-589c-e778-a6ed-90d0c6a1a263_check
check_command check_snmp_disk!/var/run/sr-mount/1!80%!90%!
}
ちょっと寂しい

- check_snmp_disk.cを変えちゃえ。
tar zxvf net-snmp-5.5.tar.gz (どっかから落としてきて)
cd net-snmp-5.5
make install
tar zxvf check_snmp_plugins.tar.gz
cd check_snmp_plugins/src

vi check_snmp_disk.c
20 があちこちにあるので、それを全部101に変更(全部変更してね)
unsigned char desc_uchar[20]; <<< こんなのとか…

vi check_snmp_disk.h
1箇所 20 があるので、101に変更
unsigned char descr[20]; <<< ここね

コンパイル
make check_snmp_disk

移動
mv /usr/local/nagios/libexec/check_snmp_disk{,.org}
mv check_snmp_disk /usr/local/nagios/libexec/

- 試してみる
./check_snmp_disk -H -C public -m d -w 90 -c 95
DISKS / : (2970 M/4032 M) 73% --- /var/run/sr-mount/17839832-589c-e778-a6ed-90d0c6a1a263 : (23701 M/60798 M) 38% ---
./check_snmp_disk -H -C public -m d -w 90 -c 95 -f /var/run/sr-mount/17839832-589c-e778-a6ed-90d0c6a1a263
DISKS /var/run/sr-mount/17839832-589c-e778-a6ed-90d0c6a1a263 : (23701 M/60798 M) 38% ---

- できた。

- ついてでにnagios のcfgも変更しちゃえ
define service{
use generic-service
host_name
name Linux_sr-mount
service_description Disk_/var/run/sr-mount/17839832-589c-e778-a6ed-90d0c6a1a263_check
check_command check_snmp_disk!/var/run/sr-mount/17839832-589c-e778-a6ed-90d0c6a1a263!80%!90%!
}

- おまじない
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
でerror 0を確認して
- /etc/init.d/nagios reload

Citrix XenServer Host 5.6 にnrpeをインストールする

結構面倒です。

- CentOSのversionの確認
ssh
cat /etc/issue.net
結果
CentOS release 5.5 (Final)

これで、CentOS 5.5 だと判明

- こちらから、いくつかrpmパッケージをdownloadします。
http://vault.centos.org/5.5/os/i386/CentOS/

- そして、インストールします。
rpm -ivh --nodeps openssl-devel-0.9.8e-12.el5_4.6.i386.rpm krb5-devel-1.6.1-36.el5_4.1.i386.rpm zlib-devel-1.2.3-3.i386.rpm libselinux-devel-1.33.4-5.5.el5.i386.rpm keyutils-libs-devel-1.2-1.el5.i386.rpm e2fsprogs-devel-1.39-23.el5.i386.rpm libsepol-devel-1.15.2-3.el5.i386.rpm

- libssl.so.4がないとか言われるので、以下を実行
cd /usr/lib
ln -s libssl.so libssl.so.4
ln -s libcrypto.so libcrypto.so.4

- 事前に、nagiosのuserとgroupを作っておきます。
useradd -m nagios
passwd nagios
groupadd nagios
usermod -G nagios nagios

- nrpeのtar packageをdownloadして、どこかのCentOSマシンでmakeし、Xen Serverへscpします。
どこかのCentOSにて実行
useradd -m nagios
passwd nagios
usermod -G nagios nagios

tar zxvf nrpe-2.12.tar.gz
cd nrpe-2.12
./configure --enable-command-args
make all
cd ..
tar zcvf nrpe-2.12-sumi.tar.gz nrpe-2.12

scpでnrpe-2.12-sumi.tar.gzを転送

- Xen Server上でnrpeのinit scriptをインストール
tar zxvf nrpe-2.12-sumi.tar.gz
cd nrpe-2.12
cp init-script /etc/init.d/nrpe
chmod 755 /etc/init.d/nrpe
chkconfig --add nrpe

- 再びどこかのCentOSにて環境作ってtarにする
cd nrpe-2.12
make install

tar xzf nagios-plugins-1.4.15.tar.gz
cd nagios-plugins-1.4.15
./configure --with-nagios-user=nagios --with-nagios-group=nagios
make
make install
cd ..

tar zxvf check_logfiles-3.0.4.tar.gz
cd check_logfiles-3.0.4
./configure
make
make install
cd ..

tar にします。
cd /usr/local
tar zcvf nagios-xen.tar.gz nagios

scp にてXen Serverに nagios-xen.tar.gz を転送

- Xen Serverにて展開します。
cd /usr/local
tar zxvf nagios-xen.tar.gz

- 環境を整えます。
cd /usr/local/nagios/etc/
chown nagios:nagios nrpe.cfg check_logfiles_messages.cfg
vi /usr/local/nagios/etc/nrpe.cfg 以下を書き換え
allowed_hosts=
dont_blame_nrpe=1
command_prefix=/usr/bin/sudo <<<<<< /var/log/messages がrootでないと読めない…
これは追加
command[check_logfiles]=/usr/local/nagios/libexec/check_logfiles -f /usr/local/nagios/etc/check_logfiles_messages.cfg

vi /etc/sudoers 以下を追加
%nagios ALL=NOPASSWD:ALL
これをコメントアウト
#Defaults requiretty

vi /usr/local/nagios/etc/check_logfiles_messages.cfg 以下に変更

@searches = (
{
tag => 'system',
rotation => 'loglog0log1',
logfile => '/var/log/messages',
criticalpatterns => 'error',
},
);

/etc/rc.d/init.d/nrpe start

- nagios server側で、check_logfiles用のディレクトリを作成しておきます。
mkdir /tmp/check_logfiles/
chown nagios /tmp/check_logfiles

- nagios server側でテスト
/usr/local/nagios/libexec/check_nrpe -H -c check_load
こんなのが返ってくればOKです。
OK - load average: 1.19, 1.65, 1.60|load1=1.190;15.000;30.000;0; load5=1.650;10.000;25.000;0; load15=1.600;5.000;20.000;0;

check_snmp_int.plでWindowsのLAN interfaceの負荷を計測

cd /usr/local/nagios/libexec

- interface名をつきとめる
./check_snmp_int.pl -v -H -C -w 0 -c 0 -n

結果
OID : 1.3.6.1.2.1.2.2.1.2.1, Desc : Software Loopback Interface 1
Name : Software Loopback Interface 1, Index : 1
OID : 1.3.6.1.2.1.2.2.1.2.14, Desc : HP NC382i DP Multifunction Gigabit Server Adapter #3
Name : HP NC382i DP Multifunction Gigabit Server Adapter #3, Index : 14
OID : 1.3.6.1.2.1.2.2.1.2.20, Desc : HP NC382i DP Multifunction Gigabit Server Adapter #3-QoS Packet Scheduler-0000
Name : HP NC382i DP Multifunction Gigabit Server Adapter #3-QoS Packet Scheduler-0000, Index : 20
OID : 1.3.6.1.2.1.2.2.1.2.16, Desc : HP NC382i DP Multifunction Gigabit Server Adapter #4
〜〜 後略 〜〜

- とりあえず、打ってみる
./check_snmp_int.pl -H -C -yk -w 5,5 -c 10,10 -MB -n "HP NC382i DP Multifunction Gigabit Server Adapter #3-QoS Packet Scheduler"

結果
HP NC382i DP Multifunction Gigabit Server Adapter #3-QoS Packet Scheduler-0000:UP No usable data on file (12 rows) :(1 UP): UNKNOWN
--最後のUNKNOWNは気にするな。/tmpにファイルが出きていれば多分大丈夫。

心配なら、10分くらい経ってから再度同じコマンド打ってみて。こんな感じでうまくいくはず。
10分くらい待つのがポイントです。すぐ打ってもダメみたい。
HP NC382i DP Multifunction Gigabit Server Adapter #3-QoS Packet Scheduler-0000:UP (0.0Mbps/0.0Mbps):1 UP: OK

/tmpにデータファイルできた
ls -l /tmp

結果
-rw-r--r-- 1 root root 396 2011-11-10 22:06 tmp_Nagios_int..HP_NC382i_DP_Multifunction_Gigabit_Server_Adapter_#3-QoS_Packet_Scheduler-0000

- さっそく、commands.cfgを書いてみる
cd /usr/local/nagios/etc/objects
vi commands.cfg

define command {
command_name check_snmp_int_eth
command_line $USER1$/check_snmp_int.pl -H $HOSTADDRESS$ $USER7$ -yk -w $ARG1$ -c $ARG2$ -MB -n "$ARG3$"
}

※ $ARG3$の両端に"(ダブルクオート)つけること === これ忘れて痛い目にあいました…

- そして、windows.cfgに書いてみる
これは、inとoutのどちらか方向で30Mbpsを超えるとwarningになり、60Mbpsでcriticalになります。
cd /usr/local/nagios/etc/objects
vi windows.cfg

define service {
use generic-service
host_name name check_network service_description LAN port traffic check_command check_snmp_int_eth!30,30!60,60!HP NC382i DP Multifunction Gigabit Server Adapter \\\#3-QoS Packet Scheduler! } ※ "#"が入っている場合は、前に\を3つつけること。 - おまじない /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg でerror 0を確認して - rm /tmp/tmp_* で先程作ったファイルを消しておきます。 <<< ID: nagiosでやっていたら消さなくてもいいよ。 - /etc/init.d/nagios reload - そして20分くらい待ちましょう。 - うまくいってれば、"OK"に!!