linuxのディスク容量の監視について

お世話になります。haseと申します。

現在、zabbixの導入を考えており、zabbixの動作確認をさせて頂いております。

現在 CentOS でハードディスクの容量監視を設定してみて動作を確認しているのですが
試験的にマウントポジションを作成して外付けHDDをつけてマウント、
ディスカバリーで自動登録されてから
アンマウントしてもその外付けHDDのマウント先の容量が0になったりせず
80Gぐらいが空き容量として認識されるような状態です。
フォーラムやマニュアルを拝見させて頂いたところ
値が取れなくなったり数値が0になればトリガーで検知出来そうですが
このような場合の対処法があるのであれば知りたいと思っております。

あと、なぜこのような状態になるのか何かの数値を取ってしまっているか
などを知りたく投稿させて頂きました。

テンプレートは Template OS Linux
をそのまま使用しています。

zabbixサーバー のバージョン2.2.3 OS はCentOS 6.5
zabbixプロキシ 2.2.3 OS はCentOS 5.2
zabbixエージェント 2.2.3 OS はCentOS 5.2 (プロキシと同じ筐体でテストしています)
Mysqlのバージョンは5.1.73
いずれもRPMでインストールしております。

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

コメント表示オプション

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

デフォルトのテンプレート「Template OS Linux」を利用した場合、
ローレベルディスカバリという機能を利用して、マウントされてい
るファイルシステムのリストを取得してきて、それぞれのマウント
ポイント毎に、空き容量などの情報を取得するようになっています。

マウントされていたうちの1つのディスクをアンマウントした場合、
すぐにはそのディスクに対するアイテムは削除されません。
また、アンマウントされたからといって、それを検知するようなト
リガーは、このテンプレートには設定されていませんので、障害と
しても検知されません。

マウントされているディスクの数や各マウントポイントのリストは、
「Template OS Linux」であれば「Mounted filesystem discovery」
というディスカバリルールで更新されますので、デフォルトでは、
120秒経過しなければマウントされているディスクの情報を更新し
ません。

それまでは、アイテムも削除されませんので、値は取得され続ける
ことになります。
例えば、ディスクの空き容量に関しては、アイテムのキーとして、

 vfs.fs.size[{#FSNAME},free]

が利用されていますので、アンマウントしたディスクのマウントポ
イントが/mnt/disk1であった場合、アンマウント後であっても、ア
イテムが残っている状態であれば、

 vfs.fs.size[/mnt/disk1,free]

の値を取得しようとするので、/mnt/disk1ディレクトリがあるディ
スクの空き容量を取得してしまいます。
つまり、値が取得できなくなるわけではありません。
アイテムが削除された後であれば、各アイテムの保存期間までは、
アイテムのリスト内には項目として残り、過去の情報を参照するこ
とができたと思います。

ディスクのマウント数の状態を監視されたいのであれば、別途、ア
イテムやトリガーを作成してください。
例えば、UserParameterを利用して、マウントされているディスク
の数をカウントして、その値の変化でトリガーを設定するとよいの
ではないでしょうか。

どういう状態が発生したときに検知されたいのかが具体的にご提示
頂ければ、様々な実現方法のアドバイスを得られるかもしれません。

haseさん、ZABBIX-JPのみなさま、こんにちは。
はじめまして、alice-xuと申します。

ローレベルディスカバリによるファイルシステム監視にて、ファイルシステムがアンマウント
されたことを検出する方法についてですが、例えば以下のような方法が考えられます。

1. zabbix_agentd の UserParameter 設定として、以下の設定を追加する。
 UserParameter=script.vfs.fs.mount_status[*],stat "$1"/lost+found > /dev/null 2>&1;echo $?

2. テンプレート: Template OS Linux のディスカバリルール: Mounted filesystem discovery
 のアイテムのプロトタイプに、以下のような設定を追加する。

 名前: Filesystem mount status on {#FSNAME}
 キー: script.vfs.fs.mount_status[{#FSNAME}]
 データ型: 整数
 データの形式: 10進数
 更新間隔: 60
 ヒストリ: 7
 トレンド: 365
 タイプ: Zabbixエージェント
 アプリケーション: Filesystems
※更新間隔/ヒストリ/トレンドの数値については、当方での設定例です。
 ご利用環境に合わせてご調整ください。

3. テンプレート: Template OS Linux のディスカバリルール: Mounted filesystem discovery
 のトリガーのプロトタイプに、以下のような設定を追加する。

 名前: Filesystem is unmounted on {#FSNAME}
 条件式: {Template OS Linux:script.vfs.fs.mount_status[{#FSNAME}].last(0)}=1
 深刻度: 重度の障害
※深刻度については、当方での設定例です。
 ご利用環境に合わせてご調整ください。

上記の方法は、ファイルシステムマウント時に既定で lost+found の存在が期待できる
ファイルシステム(例えばext3/ext4)で、かつアンマウント後にはマウントポイントディ
レクトリ内に lost+found が存在しない状態になっていれば使用可能です。

以上、ご参考になりますと幸いです。

ユーザー fripper の写真

lost+found 使う方法はまさしく発想の転換ですね。確かに「マウントされていれば存在する」ですし‥

ファイルシステム種別への依存(ext3/ext4 etc)を無くすには‥
◆UserPatameterを使って、mountコマンド(引数なし)の結果や、/etc/mtab 等の内容から、
  awk や grep 等を使って、指定されたパス文字列と完全一致するエントリの有無を検知する

といった処理になると思います
結局は、LLDのディスカバリ処理が内部でやっていることと同じ処理になってしまいます(汗

また、上に書いた方法とはまた別の方法で、同じことを実現する手段‥として、思いついたので。
◆UserParameterを使って、localhost 上で、zabbix_getを使って、自分自身に対してアイテムキー「vfs.fs.discovery」を
 問い合わせ、その結果文字列(JSON)をパースして、対象となるパス文字列と同じ位置を示すエントリの有無を
 確認する‥
‥使いづらいですね‥はい‥。
agentdが存在していれば、OS問わず、マウントポイントの管理方法に依存せずに使える‥と思ったのですが、
JSON出力を解釈させるほうが敷居が高かったです‥(汗)

ユーザー hase の写真

TNK様、alice-xu様、fripper様
お世話になります。haseです。
たくさんのご回答ありがとうございます。

まだ、zabbixの動作などの確認を初めて間がないので
一つずつ確認してきちんと理解したいです。
とりあえず、Linuxについては、マウンド数の確認とアンマウントされた場合のトリガーを作成
また、ディスク容量が0、nodataの場合に検知するようにしてみます。
alice-xu様の手法も検証してみます。

あと、Windows のテンプレートを使用して外付けHDDがディスカバリーをされて
アンマウントするとunknownというステータスになり
トリガーが検知出来ないようです。
こちらステータスがunknownだと検知ができないので他のトリガーで検知する必要があると
他の記事に記載されていたのですが、この場合どういうトリガーが適切でしょうか?

TNK様
とりあえず、Windows Linuxのディスク容量を監視したいと思っています。
外付けHDDの監視も必要ですし、クラウドの環境もあり
あとからパーティションが追加されたりすることもありますので
それらがローレベルディスカバリーなどで自動で登録されて引き続き容量監視出来るようにしたいです。

仕様上ありえるのかちょっとわからないのですが
例えば、zabbixが動作不全を起こしたりマウントポジションやドライブレターが
変わってしまった場合など、一部のディスクだけ値が取れなかったり
ステータスが不明場合はアラートを検知して状態に持って行きたいと思っています。

あと、ローレベルディスカバリーにこだわるのはサーバーの台数が多いので
設定のし忘れの防止をしたいからです。
逆にいうと設定のし忘れを検知出来る方法がわかればいいかもしれません。

質問ばかりで申し訳ありませんがよろしくお願いします。