CloudWatchでアラートを設定する

CloudWatchのアラートを設定する方法

ここでは各環境向けにCPUとメモリ使用率のアラートを設定する方法を共有します。以下で説明する alarms.shalarm_mem_template.jsonalarm_cpu_template.json の3つのファイルを用いて作業します。

alarms.sh

各ECSサービスのアラームの設定をするShell Scriptです。 alarms.shの名前で以下の内容のファイルを作成します。 このスクリプトでは現在作成されている環境を全て取得し、そのそれぞれに対して、すでに同名のアラームがある場合には更新、 存在しない場合には新規にアラームを作成します。 そのため新しい環境を追加し、CPUおよびメモリ使用率のアラートを設定したい度に実行する必要があります。

#!/bin/bash
services=$(aws ecs list-services --cluster=test-dev-20181030-1 | jq -r .serviceArns[] | sed  s#.*/##g)
THRESHOLD_MEM=70
THRESHOLD_CPU=70

for service in ${services[@]}; do
  SERVICE=$service THRESHOLD_MEM=$THRESHOLD_MEM envsubst < ./alarm_mem_template.json > alarm_mem.json
  SERVICE=$service THRESHOLD_CPU=$THRESHOLD_CPU envsubst < ./alarm_cpu_template.json > alarm_cpu.json
  aws cloudwatch put-metric-alarm --cli-input-json file://alarm_mem.json
  aws cloudwatch put-metric-alarm --cli-input-json file://alarm_cpu.json
done

使い方

alarms.sh を作成したディレクトリに alarm_mem_template.jsonalarm_cpu_template.json をそれぞれ以下の内容で作成します。

alarm_mem_template.json

{
  "EvaluationPeriods": 3, 
  "TreatMissingData": "missing",
  "ComparisonOperator": "GreaterThanThreshold",
  "ActionsEnabled": true,  
  "AlarmActions": [
    "arn:aws:sns:ap-northeast-1:811111111111:alert2Slack"
  ],
  "OKActions": [
    "arn:aws:sns:ap-northeast-1:811111111111:alert2Slack"
  ],
  "Namespace": "AWS/ECS", 
  "Period": 60, 
  "Threshold": ${THRESHOLD_MEM},
  "AlarmName": "Memory Utilization of ${SERVICE} alert to Slack",
  "Dimensions": [
    {
      "Name": "ClusterName", 
      "Value": "test-dev-20181030-1"
    },
    {
      "Name": "ServiceName", 
      "Value": "${SERVICE}"
    }
  ], 
  "DatapointsToAlarm": 3, 
  "Statistic": "Average", 
  "MetricName": "MemoryUtilization"
}

alarm_cpu_template.json

{
  "EvaluationPeriods": 3, 
  "TreatMissingData": "missing",
  "ComparisonOperator": "GreaterThanThreshold",
  "ActionsEnabled": true,  
  "AlarmActions": [
    "arn:aws:sns:ap-northeast-1:811111111111:alert2Slack"
  ],
  "OKActions": [
    "arn:aws:sns:ap-northeast-1:811111111111:alert2Slack"
  ],
  "Namespace": "AWS/ECS", 
  "Period": 60, 
  "Threshold": ${THRESHOLD_CPU},
  "AlarmName": "CPU Utilization of ${SERVICE} alert to Slack",
  "Dimensions": [
    {
      "Name": "ClusterName", 
      "Value": "test-dev-20181030-1"
    },
    {
      "Name": "ServiceName", 
      "Value": "${SERVICE}"
    }
  ], 
  "DatapointsToAlarm": 3, 
  "Statistic": "Average", 
  "MetricName": "CPUUtilization"
}

上記2つのファイルがある状態で $ ./alarms.sh を実行すると、各環境のCPU、メモリの使用率のアラートが設定することができます。

User
CloudFront
ALB
EC2
RDS