はじめに

こんにちは!エクネスの24卒入社の新卒エンジニア、藤嶌です!
現在、フードロス事業「ロスヘル」のシステムの設計・開発・運用を担当しています。

今回は、AWS CloudWatch Alarmで検知したメトリクスをSlackに自動通知する仕組みを構築してみたので、その手順を備忘録としてまとめました。


AWSの監視を使っていて、

・「アラームが発報されても気づくのが遅れる…」
・「メール通知だと見逃しやすい…」

といった悩みを持っている方には、少しでも参考になればうれしいです。

AWS Chatbotから「Amazon Q Developer in chat applications」へ名称変更されたことで、少し戸惑った方もいるかもしれません。
初歩的な内容かもしれませんが、同じように気になっている方の助けになれば幸いです。

全体アーキテクチャのイメージ



上記のアーキテクチャ図は、SlackとAWSを連携させた構成を示しています。
CloudWatch Logsで設定したメトリクスをCloudWatch Alarmで検知し、SNSトピックを経由してSlackへ通知する仕組みを構築しています。

それでは、この構成をもとに実装していきます!

実装

事前準備

今回の構成を実装する前提として、以下の環境が整っていることを想定しています。

・CloudWatch Logsにアプリケーションやシステムのログが出力されていること
・通知を受け取るSlackワークスペースとチャンネルが準備されていること

これらを前提に、次のステップではCloudWatch Logsのメトリクス設定から進めていきます。

メトリクスフィルターの作成

①ロググループの選択

事前にCloudWatch Logsに出力されている対象のロググループを選択します。
メトリクスフィルターは、ここで選んだロググループに紐づけられます。

②メトリクスフィルターの作成

メトリクスフィルターの作成」をクリックします。

③フィルターパターンの定義

検知したいログを抽出するためのフィルターパターンを定義します。
今回は、ログ内に“Warning:”を含む行を検知対象とするため、以下のように設定します。


④メトリクスの設定

検知したログをメトリクスとして集計するための設定を行います。

  • メトリクス名前空間(例:test-metrics-name
  • メトリクス名(例:test-metrics
  • メトリクス値(通常は「1」固定)
  • デフォルト値(通常は「0」固定)

⑤確認と作成

設定内容を確認し、問題がなければ「メトリクスフィルター作成」を押下します。
メトリクスフィルターが作成されると、CloudWatchメトリクスに新しいメトリクスが追加され、アラームの設定が可能になります。

SNSトピックの作成とAmazon Q Developer in chat applicationsの連携

①Simple Notification Service(SNS)トピックの作成

AWS マネジメントコンソールでSimple Notification Service(SNS)を開き、「トピックの作成」を選択します。

②トピック名の入力

任意のトピック名(例:test-sns)を入力し、必要に応じてアクセス許可などを設定し、「トピックの作成」をクリックすると作成されます。

③Amazon Q Developer in chat applicationsの設定開始

AWS マネジメントコンソールでAmazon Q Developer in chat applications(旧称: AWS Chatbot)を選択します。

④チャットクライアントの選択

チャットクライアントで「Slack」を選択し、「クライアントを設定」をクリックします。

⑤権限リクエストの許可

「Amazon Q Developerが○○ワークスペースにアクセスする権限をリクエストしています」と表示されるので、「許可する」をクリックします。

⑥設定済みクライアントの選択

許可した Slack ワークスペースが「設定済みクライアント」に表示されるので、該当ワークスペースを選択します。

⑦新しいチャンネルの設定

新しいチャンネルを設定」をクリックします。

⑧ チャンネルの指定(プライベートチャンネル)

設定したいチャンネルのIDを設定します。
※今回はプライベートチャンネルで設定します。

チャンネルIDの取得方法

■ブラウザの場合
1.Slack の対象チャンネルを開きます。
2.ブラウザのアドレスバーに表示される URL を確認します。
3.下記URLの「CXXXXXXX」の部分がチャンネルIDになります。

https://app.slack.com/client/ワークスペースID/チャンネルID
https://app.slack.com/client/TXXXXXXX/CXXXXXXX

■PCアプリの場合
1.対象チャンネル名を右クリック
2.チャンネル詳細を表示するをクリック
3.チャンネル情報タブの下部にチャンネルIDが表示されています。

また、「チャンネル名を右クリック→コピー→リンクをコピー」からもブラウザの場合同様「CXXXXXXX」を取得可能です。

 

⑨ロール名の入力

Amazon Q DeveloperがSNSにアクセスできるよう、IAMロールを作成します。

⑩SNSトピックの設定(SNS→Amazon Q Developer in chat applicationsの設定

①~②で作成したSNSトピックを設定します。

⑪設定の完了

すべての項目を入力・設定後、「設定」 ボタンをクリックします。

CloudWatch Alarmの設定

①アラームの作成

AWSマネジメントコンソールでCloudWatchを開き、アラームの作成を選択してください。

②メトリクスの選択

カスタム名前空間」を選択し、先ほど作成した名前空間(例:test-metrics-name)を開き、メトリクス名(例:test-metrics)を選択します。

③アラーム条件の設定

アラームを下記のように設定します。(ログの種類によって、統計や期間を変更してください。)

  • 統計:平均値
  • 期間:5分
  • 条件:閾値 >= 1 の場合にアラームを発火する
  • その他の設定:欠落データを適正(しきい値を超えていない)として設定

④通知先の設定(CloudWatch→SNSの設定)

通知の送信先を「SNSトピックの作成とAmazon Q Developer in chat applicationsの連携」の①~②で作成したSNSトピックを選択します。

⑤アラーム名の設定

アラームを識別しやすいよう、わかりやすい名前を設定します。(例:test-alarm

⑥ アラームの作成

設定内容を確認し、問題がなければ「アラームの作成」をクリックします。

まとめ

今回は、CloudWatch LogsからSlackにアラートを通知する仕組み
「CloudWatch → SNS → Amazon Q Developer in chat applications → Slack」という構成で紹介しました。

コード不要で構築できるうえに、AWS公式サービスだけで完結するので
シンプルかつ保守もしやすいのがポイントです。

今後は、IAMロールの権限最小化や、Amazon Q Developer in chat applicationsの活用方法なども
少しずつ掘り下げていければと思います。

さいごに

ここまでお読みいただきありがとうございました!
今回の記事は、「テックブログをはじめます」宣言からの、記念すべき最初の投稿になります!

まだまだ駆け出しのエンジニアですが、
設定や構成に誤りなどがあれば、ぜひご指摘いただけると嬉しいです。

それでは、次回の投稿もお楽しみに!