LoginSignup
1
3

More than 5 years have passed since last update.

Slackにアラート通知(CloudWatch+SNS+Lambda+incoming-webhook)

Last updated at Posted at 2017-03-15

目的

サーバのアラートをSlackの特定の部屋に投稿したい

使用サービス

  • slack
  • incoming-webhook(slack apps)
  • cloudwatch(aws)
  • sns(aws)
  • lambda(aws)
  • iam(aws)
  • ec2(aws)

要件

サンプルとしてCPU使用率が閾値を超えたらSlackの部屋に投稿するという機能を作成する

設定その1:incoming-webhook

"Make a Custom Integration"から"Incoming Webhooks"でWebhooksを作成。外部から Slack へ投稿する手段として"incoming-webhook"を使用。左のメニューから”Apps&Integrations”を選択。ブラウザで”AppDirectory”ページが表示されるので"incoming-webhook"を検索して"Add Configuration"を実行。設定は以下のようにする


  • Integration Settings
    • Post to Channel:任意のSlackチャンネル
    • Webhook URL:コピーしておく(Lambdaコード内で使用する)
    • Descriptive Label:特になし
    • Customize Name:必ず変える必要はない
    • Customize Icon:必ず変える必要はない
    • Preview Message:必ず変える必要はない
接続テスト

"incoming-webhook"を組み込んだだけでSlackに投稿可能であるか確認する
端末エミュレータから以下接続テストコマンド(curl ~)を実行する

image

設定その2:SNSのTopic作成

プッシュ通知サービスAmazon Simple Notification Serviceを設定する。CloudWatchでアラート発生したらSNSのTopicに連携されLambdaでコードを実行できるようにする。SNSは細かい設定は必要なくTopicを作成するだけで良い。


  • ”SNS DashBoard”→"Create Topics"
    • Topic name "EC2_CPU_Util"
    • Display name "EC2_CPU_Util" 上記入力完了したら"Create topic"を押下

image

  • Topic detail: EC2_CPU_Util画面で"Publish to topic"を押下

設定その3:CloudWatchのアラーム作成

"Cloudwatch"→"xxx_dashboard"(なければ作成)→"アラームの作成"→"EC2メトリクス"から任意のインスタンスIDを検索→当該インスタンスの"CPUUtilization (CPUUtilization)"を選択し以下のように入力

  • アラームのしきい値
    名前:CPU_Utilization
    説明:CPU_Utilization
    次の時:CPUUtilization (CPUUtilization)
    が:>=10
    を:1回連続した場合
    ※アラートを意図的に発報させるため閾値は低く設定しておく。本番の場合は別途考慮する。

  • アクション
    通知
    アラームが次の時: 状態:OK
    通知の送信先: EC2_CPU_Util ※SNSTopic

通知
アラームが次の時: 状態:OK
通知の送信先: EC2_CPU_Util_Email
メールリスト:hoge@alertmail.jp

通知
アラームが次の時: 状態:警告
通知の送信先: EC2_CPU_Util ※SNSTopic

通知
アラームが次の時: 状態:警告
通知の送信先: EC2_CPU_Util_Email
メールリスト:hoge@alertmail.jp

※通知を追加する場合は"+通知"を押下

  • アラームのプレビュー

インスタンス ID (Instance­Id): 任意のインスタンスID
インスタンス名:任意のインスタンス名
メトリクス名:CPUUtilization

間隔:5分間
統計: Standard
平均

image

設定その4:Lambda functionの作成

"Dashboard"→"Create a Lambda function"→"Configure triggers"→□をクリックしSNSを探し選択。SNS topic"EC2_CPU_Util"を選択→"Enable trigger"にチェックを入れ"Next"を押下→"Configure function"で以下のように設定する

image

Configure function
- Name: Func_Alert_CPU_Util
- Description: Alert_CPU_Util
- Runtime: Python 2.7
- Handler: lambda_function.lambda_handler

Lambda function code
- Code entry type: Edit code inline

import urllib

def lambda_handler(event, context):
    endpoint = 'https://hooks.slack.com/services/XXXX/XXXX/XXXX'
    parameter = urllib.urlencode({"payload": {"text": "ALERT:CPU Utilization"}})
    function = urllib.urlopen(endpoint, parameter)
    print function.read()
    return

Lambda function handler and role
- lambda_function.lambda_handler
- Choose an existing role
- service-role/lambda_exec_role ※IAMで作成してあること

Advanced settings
- Memory (MB): 128
- Timeout 0 min 3 sec

DLQ Resource
- なし

VPC
- No VPC

KMS key
- (default)aws/lambda

"Next" → "Create function"でLambdafunctionの作成完了

"Triggers"→”Test”を実行

image

設定その5:SNSのSubscription作成

  • Lambda連携用
    Topic ARN:arn:aws:sns:ap-northeast-1:XXX:EC2_CPU_Util ※作成したSNSTopicのARNを入力
    Protocol:AWS Lambda
    Endpoint:arn:aws:lambdaxxxfunctionname ※上のプロトコルを選ぶと自動入力される
    Version or alias:default

  • Email連携用
    Topic ARN:arn:aws:sns:ap-northeast-1:XXX:EC2_CPU_Util_Email ※作成したSNSTopicのARNを入力
    Protocol:Email
    Endpoint:通知先メールアドレスを入力
    Version or alias:default

上記を入力したら"create subscription"を入力

image

実行・確認

  • 意図的にCPU負荷を上昇させる。※1回で足りなければ並列で実行
# 負荷開始
$ yes >> /dev/null &
[1] 18593
# 負荷停止
$ kill -9 18593
[1]+  Killed                  yes >> /dev/null
  • CloudWatchでCPU使用率を確認
    閾値を超えていることを確認

  • Emailにアラートが届いていることを確認

  • Slackの指定したチャンネルにアラートが投稿されていることを確認

image

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3