はじめに
本記事は「AWS EC2 × Zabbix監視基盤構築シリーズ」の第5回です。
以下の記事の続きとなります。
- 第1回:『【構築ログ①】AWS EC2 × Zabbix監視基盤|IAMユーザーでEC2構築~SSH接続まで』
https://qiita.com/AWS_show/items/827c25c17d1b99da08e0 - 第2回:『【構築ログ②】AWS EC2 × Zabbix監視基盤|Zabbix 6.0 をEC2に構築|ハマりポイントまとめ』
https://qiita.com/AWS_show/items/1d57f767a9a66835b398 - 第3回:『【構築ログ③】AWS EC2 × Zabbix監視基盤|トリガー発火~復旧までの監視検証』
https://qiita.com/AWS_show/items/fe7474a1a0f96c64a7f2 - 第4回:『【構築ログ④】AWS EC2 × Zabbix監視基盤|CloudWatch Logs経由でS3へログ長期保管構成を検証』
https://qiita.com/AWS_show/items/a4c9bbb38549d60bbca3
第5回では、Zabbixで異常が検知された際にメール通知を行う仕組みを構築します。
通知機能の実装には、AWSのマネージド通知サービスである Amazon SNS(Simple Notification Service) を使用し、Zabbixと連携してメール通知を実現します。
これにより、監視対象に異常が発生した場合に、リアルタイムでメールによるアラート通知を受け取ることが可能になります。
構成の再確認
EC2上にZabbix監視サーバーを構築し、CloudWatch LogsおよびS3でログを管理しています。
また、ZabbixのアラートをAmazon SNSと連携することで、異常発生時にメール通知を行う構成としています。
EC2はPublic Subnetに配置し、Internet Gatewayを経由してAWSマネージドサービスと通信します。
検証環境
本記事の検証は、以下の環境で実施しています。
| 項目 | 内容 |
|---|---|
| クラウド | AWS |
| リージョン | ap-northeast-1(東京) |
| サービス | EC2 |
| インスタンスタイプ | t3.micro |
| ネットワーク | VPC(デフォルトVPC) |
| OS | Ubuntu Server 22.04 LTS |
| Zabbix | 6.0 LTS(Server + Agent) |
| Webサーバ | Apache |
| DB | MariaDB |
| PHP | Ubuntu標準(Apache連携) |
| 通知サービス | Amazon SNS |
| 通知方式 | Email通知 |
SNSトピックを作成
タイプ: スタンダード
名前: zabbix-alert-topic(例)

下にスクロールして、[トピックの作成]をクリックします。
作成後、ARNが表示されます。
後ほど使用するので、メモしてください。
Emailサブスクリプション作成
Amazon SNS → トピック → zabbix-alert-topic
[サブスクリプションの作成]をクリックします。

トピックARN: (既に入力されている。されていなければ、先ほどメモしたARNを入力してください)
プロトコル: Eメール
エンドポイント: メールアドレス

下にスクロールして、[サブスクリプションの作成]をクリックします。
エンドポイントに入力したメールアドレス宛に確認メールが届くので、
[Confirm subscription]をクリックします。

EC2にSNS送信権限を付与
ZabbixからSNSを呼び出すためにIAMロールが必要です。
許可ポリシーの付与
以前作成した、EC2Role-ZabbixCWAgent ロールに AmazonSNSFullAccess を付与します。
IAM → ロール → EC2Role-ZabbixCWAgent → アクセス許可を追加 → ポリシーをアタッチ
検索欄に、AmazonSNSFullAccess を入力してください。
[アクセス許可を追加]をクリックしてください。

※(検証用のためAmazonSNSFullAccessを付与しています。本番では制限付き推奨です)
EC2にロールをアタッチ
EC2 → Instances → 対象インスタンスを選択 →
インスタンスの状態 → セキュリティ → IAMロールを変更

SNS送信テスト
ローカルPCのCMDからSSHでEC2に接続してください。
その後、以下のコマンドを入力します。
/usr/bin/aws sns publish \
--region ap-northeast-1 \
--topic-arn arn:aws:sns:ap-northeast-1:123456789012:zabbix-alert-topic \
--message "Zabbix Test Alert" \
--subject "Zabbix Alert Test"
実行結果
{
"MessageId": "c3574017-dabc-51dc-99e8-221a27aef32b"
}
MessageIdが返却され、SNSへの送信が成功しました。
また、指定したメールアドレスに通知メールが届くことを確認しました。

これで、EC2 → SNS → Emailという流れが確認できました。
ZabbixからSNSを呼び出すスクリプト作成
これから作成するスクリプトを使って、
Zabbix → スクリプト → SNS → Email
という流れを作ります。
sudo vi /usr/lib/zabbix/alertscripts/sns.sh
#!/bin/bash
TOPIC_ARN="arn:aws:sns:ap-northeast-1:123456789012:zabbix-alert-topic"
SUBJECT="$1"
MESSAGE="$2"
/usr/bin/aws sns publish \
--region ap-northeast-1 \
--topic-arn "$TOPIC_ARN" \
--subject "$SUBJECT" \
--message "$MESSAGE"
第1引数に件名、第2引数にメッセージを格納しています。
TOPIC_ARN には zabbix-alert-topicのARNを入力してください。
Zabbixのアラート内容をそのままAmazon SNSへ通知することができます。
ZabbixでMedia Type設定
全体の流れ
Zabbixがアラート時にsns.shを実行するための設定を行っていきます。
具体的な流れは以下の通りです。
Zabbix → Media Type(SNS) → sns.sh → SNS → Email
Zabbix UIでMedia Type画面を開く
Zabbix UIにログインしてください。
Media Typeを設定
名前: SNS(例)
タイプ: スクリプト
スクリプト名: sns.sh
スクリプトパラメータ: [追加]をクリックして2つ入力してください。
1つめ、{ALERT.SUBJECT}
2つめ、{ALERT.MESSAGE}

すべて入力を終えたら、画面下の[追加]をクリックしてください。
AdminユーザーにMediaを追加
Media Typeを作っただけでは通知されないので、ユーザーに紐づけます。
管理 → ユーザー → Admin → メディア → 追加

タイプ: SNS
送信先: 実際には使われません(SNSで送るため)何でもOKです
[追加]をクリックしてください。
これでZabbixが
sns.sh "{ALERT.SUBJECT}" "{ALERT.MESSAGE}"
を実行できるようになりました。
送信テスト
実行権限の付与をします。
sudo chmod 755 /usr/lib/zabbix/alertscripts/sns.sh
以下のコマンドで、作成したbashスクリプトでメールを送信します。
sudo -u zabbix /usr/lib/zabbix/alertscripts/sns.sh "Test Subject" "Test Message"
"Test Subject"はタイトルになります。
"Test Message"は本文になります。
以下の表示が出たので、メールが送信できています。
{
"MessageId": "95a58e40-af57-566a-b533-ec4ea1e7ac29"
}
Action設定
sns.sh "Test Subject" "Test Message"
ができることを確認しました。
次はTrigger発生時に、スクリプトを自動実行する設定を行っていきます。
Action設定画面へ
アクションの設定
名前: Send alert via SNS(例)
実行条件から[ラベル]をクリックします
以下のように入力してください。
タイプ: トリガーの深刻度
オペレータ: 以上
深刻度: 警告

[追加]をクリックします。
トリガーアクションの有効
設定 → アクション → トリガーアクション
ステータスを[無効]から[有効]に変更します。

実行内容の設定
実行内容 → 追加
ユーザーに送信の欄で[追加]: Admin
次のメディアのみ使用: SNS
メッセージのカスタマイズにチェックを入れる。
件名: {ALERT.SUBJECT}
メッセージ: {ALERT.MESSAGE}

[追加]をクリックします。

[追加]をクリックします。
動作テスト
CPUに負荷をかけて、アラートを出します。
stress --cpu 2
まとめ
今回の検証では、ZabbixとAmazon SNSを連携し、異常発生時にメール通知を行う仕組みを構築しました。Script Media Typeを使用することで、Zabbixのアラート内容をスクリプト経由でSNSへ送信できることを確認し、Zabbixの通知処理の仕組みを実践的に理解することができました。
CPU負荷を意図的に発生させてトリガーを発火させることで、監視・検知・通知の一連の流れを実際に確認することができました。
今回の検証を通して、ZabbixとAWSを連携した通知基盤の基本構成と、監視運用における通知機能の重要性を理解することができました。











