はじめに
20台以上あるEC2のメモリー使用率を監視して閾値超過したらアラーム通知することになりました。
20台をコンソールからチマチマ設定するのが手間なので、jsonファイルに定義してCLIでさくっと設定したいなぁということでやり方を調べました。
ついでにjsonファイルをローカル環境に持っているのも嫌なのでS3に保存しておきCLIで呼び出したいと思います。
サービス構成
CloudWatchアラームのjson作成
CloudWatchアラームをjsonで定義したファイルを作成します。
json
{
"AlarmActions": [
"arn:aws:sns:ap-northeast-1:11111111:aws_alarms"
],
"AlarmName": "MemoryUtilization_Over80%",
"Namespace": "xxx",
"MetricName": "Memory % Committed Bytes In Use",
"Dimensions": [
{
"Name": "InstanceId",
"Value": "i-xxx"
},
{
"Name": "InstanceId",
"Value": "i-yyy"
},
],
"Statistic": "Maximum",
"Period": 300,
"EvaluationPeriods": 1,
"Threshold": 80,
"ComparisonOperator": "GreaterThanOrEqualToThreshold"
}
各項目の意味は次のとおりです。
- AlarmName: アラームの名前を指定する。
- ComparisonOperator: メトリックスの比較演算子を指定する。この例では、GreaterThanOrEqualToThreshold つまり、しきい値以上の場合にアラートを発生させるように設定されている。
- EvaluationPeriods: アラームがトリガーされる前に必要な連続した測定値の数。
- MetricName: 監視するメトリックスの名前を指定する。この例では、Memory % Committed Bytes In Use、つまりメモリ使用率を監視している。
- Namespace: 監視するメトリックスの名前空間を指定する。この例では、xxx、つまり Amazon CloudWatch エージェントによって生成されたメトリックスを監視している。
- Period: メトリックスのサンプリング間隔を指定する。
- Statistic: メトリックスの集計方法を指定する。この例では、Maximum つまり、測定値の最大値を使用してアラートを発生させるように設定されている。
- Threshold: アラートが発生する閾値を指定する。この例では、80%を閾値として設定している。
- ActionsEnabled: アクションを有効にするかどうかを指定する。この例では、trueに設定している。
- AlarmActions: アラームの発生時に実行するアクションを指定する。この例では、指定された SNS トピックに通知するように設定されている。
- Dimensions: 監視対象のリソースに関する情報を指定する。この例では、EC2 インスタンスの ID を InstanceId という名前で指定している。連続記載で複数のEC2を指定可能。
このファイルをS3に保存します。S3のバケットポリシーにはCLIで作業するIAMユーザーで参照権限を付けておきます。
こんな感じ。
json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowCloudWatchAlarms",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::111111:user/username"
]
},
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::bucketname",
"arn:aws:s3:::bucketname/*"
]
}
]
}
CLIでの設定
まず、S3に保存したファイルをインスタンスにコピーします。
aws s3 cp s3://xxx/MemoryUtilization_Over80%.json MemoryUtilization_Over80%.json
続いてCloudWatchアラームに反映します。
aws cloudwatch put-metric-alarm --cli-input-json file://~/MemoryUtilization_Over80%.json
削除する場合
設定した内容はコンソールからも確認可能です。
また、設定削除はCLIは次のとおりです。
aws cloudwatch delete-alarms --alarm-names 'MemoryUtilization_Over80%'