はじめに

Zabbix Advent Calendar 2015 6日目のエントリです。 Zabbix初級者(自分もこの域と思ってます)から活用いただければ幸いです。

ユースケース

  • 複数台の(Web)サーバーからNFSで共有するディレクトリ(実体が別のサーバー)があり、そのディレクトリの存在がアプリケーションとして重要であるケース

前提

  • Webサーバー・NFSサーバーともOSはLinux
  • Zabbix Server・Agent インストール済み(おそらく既存全バージョンで利用できる)

監視される側(mountしているサーバー)の設定 [UserParameter]

初期状態

[root@server ~]# df
Filesystem                  1K-blocks      Used Available Use% Mounted on
/dev/mapper/centos-root       8775680   1778724   6996956  21% /
・・・
none                        479525884 148412768 331113116  31% /vagrant
192.168.33.97:/exports/data   8775680   1114112   7661568  13% /mnt/data

zabbix_agentd.conf に UserParameter を追記

以下のようなコマンドで(コマンドで書き込む場合、$ をエスケープする点に注意が必要。vi 等で「手書き」するときは \ 不要)

echo "UserParameter=vfs.directory.exists[*],if [ -d \$1 ]; then echo 1; else echo 0; fi" >> /etc/zabbix/zabbix_agentd.conf

zabbix-agent 再起動

systemctl restart zabbix-agent

Zabbix Server 側の設定(アイテム・トリガー)

Web UI で Item と Trigger を設定します。

Item

  • 妥当な Name を設定
    • 例)Check mount_directory_access
  • Key に UserParameter で追記した vfs.directory.exists を利用した定義を設定
    • 例)vfs.directory.exists[/mnt/data/sample]

02_item_configuration.jpg

Trigger

  • 妥当な Name を設定
    • 例)Failed mount_directory_access (/mnt/data/sample)
  • Expression に 追加した Item を選択
    • 例){[mountingHost]:vfs.directory.exists[/mnt/data/sample].last()}=0

03_trriger_configuration.jpg

テスト

監視対象ディレクトリをリネームしてみる → イイ感じ

(NFSサーバー側)

[root@target ~]# exportfs -v
/exports/data   192.168.33.0/24(rw,wdelay,root_squash,all_squash,no_subtree_check,sec=sys,rw,secure,root_squash,all_squash)
[root@target ~]# cd /exports/data
[root@target data]# ls -la
total 0
drwxr-xr-x 3 nfsnobody nfsnobody 19 Dec  6 00:05 .
drwxr-xr-x 3 root      root      17 Dec  5 15:06 ..
drwxrwxrwx 2 root      root       6 Dec  5 16:01 sample
[root@target data]# mv sample sample1
[root@target data]#

11_failed_mount_directory_access.jpg

NFSプロセスを止める → おや?

[root@target data]# systemctl stop nfs-server

12_NFS_Process_down.jpg

期待していた「Failed mount_directory_access (/mnt/data/sample)」ではなく、「NFS Procces Down」の Alertが出ました。

Check mount_directory_access は、「Not supported」となってしまっていました。 13_Not_supported_Item.jpg

まとめ

  • mountしているディレクトリの実体存在監視をZabbixで行う場合(Linux系OS)
    • UserParameter を利用した監視アイテム追加で実現可能
    • ただし、NFSの場合、NFSプロセス自体も監視が必要

備考

おわりに

UserParameter は非常に活用の幅が広く、様々な応用が可能に思えます。

次は halchiyo さん、よろしくお願いします。