タダです.
本稼働しているサーバーの中にアクセスが多くないものの時折 CPU が 100% と高負荷になって突発的にサーバーがダウンしてしまう事象があり,その都度サーバーを再起動することが何度かありました.アクションが決まっているなら Mackerel と Amazon EventBridge を使ってリカバリアクションを仕組み化したいと思って連携設定を試したので,この記事で設定をまとめていきます.
Mackerel と EventBridge
Mackerel は EventBridge と連携することができます.監視している対象リソースの情報を JSON 形式で EventBridge へ通知してその内容をフックに Lambda を起動したりすることができます.今回もこの連携機能を使った設定をしていきます.Mackerel でのアラート検知 -> EventBridge -> Lambda でアラートが発生した対象サーバーにリカバリ処理をかけるといった流れです.この記事では Mackerel と EventBridge の連携および EventBrdige から Lambda を呼び出す設定部分で自分が少してこずったのでそこに重点を置いて記事を書きます.
Mackerel と EventBridge へのアラート通知設定
Mackerel と EventBridge へのアラート通知設定をしていきます.
1. EventBridge で情報を確認
まずは,EventBridge から イベント > パートナーイベントソース
より Mackerel を検索すると下記のような画面が出てきます.設定ボタンから画面が遷移し,Mackerel で必要な設定を確認します.
2. Mackerel のアラート設定
Mackerel の通知チャンネル追加から Amazon EventBridge を選び EventBridge の画面にでていたアカウント番号やチャンネル名をつけていきます.赤運tの番号とイベント名,リージョンは一度設定すると変更ができないので注意が必要です.
EventBridge の画面に戻り,イベントバスと関連付ける画面で必要なアクセス許可を選択して関連付けるボタンを押します.すると,下記の画像のようにアクティブステータスになります.これで Mackerel のアラートイベント以降のアクションを設定できるところまで来ました.
3. EventBridge でアクションを定義
そして,EventBridge から Lambda を呼び出す部分を定義していきます.イベント > ルール
のページに移動し,イベントバスのプルダウンを選ぶと先ほど関連づけたアラートのイベントバスが表示されます.ここで設定したいアラートのイベントを選んでルールを作成
から作っていきます.
イベント名や説明は任意のものをつけ,パターンを定義
のセクションでイベントパターン>サービスごとの事前定義パターン>サービスパートナー>Mackerel
を選択します.
次に,イベントバスで設定した Mackerel のイベントバスを選択します.
そして,アラート後に呼び出したい Lambda を指定して保存します.
これで対象のアラートが飛べば,Mackerel -> EventBridge -> Lambda が呼び出されることになります.下記の画像は一例として Mackerel のアラート発生画面から EventBridge が呼び出されたこと,EventBridge 側は CloudWatch のメトリクスで呼び出されたのを確認した画面です.
まとめ
アラート発生時の定型的な対応を Mackerel と EventBridge ,Lambda によって仕組み化することができました.自動で復旧のアクションをとることができるので,アラートの根本問題の対応等に集中していけるなと感じます.今回使ってみて便利だなと感じたので他にも適用箇所があれば積極的に検討していきたいです!