OpsItems を (プログラムで) 作成するように既存の CloudWatch アラームを設定する - AWS Systems Manager

OpsItems を (プログラムで) 作成するように既存の CloudWatch アラームを設定する

AWS Command Line Interface (AWS CLI)、AWS CloudFormation テンプレート、または Java コードスニペットを使用して、OpsItems をプログラムで作成するように Amazon CloudWatch アラームを設定できます。

始める前に

既存のアラームをプログラムで編集するか、OpsItems を作成する新しいアラームを作成する場合は、Amazon リソースネーム (ARN) を指定する必要があります。この ARN により、Systems Manager OpsCenter はアラームから作成された OpsItems のターゲットとして識別されます。アラームから作成された OpsItems に重大度やカテゴリなどの特定の情報が含まれるように、ARN をカスタマイズできます。各 ARN には、次の表に示す情報が含まれています。

Parameter 詳細

Region (必須)

アラームが存在する AWS リージョン。例: us-west-2。OpsCenter を使用できる AWS リージョン については、「AWS Systems Manager エンドポイントとクォータ」を参照照してください。

account_ID (必須)

アラームの作成に使用したのと同じ AWS アカウント ID。例: 123456789012。以下の例に示すように、アカウント ID の後にはコロン (:) とパラメータ opsitem を指定する必要があります。

severity (必須)

アラームから作成された OpsItems のユーザー定義の重大度。有効な値: 1234

Category (オプション)

アラームから作成された OpsItems のカテゴリ。有効な値: AvailabilityCostPerformanceRecovery、および Security

次の構文を使用して ARN を作成します。この ARN には、オプションの Category パラメータは含まれません。

arn:aws:ssm:Region:account_ID:opsitem:severity

次に例を示します。

arn:aws:ssm:us-west-2:123456789012:opsitem:3

オプションの Category パラメータを使用する ARN を作成するには、次の構文を使用します。

arn:aws:ssm:Region:account_ID:opsitem:severity#CATEGORY=category_name

次に例を示します。

arn:aws:ssm:us-west-2:123456789012:opsitem:3#CATEGORY=Security

OpsItems (AWS CLI) を作成するように CloudWatch アラームを設定する

このコマンドでは、alarm-actions パラメータの ARN を指定する必要があります。ARN を作成する方法については、「始める前に」を参照してください。

OpsItems (AWS CLI) を作成するように CloudWatch アラームを設定するには
  1. まだ AWS Command Line Interface (AWS CLI) をインストールして設定していない場合は、インストールして設定します。

    詳細については、「AWS CLI の最新バージョンをインストールまたは更新します。」を参照してください。

  2. 次のコマンドを実行して、設定するアラームに関する情報を収集します。

    aws cloudwatch describe-alarms --alarm-names "alarm name"
  3. 次のコマンドを実行してアラームを更新します。各リソースプレースホルダーの例をユーザー自身の情報に置き換えます。

    aws cloudwatch put-metric-alarm --alarm-name name \ --alarm-description "description" \ --metric-name name --namespace namespace \ --statistic statistic --period value --threshold value \ --comparison-operator value \ --dimensions "dimensions" --evaluation-periods value \ --alarm-actions arn:aws:ssm:Region:account_ID:opsitem:severity#CATEGORY=category_name \ --unit unit

    以下に例を示します。

    Linux & macOS
    aws cloudwatch put-metric-alarm --alarm-name cpu-mon \ --alarm-description "Alarm when CPU exceeds 70 percent" \ --metric-name CPUUtilization --namespace AWS/EC2 \ --statistic Average --period 300 --threshold 70 \ --comparison-operator GreaterThanThreshold \ --dimensions "Name=InstanceId,Value=i-12345678" --evaluation-periods 2 \ --alarm-actions arn:aws:ssm:us-east-1:123456789012:opsitem:3#CATEGORY=Security \ --unit Percent
    Windows
    aws cloudwatch put-metric-alarm --alarm-name cpu-mon ^ --alarm-description "Alarm when CPU exceeds 70 percent" ^ --metric-name CPUUtilization --namespace AWS/EC2 ^ --statistic Average --period 300 --threshold 70 ^ --comparison-operator GreaterThanThreshold ^ --dimensions "Name=InstanceId,Value=i-12345678" --evaluation-periods 2 ^ --alarm-actions arn:aws:ssm:us-east-1:123456789012:opsitem:3#CATEGORY=Security ^ --unit Percent

OpsItems (CloudFormation) を作成または更新するように CloudWatch アラームを設定する

このセクションでは、OpsItems を自動的に作成または更新するように CloudWatch アラームを設定する際に使用できる AWS CloudFormation テンプレートを紹介します。各テンプレートでは、AlarmActions パラメータの ARN を指定する必要があります。ARN を作成する方法については、「始める前に」を参照してください。

メトリクスアラーム – CloudWatch メトリクスアラームを作成または更新するには、以下の CloudFormation テンプレートを使用します。このテンプレートで指定されたアラームは、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスのステータスチェックをモニタリングします。アラームが ALARM ステートになると、OpsCenter で OpsItem が作成されます。

{ "AWSTemplateFormatVersion": "2010-09-09", "Parameters" : { "RecoveryInstance" : { "Description" : "The EC2 instance ID to associate this alarm with.", "Type" : "AWS::EC2::Instance::Id" } }, "Resources": { "RecoveryTestAlarm": { "Type": "AWS::CloudWatch::Alarm", "Properties": { "AlarmDescription": "Run a recovery action when instance status check fails for 15 consecutive minutes.", "Namespace": "AWS/EC2" , "MetricName": "StatusCheckFailed_System", "Statistic": "Minimum", "Period": "60", "EvaluationPeriods": "15", "ComparisonOperator": "GreaterThanThreshold", "Threshold": "0", "AlarmActions": [ {"Fn::Join" : ["", ["arn:arn:aws:ssm:Region:account_ID:opsitem:severity#CATEGORY=category_name", { "Ref" : "AWS::Partition" }, ":ssm:", { "Ref" : "AWS::Region" }, { "Ref" : "AWS:: AccountId" }, ":opsitem:3" ]]} ], "Dimensions": [{"Name": "InstanceId","Value": {"Ref": "RecoveryInstance"}}] } } } }

複合アラーム – 複合アラームを作成または更新するには、以下の CloudFormation テンプレートを使用します。複合アラームは、複数のメトリクスアラームで構成されます。アラームが ALARM ステートになると、OpsCenter で OpsItem が作成されます。

"Resources":{ "HighResourceUsage":{ "Type":"AWS::CloudWatch::CompositeAlarm", "Properties":{ "AlarmName":"HighResourceUsage", "AlarmRule":"(ALARM(HighCPUUsage) OR ALARM(HighMemoryUsage)) AND NOT ALARM(DeploymentInProgress)", "AlarmActions":"arn:aws:ssm:Region:account_ID:opsitem:severity#CATEGORY=category_name", "AlarmDescription":"Indicates that the system resource usage is high while no known deployment is in progress" }, "DependsOn":[ "DeploymentInProgress", "HighCPUUsage", "HighMemoryUsage" ] }, "DeploymentInProgress":{ "Type":"AWS::CloudWatch::CompositeAlarm", "Properties":{ "AlarmName":"DeploymentInProgress", "AlarmRule":"FALSE", "AlarmDescription":"Manually updated to TRUE/FALSE to disable other alarms" } }, "HighCPUUsage":{ "Type":"AWS::CloudWatch::Alarm", "Properties":{ "AlarmDescription":"CPUusageishigh", "AlarmName":"HighCPUUsage", "ComparisonOperator":"GreaterThanThreshold", "EvaluationPeriods":1, "MetricName":"CPUUsage", "Namespace":"CustomNamespace", "Period":60, "Statistic":"Average", "Threshold":70, "TreatMissingData":"notBreaching" } }, "HighMemoryUsage":{ "Type":"AWS::CloudWatch::Alarm", "Properties":{ "AlarmDescription":"Memoryusageishigh", "AlarmName":"HighMemoryUsage", "ComparisonOperator":"GreaterThanThreshold", "EvaluationPeriods":1, "MetricName":"MemoryUsage", "Namespace":"CustomNamespace", "Period":60, "Statistic":"Average", "Threshold":65, "TreatMissingData":"breaching" } } }

OpsItems (Java) を作成または更新するように CloudWatch アラームを設定する

このセクションでは、OpsItems を自動的に作成または更新する CloudWatch アラームの設定に使用できる Java コードスニペットについて説明します。各スニペットでは、validSsmActionStr パラメータの ARN を指定する必要があります。ARN を作成する方法については、「始める前に」を参照してください。

特定のアラーム – 次の Java コードスニペットを使用して、CloudWatch アラームを作成または更新します。このテンプレートで指定されたアラームは、Amazon EC2 インスタンスのステータスチェックをモニタリングします。アラームが ALARM ステートになると、OpsCenter で OpsItem が作成されます。

import com.amazonaws.services.cloudwatch.AmazonCloudWatch; import com.amazonaws.services.cloudwatch.AmazonCloudWatchClientBuilder; import com.amazonaws.services.cloudwatch.model.ComparisonOperator; import com.amazonaws.services.cloudwatch.model.Dimension; import com.amazonaws.services.cloudwatch.model.PutMetricAlarmRequest; import com.amazonaws.services.cloudwatch.model.PutMetricAlarmResult; import com.amazonaws.services.cloudwatch.model.StandardUnit; import com.amazonaws.services.cloudwatch.model.Statistic; private void putMetricAlarmWithSsmAction() { final AmazonCloudWatch cw = AmazonCloudWatchClientBuilder.defaultClient(); Dimension dimension = new Dimension() .withName("InstanceId") .withValue(instanceId); String validSsmActionStr = "arn:aws:ssm:Region:account_ID:opsitem:severity#CATEGORY=category_name"; PutMetricAlarmRequest request = new PutMetricAlarmRequest() .withAlarmName(alarmName) .withComparisonOperator( ComparisonOperator.GreaterThanThreshold) .withEvaluationPeriods(1) .withMetricName("CPUUtilization") .withNamespace("AWS/EC2") .withPeriod(60) .withStatistic(Statistic.Average) .withThreshold(70.0) .withActionsEnabled(false) .withAlarmDescription( "Alarm when server CPU utilization exceeds 70%") .withUnit(StandardUnit.Seconds) .withDimensions(dimension) .withAlarmActions(validSsmActionStr); PutMetricAlarmResult response = cw.putMetricAlarm(request); }

すべてのアラームを更新する – 次の Java コードスニペットを使用して、アラームが ALARM 状態になったときに OpsItems を作成するように、AWS アカウント 内のすべての CloudWatch アラームを更新します。

import com.amazonaws.services.cloudwatch.AmazonCloudWatch; import com.amazonaws.services.cloudwatch.AmazonCloudWatchClientBuilder; import com.amazonaws.services.cloudwatch.model.DescribeAlarmsRequest; import com.amazonaws.services.cloudwatch.model.DescribeAlarmsResult; import com.amazonaws.services.cloudwatch.model.MetricAlarm; private void listMetricAlarmsAndAddSsmAction() { final AmazonCloudWatch cw = AmazonCloudWatchClientBuilder.defaultClient(); boolean done = false; DescribeAlarmsRequest request = new DescribeAlarmsRequest(); String validSsmActionStr = "arn:aws:ssm:Region:account_ID:opsitem:severity#CATEGORY=category_name"; while(!done) { DescribeAlarmsResult response = cw.describeAlarms(request); for(MetricAlarm alarm : response.getMetricAlarms()) { // assuming there are no alarm actions added for the metric alarm alarm.setAlarmActions(ImmutableList.of(validSsmActionStr)); } request.setNextToken(response.getNextToken()); if(response.getNextToken() == null) { done = true; } } }