障害通知のカスタマイズ

Zabbixは障害を検知したときの通知として、以下の方法を選択することができます。

EメールやSMS、Jabberチャットメッセージはそれぞれの方法でテキストメッセージを送信します。これらはZabbixサーバの標準機能として搭載されているため、Webインターフェースから設定を行うのみで利用できます。

Zabbixエージェント上でコマンド実行する機能はリモートコマンドと呼び、Webインタフェースで設定したコマンド文字列がZabbixサーバからZabbixエージェントに渡され、Zabbixエージェントがコマンド実行します。

障害発生時にZabbixサーバ上でコマンドを実行する機能をアラートスクリプトと呼び、Zabbixサーバから指定した情報を引数に渡してOS上の任意のコマンドを実行することができます。独自に作成したスクリプトも実行できるため、障害発生時に様々なことを実行させることができます。ここではアラートスクリプトを利用した通知方法の例としていくつかのスクリプトを紹介します。

日本語アラートメールの送信方法

ZabbixサーバはアラーとメールをUTF-8で送信します。最近のメールクライアントではUTF-8のメールも問題なく扱えますが、古い携帯電話などはUTF-8のメールを適切に表示できずに文字化けしてしまう場合があります。

また、ZabbixサーバはSMTP Auth認証に対応していないため、標準のメール送信機能では認証が必要なメールサーバを利用することができません。

ここでは、ZABBIXのカスタムスクリプト機能を利用して、スクリプトで適切な情報の付加とエンコード処理を行ってメールを送信したり、SNMP Auth認証に対応するためのスクリプトを紹介します。

なお、スクリプトを利用した場合はZabbixサーバがメール送信のたびに外部コマンドとしてスクリプトを呼び出して実行するため、標準のメール送信機能よりは実行に負荷がかかります。特に文字化けなどの問題がない場合はZabbixサーバ標準のメール送信機能を利用されることを推奨します。

Zabbixサーバ以外のサーバ上で動作しているSMTPサーバを利用する場合 (認証が必要なSMTPサーバにも対応)

スクリプトファイルのダウンロードと設置

  • ZABBIX-JPがgithub上に公開している通知用のプラグインのURL https://github.com/zabbix-jp/plugins にアクセスして、右上のダウンロードボタンをクリックしてダウンロードします。Windowsであれば「Download ZIP」というボタンになっていてクリックすると「plugins-master.zip」というファイル名でダウンロードできると思います。
  • /tmp/ などの任意のディレクトリにファイルを解凍します。
  •  # cd /tmp/
     # unzip plugins-master.zip
    
  • ZABBIXサーバにスクリプトを置くディレクトリを作成します。
  •  # mkdir /var/lib/zabbix
    
  • 解凍したファイル内の plugins-master/notification/sendmessage-php/ を /var/lib/zabbix/ にコピーします。
  •  # cp -r plugins-master/notification/sendmessage-php/ /var/lib/zabbix/
     # cd /var/lib/zabbix/
    
  • 実行可能なパーミッションを付与します
  •  # chmod 755 /var/lib/zabbix/sendmessage_smtp_php/sendmessage_smtp_php.sh
    
  • /var/lib/zabbix/sendmessage_smtp_php/sendmessage_smtp_php.sh に設定値を書き込みます
  • 設定項目設定値
    $MAIL_FROM = "zabbix@localhost";「zabbix@localhost」の箇所に送信元にするメールアドレスを記述
    $MAIL_FROMNAME = "Zabbix 障害通知";「Zabbix 障害通知」の箇所に送信元の表示名を記述
    $MAIL_SMTP_HOST = 'smtp.example.com:25';「smtp.example.com:25」の箇所に「SMTPサーバ:ポート」の形式で記述
    $MAIL_SMTP_USER = 'XXXXXXXX';XXXXXXXX の箇所にユーザ名を記述
    $MAIL_SMTP_PASS = 'XXXXXXXX';XXXXXXXX の箇所にパスワードを記述

カスタムスクリプトの登録

設置した sendmessage_smtp_php/sendmessage_smtp_php.sh をカスタムスクリプトに登録します

  • [管理] → [メディアタイプ]をクリックします
  • 右上の「メディアタイプの作成」をクリックします
  • 次のように設定し、「保存」をクリックします
  • 設定項目設定値
    Descriptionsendmessage_smtp_php.sh
    TypeScript
    Script namesendmessage_smtp_php/sendmessage_smtp_php.sh

ユーザのメディア設定に登録

先に登録したカスタムスクリプトをユーザのMediaに登録します。

  • [管理] → [ユーザ]をクリックします
  • リストからカスタムスクリプトを登録したいユーザをクリックします
  • Media設定の「追加」をクリックします
  • 次のように設定し、「追加」をクリックします
  • 設定項目設定値
    Typesendmessage_smtp_php.sh
    Send to送信先メールアドレス
  • 「保存」をクリックします

Zabbixサーバ上のSMTPサーバを利用する場合

スクリプトファイルのダウンロードと設置

  • ダウンロードのページから、php/perl版のいずれかのsendmessage_XXX.sh.gzをダウンロードします
  • ZABBIXサーバにスクリプトを置くディレクトリを作成します。
  •  # mkdir /var/lib/zabbix
    
  • ダウンロードしたファイルを作成したディレクトリに置き、解凍します
  •  # gzip -d /var/lib/zabbix/sendmessage_XXX.sh.gz
    
  • 実行可能なパーミッションを付与します
  •  # chmod 755 /var/lib/zabbix/sendmessage_XXX.sh
    

カスタムスクリプトの登録

設置したsendmessage_XXX.shをカスタムスクリプトに登録します

  • [Administration] → [Media Types]をクリックします
  • 右上の「Create Media Type」をクリックします
  • 次のように設定し、「Save」をクリックします
  • 設定項目設定値
    Descriptionsendmessage_XXX.sh
    TypeScript
    Script namesendmessage_XXX.sh

ユーザのメディア設定に登録

先に登録したカスタムスクリプトをユーザのMediaに登録します。

  • [Administration] → [Users]をクリックします
  • リストからカスタムスクリプトを登録したいユーザをクリックします
  • Media設定の「Add」をクリックします
  • 次のように設定し、「Add」をクリックします
  • 設定項目設定値
    Typesendmessage_XXX.sh
    Send to送信先メールアドレス
  • 「Save」をクリックします