「東北地方太平洋沖地震」で被害にあわれた方々に心よりお見舞い申し上げますとともに、犠牲にになられた方々ならびに御遺族の方々に深くお悔み申し上げます。
 
ずいぶんと期間が開いてしまいましたが、震災以来、Jラボでも色々な事がありました。
今後はまた、定期的にアップしていきたいと思います。
 
今回は、Nagiosのステータスマップの文字化けの話。
Nagiosのステータスマップのアイコンの上にマウスを乗せるとポップアップ画面が表示される。
ホストのエイリアスに日本語を記述している場合、ポップアップ画面に表示された際に文字化けを起こしてしまう。
この件は、いろいろなQ&Aやブログなどで見かけるが、根本的な解決に至っていないようである。
今回は、この件について調べてみた。
 



 

ステータスマップの文字化け状態

下図が問題のステータスマップの文字化け状態だ。
ポップアップ画面のエイリアス(赤枠部分)が、文字化けしている。
今回の場合、本来であれば、ここが『公開サーバ』と表示されるはずだ。
 
図1:ステータスマップの文字化け
図1:ステータスマップの文字化け

 
ステータスマップを表示するのは、statusmap.cgiなので、このCGIを修正する。
 

CGIの修正

statusmap.cgiは、コンパイルされたC言語の実行イメージだ。
ソースプログラムは、/usr/local/src/nagios-3.1.0/cgi/statusmap.c だ。
※Nagios本体をインストールした際に、/usr/local/src 下に解凍したため。
今回は日本語パッチ適用後のソースを対象にする。
この1979行目を下記のように修正すればいい。
また、NagiosのCGIは以下のように個別にmakeすることもできる。
make installでもCGIはインストールされるが、その場合は/usr/local/src/nagios-3.1.0/cgiにある全てのCGIが再インストールされるので、以下では個別に修正したCGIだけコピーしている。
 

# cd /usr/local/src/nagios-3.1.0/cgi
# vi statusmap.c

<修正前>
   1979         printf("<tr><td class=\\\"popupText\\\">エイリアス:</td><td class=\\\"popupText\\\"><b>%s</b></td></tr>",escape_string(hst->alias));

<修正後>
   1979         printf("<tr><td class=\\\"popupText\\\">エイリアス:</td><td class=\\\"popupText\\\"><b>%s</b></td></tr>",hst->alias);

# make
# cp statusmap.cgi /usr/local/nagios/sbin/

 

修正の確認

きちんと修正された場合は、以下のようになる。(下図の赤枠部分)
 
図2:修正後のステータスマップ画面
図2:修正後のステータスマップ画面

 
文字化けは解消されたが、今回の対策を見れば、escape_string() 関数に問題があるのは明らかだ。
次回は、そのあたりを掘り下げてみたい。

 


Categories: Nagios


Leave a Reply