search
LoginSignup
3

More than 3 years have passed since last update.

posted at

updated at

Organization

ZabbixからAmazon SNSを使って通知を飛ばす

はじめに

Amazon Simple Notification Service(以下、SNSと記述します)は、とても柔軟で便利です。
Topicを設定し、サブスクリプション登録することで、Email通知、SMS通知、URLを叩いたり、SQSに投げたりと、柔軟に通知処理が構築できます。
今回は、ZabbixからSNSを呼べるように設定します。
なお、AWS側の詳しい手順は記載していませんので、ご了承ください。

Zabbix設定

ZabbixのWeb画面にて設定

  • 管理 > メディアタイプ > メディアタイプの作成
項目名 設定値
名前 SNS-Alert
タイプ スクリプト
スクリプト名 sns_send.sh
スクリプトパラメータ {ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
  • 設定 > ユーザー  > (ユーザを選択) > メディア > 追加
項目名 設定値
タイプ SNS-Alert
送信先 arn:aws:sns:ap-northeast-1:xxxxxxx:myTopic
有効な時間帯 お好みで
指定した深刻度のときに使用 お好みで

ここで指定した送信先は、{ALERT.SENDTO}に渡るようです。

シェルスクリプトの配置

zabbixユーザーで、awsコマンドを使えるようにしておきます。
インストール手順は、AWSのサイトを参考にしてください。
IAMは、SNS publish権限が必要です。

以下のシェルは、後述するサイトを参考にさせていただきました。

/usr/lib/zabbix/alertscripts/sns_send.sh
#!/bin/sh

TOPIC_ARN=$1
SUBJECT=$2
MESSAGE=$3

echo "`date` $TOPIC_ARN $SUBJECT" >> /tmp/zabbix-sns.log

if [ "$SUBJECT" = "" -o "$TOPIC_ARN" = "" ]; then
  echo "usage: $0 {ARN SUBJECT MESSAGE}"
  exit 1
fi

if [ "$MESSAGE" = "" ]; then
  MESSAGE=$SUBJECT
fi

aws sns publish --topic-arn $TOPIC_ARN --subject "$SUBJECT" --message "$MESSAGE"

シェルを作成したら、シェルの実行権限付与をお忘れなく。
AWS側の手順は割愛しますが、AWS側でサブスクリプション登録をしてから、試しにシェルを実行してみます。

./sns_send.sh arn:aws:sns:ap-northeast-1:xxxxxxx:myTopic test-subject test-message
{
    "MessageId": "xxxxxxx-xxxx-xxx-xxx-xxxxxxxxxxxxx"
}

これで通知が飛べばOKです。
快適な通知ライフを!

注意事項

実際に設定してみたのですが、うまく動かず調べました。
いくつか注意点を載せておきますので、参考にしてください。

スクリプトの配置場所について

zabbix_server.confで設定しているAlertScriptsPathのパスに、シェルを配置しているかどうか確認してください。
Zabbixのスクリプト名に、sns_send.shと設定していますが、絶対パスではNGのようです。

/usr/local/etc/zabbix_server.conf
User=zabbix
SSLKeyLocation=/usr/local/share/zabbix/ssl/keys
SSLCertLocation=/usr/local/share/zabbix/ssl/certs
PidFile=/tmp/zabbix_server.pid
LogType=console
LoadModulePath=/usr/lib/zabbix/modules
ExternalScripts=/usr/local/share/zabbix/externalscripts
DBUser=zabbix
DBPort=3306
DBPassword=my_password
DBName=zabbix
DBHost=zabbix.db
AlertScriptsPath=/usr/local/share/zabbix/alertscripts

上記の場合は、
誤) /usr/lib/zabbix/alertscripts/sns_send.sh
正) /usr/local/share/zabbix/alertscripts/sns_send.sh
となります。

awsコマンドが失敗する

プロキシ配下で動かす場合や、認証情報がうまく取れていない場合、シェルに工夫が必要です。

# 必要な変数の設定
export HTTP_PROXY=http://xxx.xxx.xxx.xx:yyyy
export HTTPS_PROXY=http://xxx.xxx.xxx.xx:yyyy
export AWS_SHARED_CREDENTIALS_FILE=/home/zabbix/.aws/credentials
export AWS_CONFIG_FILE=/home/zabbix/.aws/config

# 認証情報のチェック
/home/zabbix/.local/bin/aws configure list >> /tmp/zabbix-sns.log

# sns publish
/home/zabbix/.local/bin/aws sns publish --topic-arn $TOPIC_ARN --subject "$SUBJECT" --message "$MESSAGE"

# exit status
echo "`echo $?`" >> /tmp/zabbix-sns.log

参考記事

zabbixのメディアタイプをスクリプトにしてAWSのSNSを使う
https://hacknote.jp/archives/6587/

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
3