目的
設定済みのCloudWatchAlarmの一覧を取得する必要があったので、AWS CLI及びjqのコマンドをメモ。
AWS CLIのプロファイル名は「your-env」としています。環境に応じて適宜変えてください。
取得したい項目
- AlarmName
- Namespace
- Dimensions
- MetricName
- Statistic
- Period
- Threshold
- ComparisonOperator
- EvaluationPeriods
コマンド
基本(加工整形なし)
実行コマンド
$ aws --profile your-env cloudwatch describe-alarms
実行結果
{
"MetricAlarms": [
{
"EvaluationPeriods": 1,
"AlarmArn": "arn:aws:cloudwatch:ap-northeast-1:123456789012:alarm:DB-Connections",
"StateUpdatedTimestamp": "2018-07-01T12:34:56.789Z",
"AlarmConfigurationUpdatedTimestamp": "2018-07-01T12:34:56.789Z",
"ComparisonOperator": "GreaterThanOrEqualToThreshold",
"AlarmActions": [
"arn:aws:sns:ap-northeast-1:123456789012:NotifyTopic"
],
"Namespace": "AWS/RDS",
"StateReasonData": "{\"version\":\"1.0\",\"queryDate\":\"2018-07-01T12:34:56.789+0000\",\"startDate\":\"2018-07-01T12:34:56.789+0000\",\"statistic\":\"Average\",\"period\":300,\"recentDatapoints\":[0.0],\"threshold\":3000.0}",
"Period": 300,
"StateValue": "OK",
"Threshold": 3000.0,
"AlarmName": "DB-Connections",
"Dimensions": [
{
"Name": "DBInstanceIdentifier",
"Value": "your-db-name"
}
],
"Statistic": "Average",
"StateReason": "Threshold Crossed: 1 datapoint [0.0 (07/01/18 12:34:56)] was not greater than or equal to the threshold (3000.0).",
"InsufficientDataActions": [],
"OKActions": [],
"ActionsEnabled": true,
"MetricName": "DatabaseConnections"
},
{
※省略
},
{
※省略
}
]
}
値のみをそのまま取得
実行コマンド
必要な項目のみを指定し、map()関数で新たなJSONオブジェクトに変換しています。
$ aws --profile your-env cloudwatch describe-alarms | jq '.MetricAlarms | map({"AlarmName": .AlarmName, "Namespace": .Namespace, "Dimensions": .Dimensions, "MetricName": .MetricName, "Statistic": .Statistic, "Period": .Period, "Threshold": .Threshold, "ComparisonOperator": .ComparisonOperator, "EvaluationPeriods": .EvaluationPeriods})'
実行結果
[
{
"AlarmName": "DB-Connections",
"Namespace": "AWS/RDS",
"Dimensions": [
{
"Name": "DBInstanceIdentifier",
"Value": "your-db-name"
}
],
"MetricName": "DatabaseConnections",
"Statistic": "Average",
"Period": 300,
"Threshold": 3000,
"ComparisonOperator": "GreaterThanOrEqualToThreshold",
"EvaluationPeriods": 1
},
{
※省略
},
{
※省略
}
]
Dimensionsをフラットに展開する
実行コマンド
上記に加え、Dimensionsが配列なので、これを展開します。
Dimensionsの要素数は通常1つだけなので、添え字を直接指定します。
aws --profile your-env cloudwatch describe-alarms | jq '.MetricAlarms | map({"AlarmName": .AlarmName, "Namespace": .Namespace, "DimensionName": .Dimensions[0].Name, "DimensionValue": .Dimensions[0].Value, "MetricName": .MetricName, "Statistic": .Statistic, "Period": .Period, "Threshold": .Threshold, "ComparisonOperator": .ComparisonOperator, "EvaluationPeriods": .EvaluationPeriods})'
実行結果
[
{
"AlarmName": "DB-Connections",
"Namespace": "AWS/RDS",
"DimensionName": "DBInstanceIdentifier",
"DimensionValue": "your-db-name",
"MetricName": "DatabaseConnections",
"Statistic": "Average",
"Period": 300,
"Threshold": 3000,
"ComparisonOperator": "GreaterThanOrEqualToThreshold",
"EvaluationPeriods": 1
},
{
※省略
},
{
※省略
}
]
フラットに展開した状態でCSV出力する
実行コマンド
上記と同じ項目を、CSVで出力します。
aws --profile your-env cloudwatch describe-alarms | jq -r '.MetricAlarms[] | [.AlarmName, .Namespace, .Dimensions[0].Name, .Dimensions[0].Value, .MetricName, .Statistic, .Period, .Threshold, .ComparisonOperator, .EvaluationPeriods] | @csv'
実行結果
"DB-Connections","AWS/RDS","DBInstanceIdentifier","your-db-name","DatabaseConnections","Average",300,3000,"GreaterThanOrEqualToThreshold",1
※省略
フラットに展開した状態でCSV出力し、さらにAlarmActionsを付与する
実行コマンド
上記CSVに、更にAlarmActionsを追加します。
AlarmActionsは複数指定できますが、現状対応できるのは1つだけです。
aws --profile your-env cloudwatch describe-alarms | jq -r '.MetricAlarms[] | [.AlarmName, .Namespace, .Dimensions[0].Name, .Dimensions[0].Value, .MetricName, .Statistic, .Period, .Threshold, .ComparisonOperator, .EvaluationPeriods, .AlarmActions[0]] | @csv'
実行結果
"DB-Connections","AWS/RDS","DBInstanceIdentifier","your-db-name","DatabaseConnections","Average",300,3000,"GreaterThanOrEqualToThreshold",1,"arn:aws:sns:ap-northeast-1:123456789012:YourSnsTopicToNotify"
※省略
Furthermore
未調査事項
- Dimensionsが複数存在するケースがあり得るか
基本的に1つしか指定できないはずですが、裏取りは未実施です。
Alarmが100件を超える場合
API Referenceにある通り、DescribeAlarms APIで取得できる最大件数は100件となります。
これを超えて全て取得する場合、以下の操作を行う必要があります。
- レスポンスのJSONに「NextToken」オブジェクトが追加されるので、これを取得
- リクエストに「NextToken」オブジェクトを追加して、更にDescribeAlarmsを実行する
- レスポンスに「NextToken」が存在しなくなるまで、これを繰り返す
関連ドキュメント
AWS公式ドキュメント
describe-alarms — AWS CLI 1.16.7 Command Reference
https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/describe-alarms.html
DescribeAlarms - Amazon CloudWatch
https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_DescribeAlarms.html