継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

Mackerel と Amazon EventBridge を連携してアラート後のリカバリアクションを追加する

タダです.

本稼働しているサーバーの中にアクセスが多くないものの時折 CPU が 100% と高負荷になって突発的にサーバーがダウンしてしまう事象があり,その都度サーバーを再起動することが何度かありました.アクションが決まっているなら Mackerel と Amazon EventBridge を使ってリカバリアクションを仕組み化したいと思って連携設定を試したので,この記事で設定をまとめていきます.

Mackerel と EventBridge

Mackerel は EventBridge と連携することができます.監視している対象リソースの情報を JSON 形式で EventBridge へ通知してその内容をフックに Lambda を起動したりすることができます.今回もこの連携機能を使った設定をしていきます.Mackerel でのアラート検知 -> EventBridge -> Lambda でアラートが発生した対象サーバーにリカバリ処理をかけるといった流れです.この記事では Mackerel と EventBridge の連携および EventBrdige から Lambda を呼び出す設定部分で自分が少してこずったのでそこに重点を置いて記事を書きます.

mackerel.io

Mackerel と EventBridge へのアラート通知設定

Mackerel と EventBridge へのアラート通知設定をしていきます.

1. EventBridge で情報を確認

まずは,EventBridge から イベント > パートナーイベントソースより Mackerel を検索すると下記のような画面が出てきます.設定ボタンから画面が遷移し,Mackerel で必要な設定を確認します.

f:id:sadayoshi_tada:20210406002955p:plain f:id:sadayoshi_tada:20210406003011p:plain

2. Mackerel のアラート設定

Mackerel の通知チャンネル追加から Amazon EventBridge を選び EventBridge の画面にでていたアカウント番号やチャンネル名をつけていきます.赤運tの番号とイベント名,リージョンは一度設定すると変更ができないので注意が必要です.

f:id:sadayoshi_tada:20210406003830p:plain f:id:sadayoshi_tada:20210406003958p:plain

EventBridge の画面に戻り,イベントバスと関連付ける画面で必要なアクセス許可を選択して関連付けるボタンを押します.すると,下記の画像のようにアクティブステータスになります.これで Mackerel のアラートイベント以降のアクションを設定できるところまで来ました.

f:id:sadayoshi_tada:20210406005542p:plain f:id:sadayoshi_tada:20210406004430p:plain

3. EventBridge でアクションを定義

そして,EventBridge から Lambda を呼び出す部分を定義していきます.イベント > ルールのページに移動し,イベントバスのプルダウンを選ぶと先ほど関連づけたアラートのイベントバスが表示されます.ここで設定したいアラートのイベントを選んでルールを作成から作っていきます.

f:id:sadayoshi_tada:20210406010027p:plain

イベント名や説明は任意のものをつけ,パターンを定義のセクションでイベントパターン>サービスごとの事前定義パターン>サービスパートナー>Mackerelを選択します.

f:id:sadayoshi_tada:20210406010358p:plain

次に,イベントバスで設定した Mackerel のイベントバスを選択します.

f:id:sadayoshi_tada:20210406011324p:plain

そして,アラート後に呼び出したい Lambda を指定して保存します.

f:id:sadayoshi_tada:20210406011210p:plain

これで対象のアラートが飛べば,Mackerel -> EventBridge -> Lambda が呼び出されることになります.下記の画像は一例として Mackerel のアラート発生画面から EventBridge が呼び出されたこと,EventBridge 側は CloudWatch のメトリクスで呼び出されたのを確認した画面です.

f:id:sadayoshi_tada:20210406011803p:plain f:id:sadayoshi_tada:20210406011642p:plain

まとめ

アラート発生時の定型的な対応を Mackerel と EventBridge ,Lambda によって仕組み化することができました.自動で復旧のアクションをとることができるので,アラートの根本問題の対応等に集中していけるなと感じます.今回使ってみて便利だなと感じたので他にも適用箇所があれば積極的に検討していきたいです!