LoginSignup
7
4

More than 5 years have passed since last update.

【AWS】AWS CLIでCloudWatchAlarmsの一覧を取得する【CloudWatch】

Last updated at Posted at 2018-09-05

目的

設定済みの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

7
4
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
7
4