配置 CloudWatch 以通过告警创建 OpsItems - Amazon Systems Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

配置 CloudWatch 以通过告警创建 OpsItems

您可以对 Amazon CloudWatch 进行配置,令其在告警进入 ALARM 状态时,自动在 OpsCenter(Amazon Systems Manager 的一项功能)中创建 OpsItem。这样做可以让您在单个控制台中快速诊断和修正 Amazon 资源的问题。

例如,您可以配置告警,在 Application Load Balancer 生成的 HTTP 错误出现峰值时自动创建 OpsItem。为了帮助您诊断问题,OpsItem 将包含上下文相关信息,例如受监控的 Amazon 资源名称和 ID、告警详细信息、告警历史记录和告警时间线图。对于受监控的 Amazon 资源,OpsCenter 将聚合来自 Amazon Config、Amazon CloudTrail 日志和 Eventbridge 的信息,因此您在调查期间不必浏览多个控制台页面。您可以在 OpsCenter 中运行 Systems Manager 自动化运行手册进行轻松修正。

此功能在所有提供 Systems Manager 的 Amazon Web Services 区域 中均可用。请注意有关此功能的以下重要详细信息:

  • CloudWatch 可在 OpsCenter 中针对指标和复合告警创建 OpsItems。

  • 告警必须使用默认的 aws 命名空间,例如 AWS/EC2(仅限指标告警)。

  • 当您配置告警以创建 OpsItems 时,CloudWatch 会自动在 Amazon Identity and Access Management (IAM) 中创建新的服务相关角色。该新角色名为 AWSServiceRoleForCloudWatchAlarms_ActionSSM。有关 CloudWatch 服务相关角色的更多信息,请参阅《Amazon CloudWatch 用户指南》中的为 CloudWatch 使用服务相关角色

  • OpsCenter 使用重复数据删除功能禁止单个告警创建多个 OpsItems。有关更多信息,请参阅 减少重复的 OpsItems

如需了解如何在 OpsCenter 中创建用于自动创建 OpsItems 的新告警,请参阅《Amazon CloudWatch 用户指南》中的根据静态阈值创建 CloudWatch 告警。在该过程的步骤 8 中,选择 Systems Manager OpsCenter 操作,然后完成操作过程。

手动配置现有告警以创建 OpsItems(控制台)

按照以下过程编辑现有告警,并将 Systems Manager 配置为此告警的目标。当告警进入 ALARM 状态时,CloudWatch 会在 OpsCenter 中创建新的 OpsItem。

要编辑现有告警,并将 Systems Manager 配置为此告警的目标,请执行以下步骤:

  1. 通过以下网址打开 CloudWatch 控制台:https://console.aws.amazon.com/cloudwatch/

  2. 在导航窗格中,选择 Alarms (警报)

  3. 选择告警,然后依次选择 Actions (操作)Edit (编辑)

  4. (可选)更改 Metrics (指标)Conditions (条件) 部分中的设置,然后选择 Next (下一步)

  5. Systems Manager 部分,选择 Add Systems Manager OpsCenter 操作

  6. 对于 Severity (严重性),选择一个数字。

    注意

    严重性是用户定义的值。您或您的组织可以确定每个严重性级别的值的含义以及与每个严重性级别相关联的任何服务等级协议。

  7. (可选)对于 Category (类别),选择一个选项。

  8. 选择 Next (下一步) 并完成向导。

通过告警创建的 OpsItem 将显示 CloudWatch 告警 -“alarm_name(告警名称)”处于 ALARM (告警) 状态。要查看通过告警创建的特定 OpsItem 的详细信息,请选择 OpsItem,然后选择 Related resource details (相关资源详细信息) 选项卡。

注意

如果某个告警创建了 OpsItem,并且您指定了重复数据删除字符串,则即使您在 CloudWatch 中编辑此告警,它也不会创建额外的 OpsItems。(如果已在 OpsCenter 中解决 OpsItem 的问题,CloudWatch 将创建一个新的 OpsItem。)

如果您编辑某个告警,并更改通过此告警创建的任何新 OpsItems 的严重性级别或类别,Systems Manager 将不会更改已通过此告警创建的 OpsItems 的严重性级别或类别。您可以手动编辑 OpsItems,以更改诸如严重性级别或类别等详细信息。

以编程方式配置 CloudWatch 告警以创建 OpsItems

您可以使用 Amazon Command Line Interface (Amazon CLI)、Amazon CloudFormation 模板或 Java 代码段,以编程方式配置 Amazon CloudWatch 告警以创建 OpsItems。

开始前的准备工作

如果您以编程方式编辑现有告警或创建用于创建 OpsItems 的新告警,则必须指定 Amazon Resource Name (ARN)。此 ARN 将 Systems Manager OpsCenter 标识为通过告警创建的 OpsItems 目标。您可以自定义 ARN,使通过告警创建的 OpsItems 包含特定信息,如严重性或类别。每个 ARN 包含下表中描述的信息。

参数 详细信息

区域(必需)

告警所在的 Amazon Web Services 区域。例如:us-west-2。有关如何在 Amazon Web Services 区域 中使用OpsCenter 的更多信息,请参阅 Amazon Systems Manager 端点和配额

Amazon Web Services 账户 ID(必需)

创建告警时使用的同一 Amazon Web Services 账户 ID。例如:123456789012。账户 ID 必须后跟冒号 (:) 和参数 opsitem,如以下示例所示。

严重性级别(必需)

由用户定义的通过告警创建的 OpsItems 的严重性级别。有效值:1、2、3、4

由于此值由用户定义,您或您的组织可以确定每个严重性级别值的含义以及与每个严重性级别相关联的任何服务等级协议。

类别(可选)

通过告警创建的 OpsItems 的类别。有效值:Availability (可用性)、Cost (成本)、Performance (性能)、Recovery (恢复能力)、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 (Amazon CLI)

使用以下命令配置现有告警,以便通过 Amazon CLI 创建 OpsItems。此命令要求您为 alarm-actions 参数指定 Amazon Resource Name (ARN)。有关如何创建 ARN 的信息,请参阅 开始前的准备工作

要配置现有告警以创建 OpsItems,请执行以下步骤:

  1. 安装并配置 Amazon Command Line Interface (Amazon CLI)(如果尚未执行该操作)。

    更多信息,请参阅安装或升级 Amazon 命令行工具

  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

通过告警创建的 OpsItem 将显示 CloudWatch 告警 -“alarm_name(告警名称)”处于 ALARM (告警) 状态。要查看通过告警创建的特定 OpsItem 的详细信息,请选择 OpsItem,然后选择 Related resource details (相关资源详细信息) 选项卡。

注意

如果某个告警创建了 OpsItem,并且您指定了重复数据删除字符串,则即使您在 CloudWatch 中编辑此告警,它也不会创建额外的 OpsItems。(如果已在 OpsCenter 中解决 OpsItem 的问题,CloudWatch 将创建一个新的 OpsItem。)

如果您编辑某个告警,并更改通过此告警创建的任何新 OpsItems 的严重性级别或类别,Systems Manager 将不会更改已通过此告警创建的 OpsItems 的严重性级别或类别。您可以手动编辑 OpsItems,以更改诸如严重性级别或类别等详细信息。

使用 Amazon CloudFormation 模板配置 Amazon CloudWatch 告警以自动创建 OpsItems

本部分包含 Amazon CloudFormation 模板,您可以使用这些模板配置 CloudWatch 告警以自动创建 OpsItems。每个模板均要求为 AlarmActions 参数指定 Amazon Resource Name (ARN)。有关如何创建 ARN 的信息,请参阅 开始前的准备工作

指标告警

使用以下 Amazon CloudFormation 模板创建或更新 Amazon CloudWatch 指标告警。此模板中指定的告警用于监控 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"}}] } } } }

复合告警

使用以下 Amazon 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" } } }

通过告警创建的 OpsItem 将显示 CloudWatch 告警 -“alarm_name(告警名称)”处于 ALARM (告警) 状态。要查看通过告警创建的特定 OpsItem 的详细信息,请选择 OpsItem,然后选择 Related resource details (相关资源详细信息) 选项卡。

注意

如果某个告警创建了 OpsItem,并且您指定了重复数据删除字符串,则即使您在 CloudWatch 中编辑此告警,它也不会创建额外的 OpsItems。(如果已在 OpsCenter 中解决 OpsItem 的问题,CloudWatch 将创建一个新的 OpsItem。)

如果您编辑某个告警,并更改通过此告警创建的任何新 OpsItems 的严重性级别或类别,Systems Manager 将不会更改已通过此告警创建的 OpsItems 的严重性级别或类别。您可以手动编辑 OpsItems,以更改诸如严重性级别或类别等详细信息。

使用 Java 代码段配置 CloudWatch 告警以自动创建 OpsItems

本部分包含 Java 代码段,您可以使用这些代码段配置 CloudWatch 告警以自动创建 OpsItems。每个代码段均要求为 validSsmActionStr 参数指定 Amazon Resource Name (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 代码段更新您的 Amazon Web Services 账户 中的所有 CloudWatch 告警,以便在告警进入 ALARM 状态时创建 OpsItems。

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; } } }

通过告警创建的 OpsItem 将显示 CloudWatch 告警 -“alarm_name(告警名称)”处于 ALARM (告警) 状态。要查看通过告警创建的特定 OpsItem 的详细信息,请选择 OpsItem,然后选择 Related resource details (相关资源详细信息) 选项卡。

注意

如果某个告警创建了 OpsItem,并且您指定了重复数据删除字符串,则即使您在 CloudWatch 中编辑此告警,它也不会创建额外的 OpsItems。(如果已在 OpsCenter 中解决 OpsItem 的问题,CloudWatch 将创建一个新的 OpsItem。)

如果您编辑某个告警,并更改通过此告警创建的任何新 OpsItems 的严重性级别或类别,Systems Manager 将不会更改已通过此告警创建的 OpsItems 的严重性级别或类别。您可以手动编辑 OpsItems,以更改诸如严重性级别或类别等详细信息。