Zabbixエージェントで LinuxのソフトウェアRAIDを監視する

Linux

RAID運用のもっともありがちな失敗は、アレイのデグレードが発生してもそれに気付かず使用を続けた結果、全てのハードディスクが壊れてシステムが動作不能になってから初めて故障に気付くというパターンだ。

ハードディスクが故障してシステムが停止したりデータが消失したりするリスクを低減するために 複数のハードディスクに同じデータを持つ冗長化の仕組みとしてRAIDが用いられる。最近は市販の製品にも搭載されているため比較的よく知られるようになったと思うが、その意味については誤解されていることも多いように見受けられる。

RAIDは、

× ハードディスクが壊れなくなる仕組み

○ ハードディスクが壊れても新しいものに交換する時間的猶予が与えられる仕組み

なので、RAIDを構成するハードディスクのひとつが壊れた時には即時にそれが何らかの方法で人間に知らされなくてはならない。(それにより人間はハードディスク交換というアクションを起こす)

一般的にハードウェア RAIDの場合は、RAIDを構成するハードディスクに障害が起こりデグレード状態になるとブザー音などの警告でユーザーに問題を通知するため見逃しは起こりにくいのだが、ソフトウェア RAIDの場合はそのような場合でも静かに稼働してしまったりして問題に気付きにくい。

LinuxのソフトウェアRAID管理ツール mdadmにはアレイがデグレードすると警告メールを送信する機能があるのでそれを使用して警告メールを送信する手もあるのだが、監視専門のツールを利用できるのであればそれを使って一括して監視してしまう方が良い。

参考: RAIDの構築 - 技術情報 - Walbrix

なのでオープンソースの統合監視プラットフォームとして知られる Zabbix で LinuxのソフトウェアRAIDを監視してみることにする。

どこを監視すればいいか

RAIDの稼働状況は /proc/mdstat から知ることが出来る。例えば、4TBのハードディスク2台をRAID1で構成したアレイ(ここではシステム上 md127と名前がついている)がひとつ正常に稼働している時の内容はこのようになっている。

Personalities : [linear] [raid0] [raid1] [raid10] [multipath] [faulty] [raid6] [raid5] [raid4] 
md127 : active raid1 sdb1[0] sdc1[1]
      3906885440 blocks super 1.2 [2/2] [UU]

ハードディスクの読み書きに問題が起こって OSがアレイをデグレード状態であると認識すると、この内容が変わる。具体的には、[UU]の部分が[U_]などになったりする。なので、このカギ括弧の中に "U" 以外の文字が無ければ健常という判断でよさそうだ。egrepと wcで健常な RAIDアレイの数をカウントしてみよう。

egrep '[0-9]+ blocks (.* )?\[[0-9]+/[0-9]+\] \[U+\]' /proc/mdstat|wc -l

稼働しているRAIDアレイ数が1つであれば実行結果は1と表示される。

エージェント側の設定

監視対象となるホストには Zabbixエージェントがインストールされており、既にエージェント監視が行われているものとする。設定ファイル /etc/zabbix/zabbix_agentd.conf に上の実験結果をふまえこのような行を追加する。

UserParameter=raid.healthy,egrep '[0-9]+ blocks (.* )?\[[0-9]+/[0-9]+\] \[U+\]' /proc/mdstat|wc -l

これで、監視サーバから raid.healthy という監視パラメータ名で健常なRAIDアレイの稼働数を取得できるようになる。(監視パラメータ名は好きなものを付けて良い)

設定ファイルを変更したら Zabbixエージェントを再起動する。

監視サーバ側の設定

「設定」→「ホスト」からホストのアイテム一覧を開き、「アイテム作成」で監視項目を追加する。

「監視データ」→「最新データ」から新しく追加された項目の状態を確認できる。

後は「健常状態であるべきRAIDアレイの数が違う時」に対してトリガーとアクションを設定すれば、然るべき方法でアラートを上げることが出来るだろう。

同じカテゴリの記事

glibcのgethostbyname関数に存在するCVE-2015-0235(GHOST)脆弱性について 2015年1月28日
DFSがどうこうと言われて Sambaの共有にアクセスできなくなった時の対処 2015年1月21日
Linuxをクラッシュさせられるバグが権限昇格のバグに進化した件 2014年12月18日
Linux 3.18リリース 2014年12月8日
BASHの脆弱性でCGIスクリプトにアレさせてみました 2014年9月25日

お勧めカテゴリ

英語でアニメ観ようず
なじみ深い日本製アニメの英語版DVDで、字幕と音声から英語を学びましょうという趣旨のシリーズ記事です。
ScalaのようでJavaだけど少しScalaなJSON API
Scalaと Spring Frameworkを使って REST的なJSON APIを実装してみましょう。
ドクジリアン柔術少女 すから☆ぱいそん
代表 嶋田大貴のブログです。写真は神仏に見せ金をはたらく罰当たりの図