最近書いた、SMART値からディスクセクタを監視するNagiosとMuninのプラグインの紹介

#nagios #munin

仕事でSMART値を利用したnagios, muninのプラグインを作ってました。

必要なもの: smartmontools (smartctl)

-d autoを使えるバージョンが良いです。 Changelogによると、ver 5.40 (2010/10/16) あたりから使えるようです。

http://sourceforge.net/apps/trac/smartmontools/browser/trunk/smartmontools/ChangeLog-5.0-6.0#L1343

CentOS 5以上であればyumから入ったので、RHEL系であればyum update smartmontoolsで良さそうです。 バージョンアップしていくと-d autoで検出可能なデバイスタイプが増えていくので、新しいのがオススメです。

Reallocated_Sector_Ct (SMART ID:5)

1つ目はReallocated_Sector_Ctを監視するプラグインです。

ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  5 Reallocated_Sector_Ct   0x0013   100   100   050    Pre-fail  Always       -       0

Reallocated_Sector_Ctは不良セクタを予備セクタへ置換した数を示します。

ハードドライブはread, write verification等でエラーを発見すると、エラー対象のセクタを予約領域へデータ転送して置換(再配置、またはremap)を施行します。

そこまでクリティカルな現象では無いものの、RAW_VALUEが溜まっていくに連れてread/writeの性能が悪くなるらしく、ある程度値が蓄積してきたらディスク交換をしたほうが良いでしょう。

サンプル

カウント0の状態。現時点では不良セクタが見つかっておらず、概ね健康そう。

一部デバイスにおいてremapされたグラフ。 この数字が増加につれて、ディスクの性能劣化につながっていく(ただし値と性能劣化の関係性は製品によると思うので、一概に50出たらアウト、とか言い切るのは難しいです)。

見ていて気持ちのいい数字じゃないですね。

Current_Pending_Sector (SMART ID:197)

2つ目はCurrent_Pending_Sectorを監視するプラグインです。

ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
197 Current_Pending_Sector  0x0012   100   100   000    Old_age   Always       -       0

Current_Pending_Sectorは不良セクタの数を示します。 代替処理 (remapped) 待ちや、読み込みが出来ず回復不能なセクタなどがカウントされます。

fsckの実行やblockのゼロクリア(dd if=/dev/zero of=<dev> seek=<block>)で回復する(代替処理される)場合があり、回復すると値は減少します。 先ほどのReallocatedに比べるとクリティカルな現象で、ドライブ不調につきリプレイスを推奨されてます。

サンプル

再配置されていない不良セクタが見つかっていないグラフ。 sdaとsdbはデバイスがSMART ID:197をサポートしておらず、値が取れませんでした。

1のところに先が引かれてるけど、warning/criticalのラインなのであしからず。

80近い不良セクタがあるヒヤヒヤもののデバイスがいるグラフ。 Reallocated_Sector_Ctと違って、不良セクタが不良セクタとして残ってしまっているため、何が起こるかわからないので早く置換した方がいい状態。

さっき見つけた悲鳴を上げたくなるグラフ。跳ね上がるな、跳ね上がるな。

使い方

どちらもbashで書いたので、プラグインディレクトリに置いて使っていただければ。

muninプラグインの作り方や導入に関してはこちらのブログを参考にさせていただきました。

Munin プロセスごとのスワップサイズを監視するMuninプラグインを作ってみた | ぱち ブログ

/etc/munin/plugin-conf.dに以下のようなファイルを用意して、上記プラグインをプラグインディレクトリに設置すると動くようになるみたいです。

[bad_sector]
user root

なんでこのプラグインを作ったか

ディスクの経年劣化や初期不良により、満足にデータをホスト出来ないディスクを検知出来れば、計画的にディスクを交換し、サービスの安定した運用に貢献出来そうだと思って作りました。

検討中なこと

warning/criticalの閾値がこれでいいのか、という問題があります。

Current_Pending_Sectorは一個でも出ると、不良セクタが不良セクタのまま残っているのでcritical出すようにしてるんですが、Reallocated_Sector_Ctの閾値は運用しつつ様子を見てる感じです(10でwarning、20でcriticalにしてます)。

参考

だいたい以下と英語のWikipediaを読んで勉強しました。 英語版WikipediaのSMART値は説明的で良いです。