Zabbix3.xからSMTPでAmazonSESを通してアラートメールを送信する設定を行う。
Zabbix3.xになってメディアタイプにスクリプトパラメータを自分で記述するようになっていて、解決に時間がかかった。
切り分け方法も含めて備忘録として残しておく。
前提
- EC2 AmazonLinuxにZabbix-Serverを構築
- Zabbix 3.0.4 を使用。
- メールはSMTPでAmazonSES(Oregonリージョン)から送信
AmazonSESの準備
- SES用のIAMユーザの作成
- IAMユーザにポリシーのアタッチ
- アクセスキーとシークレットアクセスキーのダウンロード
- メールアドレスの認証
マネジメントコンソールのSES -> SMTP Setting -> Create My SMTP CredentialからIAMユーザの作成を行うと自動で必要なポリシーまで付与してくれる。
Zabbixサーバ側設定
http://www.zabbix.jp/node/1441
基本的にここの「Zabbixサーバ以外のサーバ上で動作しているSMTPサーバを利用する場合」に沿って進めればよい。
スクリプトを置く場所は、zabbix_server.confを見ること。
AmazonSESを利用する場合は以下のように記載する。
$MAIL_FROM = "zabbix@localhost"; 「zabbix@localhost」の箇所にSESで認証済みの送信元にするメールアドレスを記述する
$MAIL_SMTP_HOST = 'smtp.example.com:25'; 「smtp.example.com:25」の箇所に「SESのServerName:ポート」の形式で記述する
$MAIL_SMTP_USER = 'XXXXXXXX'; XXXXXXXX の箇所にIAMのアクセスキーを記述する
$MAIL_SMTP_PASS = 'XXXXXXXX'; XXXXXXXX の箇所にIAMのシークレットアクセスキーを記述する
この時点で、SESとの疎通を確認できる。
以下のコマンドで実施できるが、送信先メールアドレスはSESの認証済みであるアドレスを入力する。
./sendmessage_smtp_php.sh '送信先メールアドレス' '件名' '本文'
successとでれば成功
Zabbixのメディアタイプ設定
ZabbixWebコンソールで操作する。
管理 -> メディアタイプ から作成する。
名前: 名前は任意
タイプ: Script
スクリプト名:zabbix_server.confにあるalertsctiptsディレクトリからの相対パスで書く。
スクリプトパラメータ: 以下の3行を追加する。
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
Zabbixのアクション設定
先ほど作成したメディアタイプを選択する。
トリガーに関連付ける設定を行う。
この設定をしても上手く動かない場合は・・・
思いつく限りで切り分け方法をかく
- サーバ上からsendmessage_smtp_php.shを実行してもSESまでいかない!
- IAMの権限や、シークレットキー、シークレットアクセスキーが正しいかどうか確認。
- SESのservernameへ名前解決ができるか確認
- iptablesの確認 (dns,mailのポート)
- アラートを出してもZabbix側が上手く動かない!
-
監視データ -> トリガーにあるか?
- ある
- 監視データ -> イベントを確認
- ない
- トリガー設定を見直す
- ある
-
監視データ -> イベントを確認
- アクションに数字があるか
- ある
- レポート -> アクションログを確認
- ステータスがどうなっているか確認
- ない
- アクション設定を確認
- ある
- アクションに数字があるか
-
レポート -> アクションログを確認
- ステータスを確認
- 送信済
- メディアタイプのスクリプトパラメータを確認
- 未送信
- ×印を確認する。
- メディアタイプのスクリプト名を確認
- 送信済
- ステータスを確認
-
それでもダメなら
- ユーザグループ、ユーザにホストグループ、ホストの権限があるか確認する
Admin運用せず、ユーザグループを細かく割り当てている場合は思ったように送信されないことはありがち。
現象としてアクションログをみてちゃんと動いているように見えるけれどメールが送信されないときは大体これ。
ユーザグループや、ユーザの権限(ホストグループやホストの閲覧権限)は正しく設定すること。
あまり上手くまとめられませんでしたが、以上備忘録になります。