はじめに
AWSのEventBridgeで、外部Saasからの通知を受け取れると記載があったので、試してみました。
Meckerel初めて使うので、お作法は良く分かっていません。。。
事前準備
EC2インスタンスをMackerelの監視対象に
- EC2インスタンスを適当な設定で構築
- OSはAmazonLinux 2
- Public IPを振る(NAT Gateway等があれば不要)
- EC2にログインし、Mackerelエージェントをインストール、APIKEYも設定しておく
curl -fsSL https://mackerel.io/file/script/amznlinux/setup-all-yum-v2.sh | MACKEREL_APIKEY='AABBCCDD' sh
※APIKEYはお使いの環境によって異なるので注意
*************************************
Done! Welcome to Mackerel!
*************************************
※上記が表示されたらOK
MackerelとEventBridgeの連携
Mackerelの公式の手順に沿って設定すれば問題ありません。一応、実施した内容を記載していきます。
Amazon EventBridgeにアラートを通知する
通知Channelの作成
MackerelのChannelメニューから、EventBridgeを選択して追加します。
イベント名は任意でOKです。(AWSコンソール側で表示される名前になります。)
監視対象の追加
続いて、Monitorsメニューから、ホスト死活監視
を追加。
細かい設定は分からなかったので、全てデフォルトのままです。
AWSコンソールで連携設定をする
AWSコンソールのEventBridgeの画面を開くと、先ほど追加したイベントソースが表示されています。イベントバスと関連付ける
を実施してください。
関連付けを行うと、ステータスがアクティブ
に変更されます。
アラート通知時に起動されるLambdaを作成
今回はテスト用なので、単純にログ出力するだけのLambda FunctionEventBridgeConsoleLog
を定義しました。
import json
def lambda_handler(event, context):
print('A alarm was notified from Mackerel service.')
print(event)
return 'OK'
Event Bridgeにルールを作成
EventBridgeに新規でルールを作成し、上記で作成したLambda Functionをターゲットに設定します。詳細はキャプチャを参照してください。
ルール MackerelMonitoringRule を作成しました
と表示されれば完了です。
アラート通知→EventBridge→Lambda起動
では、実際にアラートを発生させてみます。
一番最初に構築したEC2インスタンスを、AWSコンソールからStopさせます。
しばらく放置すると、Mackerel側でアラートが発生しました。
CloudWatchで作成したルールMackerelMonitoringRule
が呼ばれているか確認します。
最後に、CloudWatch LogsでLambdaのログを確認します。
print(event)
で出力したイベント情報が確認できればOKです。
この情報を元に、EC2の再起動や入れ替えなどを自動化できそうですね。
{
"version": "0",
"id": "ee6c34a9-ed85-e47d-e510-a355e2d9160f",
"detail-type": "alert",
"source": "aws.partner/mackerel.io/ys-dev-web/MackerelMonitoring",
"account": "xxxxxxxx",
"time": "2020-02-10T13:05:04Z",
"region": "us-west-2",
"resources": [],
"detail": {
"orgName": "ys-dev-web",
"alert": {
"createdAt": 1581339903296,
"isOpen": "True",
"monitorName": "connectivity",
"trigger": "monitor",
"closedAt": "None",
"url": "https://mackerel.io/orgs/ys-dev-web/alerts/xxxxxxx",
"openedAt": 1581339903,
"status": "critical"
},
"host": {
"name": "ip-10-0-0-102.us-west-2.compute.internal",
"memo": "",
"isRetired": "False",
"id": "xxxxxx",
"url": "https://mackerel.io/orgs/ys-dev-web/hosts/xxxxxxx",
"status": "working",
"roles": []
},
"event": "alert",
"user": "None"
}
}
最後に
Mackerel自体が良く分かっていないので、手順飛んでいたらすみません。。
ただ、慣れてきたらSaas監視ツールとの連携が便利になるのは間違いなさそうです。
次回は、自作のアプリケーションからカスタムイベントを登録してみたいと思います!