Nagiosでは、CGI設定ファイル(/usr/local/nagios/etc/cgi.cfg)の以下の設定を有効にすることで、障害発生時にNagiosのコンソール画面からアラート音が鳴るようになっている。
しかし、先日、以下の設定を有効にしてみたところ、アラート音が全く鳴らなかった。
しかも復旧させるのに、貴重な休日を1日費やしてしまったので、対応方法を紹介しておく。
 

host_unreachable_sound=hostdown.wav
host_down_sound=hostdown.wav
service_critical_sound=critical.wav
service_warning_sound=warning.wav
service_unknown_sound=warning.wav

 
Nagiosの閲覧に使用したPCのOSはWindows XP Service Pack 3、ブラウザはIE8だ。
 



 

第一の関門

まず、Nagiosに設定されている音源(.wavファイル)が存在するのかどうか、確認してみた。
上記の設定で指定されたhostdown.wavなどの音源は、/usr/local/nagios/share/media に置かれることになっている。
確認してみたところ音源ファイルが1つもなかった。
Nagiosの過去のバージョンのアーカイブを調べてみたら、Ver3.0.x系までは音源ファイルが含まれていたが、Ver3.1.0以降は含まれていなかった。
今回の環境では、最初からVer3.1.0をインストールしたので(このバージョンには音源が含まれていなかったので)インストールされなかったようだ。
早速、音源ファイルを /usr/local/nagios/share/media に置いてみた。
 

第二の関門

それでもアラート音は鳴らなかった。
まぁ、上記の対応で復旧したのなら1日も費やしたりしないのだ。
次に確認したのは音源を記述しているHTMLタグだ。
Ver2系とVer3.1.0で、音源を記述しているHTMLタグが変更されていないかどうかを確認した。
実は、同じPC(IE8)からNagiosのVer2.11にアクセスするとアラート音が鳴るからだ。
Ver3.1.0では、IEで解釈できないHTMLタグを使用しているのではないかと考えたわけだ。
tac.cgi(統合監視状態のページを表示するCGI)のソースファイルの音源を記述している箇所を比較したところ案の定、以下のような違いがあった。
ここで問題となるのは、赤字部分だ。
 

<Ver2.11>
	if(sound!=NULL){
		printf("<object type=\"application/x-mplayer2\" height=\"-\" width=\"0\">");
		printf("<param name=\"filename\" value=\"%s%s\">",url_media_path,sound);
		printf("<param name=\"autostart\" value=\"1\">");
		printf("<param name=\"playcount\" value=\"1\">");
		printf("</object>");
		}

<Ver3.1.0>
	if(sound!=NULL){
	        printf("<object type=\"audio/x-wav\" data=\"%s%s\" height=\"-\" width=\"0\">",url_media_path,sound);
		printf("<param name=\"filename\" value=\"%s%s\">",url_media_path,sound);
		printf("<param name=\"autostart\" value=\"true\">");
		printf("<param name=\"playcount\" value=\"1\">");
		printf("</object>");
		}

 
しかし、HTMLタグ自体は、同じ<object type=タグを使用している。
MIME-Typeが異なるだけだ。
HTMLタグの問題ではなさそうだ。
そこで、試しに別のブラウザでNagios Ver3.1.0にアクセスしてみた。
なんと、アラート音が鳴るではないか!
Firefox 3.6.11 でも、Chrome 7 でも、アラート音が鳴るのだ。
つまり、今回の不具合はNagiosの問題ではなく、IE8の問題だということになる。
 

第三の関門

さて、ここでもしやと思い、別のPCでNagios Ver3.1.0にアクセスしてみた。
OSも同じWindows XP Service Pack 3、ブラウザもIE8だ。
すると、なんと、アラート音が鳴るではないか!
むむむ、つまり、これはIE8の問題ですらなく、最初に使用したPC固有の問題だということだ。
ここで、Nagios Ver3.1.0のtac.cgi(統合監視状態のページを表示するCGI)のソースファイルの音源を記述している箇所をVer2.11のように<object type=\”application/x-mplayer2\”と書き換えて再インストールしたところ問題のPCのIE8からでもアラート音が鳴るようになった。
ということは、やはり、HTMLタグではなくMIME-Typeの問題だということになる。
つまり、問題のPCのIE8のMIME-Type(audio/x-wav)の解釈の問題なのだ。
ここまでわかれば、やることはひとつしかない。
問題のPCのIE8のMIME-Type(audio/x-wav)の設定をアラート音が鳴るPCのIE8と同じにすればいいわけだ。
 

第四の関門

ここで最大の難関に差し掛かってしまった。
それは、IE8のMIME-Type(audio/x-wav)の設定をどうやって変更するかだ。
今まで気にしたことがなかったが、Firefoxのようにブラウザのメニューから簡単に変更できるものと思っていたのだが、そうではなかった。
やはり、さすが元はOSの一部として組み込まれていた、海外では訴訟問題まで引き起こしたブラウザだけのことはある。
OSの設定を読み込むのだろうか?
ってことは、レジストリか?
なんてことを考えつつ、ググってみた。
 

第一の救い

やはり、困ったときにはネット検索だ。
以下の情報を見つけた。
 
●第2回 [無視できない]IEのContent-Type無視
 
このページの中ほどに「ファイルタイプをどのように判断するのか」という記事がある。
そこに書かれている内容によれば、やはりIEはMIME-Typeの設定をレジストリから読み込んでいるようだ。
そこでレジストリエディタを起動して上記のページに書かれているように、レジストリ(HKCR\Mime\Database\Content Type)を探したのだが、そもそもHKCRがない。
よくよく探してみるとHKCRではなく、HKEY_CLASSES_ROOT下にあった。
(HKCRは、HKEY_CLASSES_ROOTの略。)
HKEY_CLASSES_ROOT\Mime\Database\Content Typeに設定があるようだ。
この中に、audio/x-wav の設定があった。
問題のPCでは、以下のような設定になっていた。
 
図1:問題のPCのMIME-Type(audio/x-wav)のレジストリ設定
図1:問題のPCのMIME-Type(audio/x-wav)のレジストリ設定

 
一方、きちんとアラート音が鳴ったPCでは、以下のような設定になっていた。
 
図2:アラート音が鳴ったPCのMIME-Type(audio/x-wav)のレジストリ設定
図2:アラート音が鳴ったPCのMIME-Type(audio/x-wav)のレジストリ設定

 
違いは一目瞭然だ。
問題のPCのCLSIDを{cd3afa7b-b84f-48f0-9393-7edc34128127}に変更して、MPlayer2.BAK.CLSIDを削除すればOKな気がする。
そんな気はするが、念のためにもう少しググってみた。
 

第二の救い

やはり、困ったときにはネット検索だ。
以下の情報を見つけた。
 
●オレのブロローグ:Quicktimeがブラウザ上で勝手に起動するのを防ぐ
●オレのブロローグ:Quicktimeを排除
 
要約するとQuicktimeをインストールした際にレジストリのMIME-Typeの設定が書き換えられてしまうというものだ。
その修正方法も書いてある。
予想通り、MIME-Type(audio/x-wav)のレジストリ設定のCLSIDを{cd3afa7b-b84f-48f0-9393-7edc34128127}に変更すればいいようだ。
問題のPCとアラート音が鳴ったPCを確認したところ、やはり問題のPCにはQuicktimeがインストールされており、アラート音が鳴ったPCにはQuicktimeはインストールされていなかった。
そこで問題のPCのCLSIDを{cd3afa7b-b84f-48f0-9393-7edc34128127}に変更して、MPlayer2.BAK.CLSIDを削除したところ、問題のPCでもきちんとアラート音が鳴るようになった。
 
今回は、第一の救いのページに行き当たるまでにずいぶんと時間を消費してしまった。
先人の情報には敬意を表したい。
 

 


Categories: IE ,Nagios


Leave a Reply