システムインフラの監視アラートの通知先として、近頃はメールよりもslackなどのチャットツールを使うことが多くなってきたと感じています。ということで、AWSのCloudWatchのアラートもslackに通知するようにしてみたので、実施した手順をまとめておきます。

ここでは、CloudWatchのAlarmをslackに通知するために、Herokuにamazon-cloudwatch-to-slackを利用します。
https://github.com/esanchezm/amazon-cloudwatch-to-slack

slackのIntegration設定

まずはslackにIncomingWebhookの設定を追加します。

通知したいslackのチームにログインして、左上メニューから「Configure Integrations」を選択します。

Integrationの一覧からIncomingWebhooksを探し「View」。通知先チャネルを選び「Add Incoming WebHooks Integration」から追加します。

SetupInstructionsの「Webhook URL」をコピーしておきます(次の手順でこの文字列を使います)。

amazon-cloudwatch-to-slackの配備

以下のamazon-cloudwatch-to-slackに手順が書いてあるので、この通りに実施します。

amazon-cloudwatch-to-slack
https://github.com/esanchezm/amazon-cloudwatch-to-slack

Githubからコードをclone

PC上でgithubからcloneします。

$ mkdir ~/tmp
$ cd ~/tmp
$ git clone https://github.com/esanchezm/amazon-cloudwatch-to-slack.git

Herokuへの配備

herokuへのユーザ登録・heroku Toolbeltはセットアップは出来ている前提で、以下のようにコマンドを入力してherokuに、amazon-cloudwatch-to-slackをデプロイします。(※この範囲の利用では費用はかからないはず)

$ cd amazon-cloudwatch-to-slack
$ heroku apps:create ※設定したいアプリ名(省略してもOK)※
$ heroku config:set 'SLACK_WEBHOOK_URL=※先ほどの手順でコピーした「Webhook URL」※'
$ heroku config:set 'SLACK_USERNAME=AWS CloudWatch'
$ heroku config:set 'SLACK_ICON_EMOJI=:scream:'
$ git push heroku master

※アイコンやユーザ名は好みに応じて変更して下さい。

AWS側のAlarm設定

最後に、AWSの管理コンソールから、SNSのTopicとColudWatchのAlarmを設定します。

SNSにTopicを作成

SNSの管理コンソールから、「Topic」→「Create new topic」を選択します。 「Create Topic」画面で「Topic name」を任意に設定して、「Create topic」でtopicを作ります。

作成したTopicの「ARN」を選択後、「Create Subscription」を選択します。 「Create Subscription」画面で以下のように設定し「Create Subscription」でsubscriptionを作ります。

  • Protocol: HTTPS
  • Endpoint: HerokuアプリのURL(ここに設定するのは、https://〜〜.herokuapp.com/ ←こんな感じのURLです)

作成後、作成したSubscriptionを選択して「Request confirmations」でconfirmを実施します。

CloudWatchにAlarmを設定

CloudWatchの管理コンソールで、Metrics以下の適当なMetricsを選択します。 選択後、右下の「Create Alarm」を選択します。

「Create Alarm」画面で、以下のように設定し「CreateAlarm」からalarmを作成します。

  • Name: 任意の名称
  • Whenever: Alarmが発生するような条件を設定
  • Actions-Send notifications to: 作成したSNSのtopicを選択

Alarmを作成すると、以下のようにslackに通知が上がって来るはずです。

ここでは、動作確認のため常にAlarmが発生するように条件を設定しましたが、実際に通知が必要な閾値を設定してAlarmを作成することで必要な、アラート通知を行うことが出来ます。

後は、通知のレベル毎にTopicを作ったり、slackのnotificationsの設定して、運用に適した通知を受け取ることが出来るようにすれば、大丈夫ですね。。