0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【構築ログ⑤】AWS EC2 × Zabbix監視基盤|AWS SES を用いたメール通知基盤を構築

0
Posted at

はじめに

本記事は「AWS EC2 × Zabbix監視基盤構築シリーズ」の第5回です。

以下の記事の続きとなります。

第5回では、Zabbixで異常が検知された際にメール通知を行う仕組みを構築します。

通知機能の実装には、AWSのマネージド通知サービスである Amazon SNS(Simple Notification Service) を使用し、Zabbixと連携してメール通知を実現します。

これにより、監視対象に異常が発生した場合に、リアルタイムでメールによるアラート通知を受け取ることが可能になります。

構成の再確認

EC2上にZabbix監視サーバーを構築し、CloudWatch LogsおよびS3でログを管理しています。
また、ZabbixのアラートをAmazon SNSと連携することで、異常発生時にメール通知を行う構成としています。
EC2はPublic Subnetに配置し、Internet Gatewayを経由してAWSマネージドサービスと通信します。

image.png

検証環境

本記事の検証は、以下の環境で実施しています。

項目 内容
クラウド 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トピックを作成

AWSコンソール → SNS → 次のステップ
image.png

タイプ: スタンダード
名前: zabbix-alert-topic(例)
image.png

下にスクロールして、[トピックの作成]をクリックします。

作成後、ARNが表示されます。
後ほど使用するので、メモしてください。

Emailサブスクリプション作成

Amazon SNS → トピック → zabbix-alert-topic
[サブスクリプションの作成]をクリックします。
スクリーンショット 2026-02-17 133017.png

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

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

以下の表示が出たら成功です。
image.png

ステータスが確認済みになります。
image.png

EC2にSNS送信権限を付与

ZabbixからSNSを呼び出すためにIAMロールが必要です。

許可ポリシーの付与

以前作成した、EC2Role-ZabbixCWAgent ロールに AmazonSNSFullAccess を付与します。
IAM → ロール → EC2Role-ZabbixCWAgent → アクセス許可を追加 → ポリシーをアタッチ
検索欄に、AmazonSNSFullAccess を入力してください。

[アクセス許可を追加]をクリックしてください。
image.png
※(検証用のためAmazonSNSFullAccessを付与しています。本番では制限付き推奨です)

EC2にロールをアタッチ

EC2 → Instances → 対象インスタンスを選択 →
インスタンスの状態 → セキュリティ → IAMロールを変更
image.png

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への送信が成功しました。
また、指定したメールアドレスに通知メールが届くことを確認しました。
image.png

これで、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にログインしてください。

管理 → メディアタイプ
image.png

[右上のメディアタイプの作成]をクリックします。
image.png

Media Typeを設定

名前: SNS(例)
タイプ: スクリプト
スクリプト名: sns.sh
スクリプトパラメータ: [追加]をクリックして2つ入力してください。
1つめ、{ALERT.SUBJECT}
2つめ、{ALERT.MESSAGE}
image.png

すべて入力を終えたら、画面下の[追加]をクリックしてください。

AdminユーザーにMediaを追加

Media Typeを作っただけでは通知されないので、ユーザーに紐づけます。
管理 → ユーザー → Admin → メディア → 追加
image.png

タイプ: SNS
送信先: 実際には使われません(SNSで送るため)何でもOKです
[追加]をクリックしてください。

image.png

これで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"
}

メールが受信できていました。
image.png

Action設定

sns.sh "Test Subject" "Test Message"
ができることを確認しました。

次はTrigger発生時に、スクリプトを自動実行する設定を行っていきます。

Action設定画面へ

設定 → アクション → アクションの作成
image.png

右上のアクションの作成
image.png

アクションの設定

名前: Send alert via SNS(例)
実行条件から[ラベル]をクリックします
以下のように入力してください。

タイプ: トリガーの深刻度
オペレータ: 以上
深刻度: 警告
image.png
[追加]をクリックします。

トリガーアクションの有効

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

実行内容の設定

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

動作テスト

CPUに負荷をかけて、アラートを出します。

stress --cpu 2

アラートが出ました。
image.png

メールが届きました。
image.png

まとめ

今回の検証では、ZabbixとAmazon SNSを連携し、異常発生時にメール通知を行う仕組みを構築しました。Script Media Typeを使用することで、Zabbixのアラート内容をスクリプト経由でSNSへ送信できることを確認し、Zabbixの通知処理の仕組みを実践的に理解することができました。

CPU負荷を意図的に発生させてトリガーを発火させることで、監視・検知・通知の一連の流れを実際に確認することができました。

今回の検証を通して、ZabbixとAWSを連携した通知基盤の基本構成と、監視運用における通知機能の重要性を理解することができました。

0
1
0

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
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?