共有diskのマウント状態監視について

いつも参考にさせていただいております。

【環境】
監視サーバ: Ubuntu 14.04.2 LTS zabbix 2.2
監視対象:  Ubuntu 14.04.2 LTS × 8台

【背景の説明】

Ubuntuサーバに、外部diskを/mnt/disk-shareとしてmountしています。
上記を5分に一度監視して、こちらのマウントが外れた場合に検知するような監視を導入しています。

<現状の監視トリガー>
{ubuntu hostname:vfs.fs.size[/mnt/disk-share/,total].nodata(310)}=1

上記で設定すると、vfs.fs.size[/mnt/disk-share/,total]の結果がzabbixサーバに来る前に、
nodata(310)関数が動いてしまい、マウントが外れていないのに外れているという様に検知してしまう事に悩んでいます。
※当初はvfs.fs.size[/mnt/disk-share/,total]の取得間隔と同等に、nodata(300)としていましが、誤検知が多すぎたので、修正しました。

【質問内容】
・マウントしている外部diskを監視する為のベストプラクティスがあれば教えてください。
 ⇒zabbixエージェント側のconfにdfコマンドを記載する監視方法も知っています。
  こちらの方が、メジャーなのでしょうか?
  (監視対象が増えることでのメンテナンスが大変なので避けています)

・現状のマウント監視トリガーを以下に変えようと考えていますが、懸念点等あればご指摘が欲しいです。
 ⇒{ubuntu hostname:vfs.fs.size[/mnt/disk-share/,total].nodata(150)}>1
 ⇒監視間隔を短くして、2連続nodataが検知した場合にしようと考えています。

以上、よろしくお願いいたします。

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー TNK の写真

通常、ディスクをマウントする際には、/mnt/disk-share というマ
ウントポイントにマウントするのであれば、/mnt/disk-share とい
うディレクトリを作成して、その場所をmountコマンドのオプショ
ンで指定してマウントさせると思います。

その場合、マウントしていない状態であっても、/mnt/disk-share
というディレクトリ自体は存在しますので、

 vfs.fs.size[/mnt/disk-share/,total]

を利用した場合でも値は取得され続けるので、それにnodata()を使
用してチェックしても、マウントしているかどうかを判別すること
はできないでしょう。

マウントを外したときに、マウント先のディレクトリも削除されて
いるのですか?

ディレクトリが無い状態であれば、そのアイテムは「取得不可」の
状態になりますので、マウントできているかどうかの判別に使用す
るのは不適切でしょう。

というのも、「取得不可」の状態になったアイテムは、アイテムの
更新間隔でのチェックは行わなくなります。
値を取得できなくなったということは、何らかの問題が発生してい
る可能性があるため、むやみに値を再取得しようとすることは復旧
作業に影響を与えてしまう可能性があるので、デフォルトでは10分
間隔で取得できるよう復旧されたかを確認するようになっていたは
ずです。

ですので、5分間間隔でチェックして、復旧したらすぐに状態を正
常に戻されたいのであれば、「取得不可」の状態とnodata()を使用
する方法は、復旧の状態に戻るまでにより多くの時間がかかってし
まう場合があるので、実現されたいこととは異なるのではありませ
んか?

【質問内容】
・マウントしている外部diskを監視する為のベストプラクティスがあれば教えてください。
 ⇒zabbixエージェント側のconfにdfコマンドを記載する監視方法も知っています。
  こちらの方が、メジャーなのでしょうか?
  (監視対象が増えることでのメンテナンスが大変なので避けています)

dfなりmountなどのコマンドの出力を利用した方が、目的に合致し
た監視ができると思います。
メジャーかどうかではなく、要件を満たすかどうかの問題でしょう。

設定の簡略化については、どのように設定したいか次第ですが、マ
クロを活用する方法で監視設定のメンテナンス作業を軽減すること
や、マウントポイントの数によっては、LLDを利用するということ
も考えられると思います。

・現状のマウント監視トリガーを以下に変えようと考えていますが、懸念点等あればご指摘が欲しいです。
 ⇒{ubuntu hostname:vfs.fs.size[/mnt/disk-share/,total].nodata(150)}>1
 ⇒監視間隔を短くして、2連続nodataが検知した場合にしようと考えています。

上記の通り、マウントできているかどうかを、より短い時間単位で
判断したいのであれば、nodata()を使用する方法はお勧めしません。

ユーザー hatakeyama-takeshi の写真

TNKさん

お世話になっております。
ご丁寧なご回答、本当にありがとうございました。

>ディレクトリが無い状態であれば、そのアイテムは「取得不可」の
>状態になりますので、マウントできているかどうかの判別に使用す
>るのは不適切でしょう。

ご指摘頂いた部分は、ごもっともでした。
nodata関数での監視は、取りやめて別の方法を導入いたします。

>dfなりmountなどのコマンドの出力を利用した方が、目的に合致し
>た監視ができると思います。

監視対象のサーバに配置されているzabbix-agent.confに以下を記載して、
zabbix-serverのアイテム・トリガーを設定する方法に致しました。
現在、検証作業+テストを実施中です。
UserParameter=mount_diskshare_active,mountpoint -q /mnt/disk-share/ && echo $?
(マウントされている場合は0、マウントされていない場合は1を返す)

また、2.0以降使えるようになったLLDに関しては、今後利用の検討をしようかと考えています。
以前、1.8で利用していたアイテムをそのまま流用しているので、使っていないのですが、
今後の効率化の為にも使いたいと考えています。
LLDをつかうと、今回のパターンのマウント監視をする場合、
zabbix-serverから以下のコマンドで認識することができることも勉強になりました

$ zabbix_get -s xx.xx.xx.xx -k vfs.fs.discovery | grep '\\/mnt\\/disk-share'
"{#FSNAME}":"\/mnt\/disk-share",

ご回答、ありがとうございました。

ユーザー hatakeyama-takeshi の写真

>UserParameter=mount_diskshare_active,mountpoint -q /mnt/disk-share/ && echo $?
>(マウントされている場合は0、マウントされていない場合は1を返す)

アンマウント試験したところ、上手く拾えませんでしたので、以下に修正しました。
間違った情報を書いてしまったので、コメントで訂正させてもらいます。。。

UserParameter=mount_diskshare_active,mount | grep diskshare | wc -l