Nagiosを日本語で使ってみる その2

Nagios+日本語」で検索して来ている方がそこそこいるみたいですので、ちょっとだけ続きを。
正直、私がNagiosの構築をしてから既に10ヶ月ほど経っているので、そのとき残したメモと勘で書きます。


前回のエントリでNagios本体の日本語化はおそらくできているかと思いますが、実際に運用するとなると
いくつかの問題が出てきます。


ひとつは警告メールで文字化けが発生すること。
サービスのエイリアス等で日本語を使用していたり、携帯でメールを受信する場合には要注意です。
MTAの設定だったりで回避できるかも知れませんが、変更できなかった場合はnkfを使って文字コードを変換
すると幸せになれるかもしれません。
commands.cfgを以下のように変更します。

# 'notify-service-by-email' command definition
define command{
        command_name    notify-service-by-email
        command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDES
C$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICE
OUTPUT$" | /bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEM
AIL$
        }

# 'notify-service-by-email' command definition
define command{
        command_name    notify-service-by-email
        command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDES
C$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICE
OUTPUT$" | nkf -s | /bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEM
AIL$
        }

これでもうまくいかない場合は、もう自作のスクリプトを作成してそれ経由した方が簡単です。

#!/usr/bin/php

<?

$to       = $argv[1];
$subject  = $argv[2];
$body     = $argv[3];
$headers  = "FROM: nagios@xxxxxxx\n";

// 文字コード変換
$to      = mb_convert_encoding($to , "ISO-2022-JP" , "UTF-8");
$subject = mb_convert_encoding($subject , "ISO-2022-JP" , "UTF-8");
$body    = mb_convert_encoding($body , "ISO-2022-JP" , "UTF-8");
$body    = str_replace("<br/>","\n",$body); 

echo "to : " . $to . "\n";
echo "subject : " . $subject . "\n";
echo "body : " . $body . "\n";
echo "headers : " . $headers . "\n";

// メール送信
$result = mb_send_mail($to, $subject,$body,$headers);

// エラーの場合はログに出力
if(!$result) {
	echo "Mail Send Failed \n to: " . $to . "\n subject: " . $subject . "\n body: " . $body . "\n header: " . $header //>> /usr/local/nagios/share/nagiosmail.log
}

?>

こんな感じの適当なスクリプトで大丈夫かと。(本当に適当なので動作保障はしません><)


commands.cfgはこんな感じです。

define command{
	command_name	notify-service-by-email
	command_line	/usr/local/bin/php /usr/local/nagios/mail.php $CONTACTEMAIL$ "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" "***** Nagios *****<br/><br/>Notification Type: $NOTIFICATIONTYPE$<br/><br/>Service: $SERVICEDESC$<br/>Host: $HOSTALIAS$<br/>Address: $HOSTADDRESS$<br/>State: $SERVICESTATE$<br/><br/>Date/Time: $LONGDATETIME$<br/><br/>Additional Info:<br/><br/>$SERVICEOUTPUT$"
	}

おそらくこれで、メールの文字化けは解決すると思うので次回はpnp4nagiosについて。
これも日本語でやろうと思うといろいろ問題が・・・。