こんにちは、インフラエンジニアの綿引です。

今回は Amazon CloudWatchAmazon SNS、そして AWS Chatbot を使って、
CloudWatch アラーム を Slack に通知する。ということをやってみたいと思います。

CloudWatch のことを有効活用できていなかった私としては、
個人的にとてもいい勉強になったので、アウトプットさせていただきたいと思います。

用途としては、監視運用を導入するまでアラートをウォッチしてしておきたいといった場合や、
コストを抑えるためスモールスタートで監視を実施したいといった場合に使えるのでないでしょうか。

なお、AWS Chatbot は現時点でベータ版のため、ご認識のほどお願いいたします。

それではまず、CloudWatch の概要から記載していきたいと思います。

CloudWatch とは

AWS の各種リソースをモニタリングできるサービス です。

その CloudWatch の中でもいくつかのカテゴリに分かれていますので、
以下に各項目の概要を記載していきます。

• CloudWatch Metrics

  • 各 AWS サービスから取得した性能データ(メトリクス)を過去分からグラフで参照できる
  • セットアップ不要。各サービス作成後、自動的に CloudWatch にデータを送信 (標準メトリクス)
    • メトリクスの例としては EC2 の CPU 使用率 や、ALB の 500 エラー など
  • 標準メトリクスにないデータをモニタリングしたい際には、独自のカスタムメトリクスを作成できる

• CloudWatch Alarms

  • CloudWatch Metrics をモニタリングして、アラームを発行できる
  • 連携サービスは Amazon SNS、EC2、AWS Auto Scaling の 3つ
  • アラームをトリガーに、SNS から Lambda を実行したり、EC2 の再起動などが可能

• CloudWatch Logs

  • CloudWatch エージェント経由でログを CloudWatch へ転送
  • エージェントはサーバにインストールする必要あり
  • CloudWatch に転送したログは、その後 Lambda や Amazon Kinesis への転送も可能

• CloudWatch Logs Insights

  • CloudWatch Logs をより見やすくしてくれる機能
  • 簡単な専用クエリを使って、インタラクティブに検索できる
  • 可視化の機能もあり

• CloudWatch Dashboards

  • CloudWatch Metrics のメトリクスを組み合わせてダッシュボートとして見れる

• CloudWatch Events

  • AWS リソースの変更をトリガーに、ターゲットへの操作が可能
  • トリガーの種類も豊富であり、AWS Batch や、CodePipeline 、ECS など色々存在

CloudWatch の料金

料金に関しては、メトリクスの数や API の数で変わったり、
項目の数も多いため、他のサービスに比べて少し複雑です。
リンク先の公式サイトがわかりやすいので、そちらをご参照いただければと思います。

無料枠もあるので上手く使いたいですね。

使ってみる

では実際に試していきたいと思います。
今回使用するサービスは以下です。

1. CloudWatch
– CloudWatch アラームを使用、SNS と連携

2. Amazon SNS
– CloudWatch アラーム と AWS Chatbot の間に配置

3. AWS Chatbot
– SNS の通知を受け、Slack にアラームを転送

4. EC2 (ホスト名 : cloudwatch-test)
– アラームを起こすため、テスト用に構築

① Amazon SNS の設定

まずは CloudWatch と Chatbot に設定する SNS トピックを作成していきます。
メールでも通知を受け取りたいため、サブスクリプションにはメールを設定します。

マネジメントコンソールから Amazon SNS を選択し、「トピックの作成」を選択します。

「名前」 と 「表示名 – オプション」 は cloudwatch-test-sns にしました。
入力後、右下の「トピックの作成」を選択します。

これで SNS トピックの作成ができました。
次はサブスクリプションの設定を行います。

画面右の「サブスクリプションの作成」を選択します。

「プロトコル」に Eメール を選択し、エンドポイントに送信したいアドレスを入力後、
「サブスクリプションの作成」を選択します。

設定したメールアドレス宛てに、
「AWS Notification – Subscription Confirmation」 という件名でメールが来ますので、
「Confirm subscription」 を押下すると、のサブスクリプションのステータスが 確認済み になります。

これで SNS の設定が完了しました。
次に、CloudWatch アラーム の設定を行っていきます。

② CloudWatch アラームの設定

CloudWatch アラームの設定では、
テスト用に作成した EC2CPU 使用率 (CPUUtilization) に対しアラームを設定します。

マネジメントコンソールから CloudWatch を選択し、
左側の「アラーム」を選択後、「アラームの作成」を押下します。

次画面にて「メトリクスの選択」を押下します。

このメトリクスの設定画面で、EC2 の CPUUtilization を選択して行きます。

検索窓に 【インスタンスID】 と 【”CPU” という文字列】を入れ、対象のメトリクスを検索します。
対象インスタンスの CPUUtilization の項目が表示されたらボックスにチェックを入れ、
右下の「メトリクスの選択」を押下します。

次はアラームの条件を指定します。

今回は 【5分間の間に CPU 使用率が 10% を超えたら通知】 されるよう、以下で設定しています。

設定項目 設定値
統計 最大
期間 5分
しきい値の種類 静的
CPUUtilization が次の時… より大きい
… よりも 10

設定が終わったら、「次へ」を押下します

次は通知先の設定です。
ここで先ほど作成した SNS トピック を指定します。

設定は以下です。

設定項目 設定値
アラーム状態トリガー アラーム状態
SNS トピックの選択 既存の SNS トピックを選択
通知の送信先 ※ 先ほど作成した SNS トピック (cloudwatch-test-sns)

最後にアラーム名をつけ、「次へ」を選択後、「アラームの作成」を押下します。

これで CloudWatch アラームの設定ができました。
この時点でアラームが指定のメールアドレスに来るようになっています。

そして次は Slack に通知が来るよう、 AWS Chatbot の設定を行っていきます。

③ AWS Chatbot の設定

まずはマネジメントコンソールから AWS Chatbot を選択し、
チャットクライアントの設定を行います。

右側にある 「チャットクライアント」 のプルダウンから 「Slack」 を選び、
「クラアントの設定」を押下します。

「クラアントの設定」を押下すると、slack ワークスペースのサインイン画面に遷移するので、
アラームの通知を受けたいワークスペースにサインインします。

メールアドレスとパスワードを入力すると、
AWS Chatbot と slack の連携 を許可する画面になるので「許可する」を選択します。

これでクライアントの設定は完了したので、次はチャネルの作成を行います。
Chatbot の画面から、「新しいチャネルを設定」を選択します。

設定名は任意です。
ここでは cloudwatch_test としました。

次に slack チャネル の設定です。
チャネルタイプは「パブリック」、パブリックチャネルは「random」にしました。

パブリックチャネル で選択したチャネルに対し、アラーム通知が来る形になってますので、
アラーム通知用のチャネルを作っておくと便利かと思います。

次のアクセス許可では、Chatbot が CloudWatch と連携できるようにロールを設定します。
必要なポリシーは以下のようなので、事前にロールを作成しておいても良いですが、
今回は画面から新規作成できるので、そちらで作成していきます。

・ cloudwatch:Describe*
・ cloudwatch:Get*
・ cloudwatch:List*

IAM ロールには、「テンプレートを使用して IAM ロールを作成する」を選択、
ロール名は任意で設定します。

ポリシーテンプレートには 「通知のアクセス許可」を選択します。

通知の項目では、SNS トピックが存在するリージョンを指定し、
最初に作成した SNS トピックを選択しましょう。

これで AWS Chatbot の設定が完了しました。

では CloudWatch アラームが Slack に通知されるかテストしてみましょう。

④ CloudWatch アラームのテスト

早速、対象サーバの CPU 使用率をあげます。
今回はコマンドを打鍵し、あげております。

その後、CloudWatch メトリクスにて CPUUtilization が上昇しているか確認します。

CloudWatch メトリクス側で CPU 使用率上昇の確認ができました。
またCloudWatch アラームの履歴でも action の履歴が表示されました。

その後すぐにメールと、Slack の通知が届きました。
以下は slack のキャプチャです。

画像もついていてわかりやすいですね。
これで検証完了です。

最後に

今回は CloudWatch と SNS 、AWS Chacbot を使い、
CloudWatch アラームの通知を Slack で受けとるという検証をしましたが、
使いやすいし、色々出来ることが増えるなというのが個人的な印象です。

設定も簡易ですし、特に CloudWatch と SNS は Lambda や他の AWS サービスと連携しているので、
アラームを通知するだけでなく、再起動や、他の細かな対応まで出来るのは嬉しいなと思いました。

今後に関しては、CloudWatch を使って監視がもっと精度高くできるようにしていきたいですが、
今回使った標準メトリクスだけでは、メモリ使用率などがとれないので、
次回は CloudWatch エージェントのお話でもしたいです。

エンジニア募集中

Wedding Parkでは一緒に技術のウエディングパークを創っていくエンジニアを募集しています。
興味のある方はぜひ一度気軽にオフィスに遊びにいらして頂ければと思います。
株式会社ウエディングパークwantedly

Join Us !

ウエディングパークでは、一緒に働く仲間を募集しています!
ご興味ある方は、お気軽にお問合せください(カジュアル面談から可)

採用情報を見る