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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

配置 CloudWatch 以从警报创建OpsItems

您可以将 Amazon CloudWatch 配置为在警报进入 OpsItem 状态时在 Systems Manager OpsCenter 中自动创建 ALARM。这样做使您能够从单个控制台快速诊断和修复 AWS 资源问题。

例如,您可以将警报配置为在应用程序负载均衡器生成的 HTTP 错误出现峰值时自动创建 OpsItem。为了帮助您诊断问题,OpsItem 包含上下文相关信息,例如,所监控 AWS 资源的名称和 ID、警报详细信息、警报历史记录和警报时间轴图表。对于受监控的 AWS 资源,OpsCenter 聚合来自 AWS Config、AWS CloudTrail 日志和 Amazon CloudWatch Events 的信息,因此,在调查期间,您无需浏览多个控制台页面。您可以在 Systems Manager 中运行 OpsCenter Automation 文档,以便轻松进行修复。

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

  • CloudWatch 可以在 OpsItems 中为指标和复合警报创建 OpsCenter。

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

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

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

有关如何创建在 OpsItems 中自动创建 OpsCenter 的新警报的信息,请参阅 中的CloudWatch基于静态阈值创建 警报。Amazon CloudWatch 用户指南在该过程的步骤 8 中,选择 Systems Manager OpsCenter action (AWS IoT Storage Gateway 操作),然后完成该过程。

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

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

编辑现有警报并将 Systems Manager 配置为该警报的目标

  1. 通过以下网址打开 CloudWatch 控制台:https://console.amazonaws.cn/cloudwatch/

  2. 在导航窗格中,选择 Alarms

  3. 选择警报,然后选择 ActionsEdit

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

  5. Systems Manager 部分中,选择 Add Systems Manager OpsCenter action (添加 AWS Lambda 操作)

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

    注意

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

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

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

从警报创建的 OpsItem 显示 CloudWatch 警报 - 'alarm_name' 处于 ALARM 状态。要查看有关从警报创建的特定 OpsItem 的详细信息,请选择 OpsItem,然后选择 Related resource details (相关资源详细信息) 选项卡。

注意

如果警报创建了 OpsItem,并且您指定了重复数据删除字符串,则警报不会创建额外的 OpsItems,即使您在 CloudWatch 中编辑警报也是如此。(如果在 OpsItem 中解析 OpsCenter,CloudWatch 将创建新的 OpsItem。)

如果您编辑警报并更改从它创建的任何新 OpsItems 的严重性或类别,则 Systems Manager 不会更改已从该警报创建的 OpsItems 的严重性或类别。您可以手动编辑 OpsItems 以更改详细信息(如严重性或类别)。

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

您可以使用 Amazon CloudWatch、OpsItems 模板或 Java 代码段以编程方式配置 AWS CLI 警报以创建 AWS CloudFormation。

开始前的准备工作

如果您以编程方式编辑现有警报或创建创建创建 OpsItems 的新警报,则必须指定 Amazon 资源名称 (ARN)。此 ARN 将 Systems Manager OpsCenter 标识为从警报创建的 OpsItems 的目标。您可以自定义 ARN,以便从警报创建的 OpsItems 包含特定的信息,如严重性或类别。每个 ARN 都包含下表中所述的信息。

参数 详细信息

区域(必需)

警报所在的 AWS 区域。例如:us-west-2。有关可以使用 AWS 的 OpsCenter 区域的信息,请参阅 AWS Systems Manager 终端节点和配额

AWS 账户 ID(必需)

用于创建警报的相同 AWS 账户 ID。例如:123456789012。 请注意,账户 ID 必须后跟冒号 (:) 和参数 opsitem,如以下示例所示。

严重性(必需)

从警报创建的 OpsItems 的用户定义的严重性级别。有效值:1,2,34

请注意,因为这是一个用户定义的值,所以您或您的组织确定每个严重性值的含义以及与每个严重性关联的任何服务级别协议。

类别(可选)

从警报创建的 OpsItems 的类别。有效值:可用性、成本、性能、恢复、安全性。

使用以下语法创建 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)

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

配置现有警报以创建OpsItems

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

    有关信息,请参阅安装或升级 AWS 命令行工具

  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
    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,并且您指定了重复数据删除字符串,则警报不会创建额外的 OpsItems,即使您在 CloudWatch 中编辑警报也是如此。(如果在 OpsItem 中解析 OpsCenter,CloudWatch 将创建新的 OpsItem。)

如果您编辑警报并更改从它创建的任何新 OpsItems 的严重性或类别,则 Systems Manager 不会更改已从该警报创建的 OpsItems 的严重性或类别。您可以手动编辑 OpsItems 以更改详细信息(如严重性或类别)。

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

本节包含 AWS CloudFormation 模板,您可以使用这些模板配置 CloudWatch 警报以自动创建 OpsItems。每个模板都要求您为 AlarmActions 参数指定 Amazon 资源名称 (ARN)。有关如何创建 ARN 的信息,请参阅开始前的准备工作

指标警报

可以使用以下 AWS CloudFormation 模板创建或更新 Amazon CloudWatch 指标警报。此模板中指定的警报监控 Amazon EC2 实例状态检查。如果警报进入 ALARM 状态,它会在 OpsItem 中创建一个 OpsCenter。

{ "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"}}] } } } }

复合警报

使用以下 AWS CloudFormation 模板创建或更新复合警报。复合警报由多个指标警报组成。如果警报进入 ALARM 状态,它会在 OpsItem 中创建一个 OpsCenter。

"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,并且您指定了重复数据删除字符串,则警报不会创建额外的 OpsItems,即使您在 CloudWatch 中编辑警报也是如此。(如果在 OpsItem 中解析 OpsCenter,CloudWatch 将创建新的 OpsItem。)

如果您编辑警报并更改从它创建的任何新 OpsItems 的严重性或类别,则 Systems Manager 不会更改已从该警报创建的 OpsItems 的严重性或类别。您可以手动编辑 OpsItems 以更改详细信息(如严重性或类别)。

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

本节包含可用于配置 CloudWatch 警报以自动创建 OpsItems 的 Java 代码段。每个代码段要求您为 validSsmActionStr 参数指定 Amazon 资源名称 (ARN)。有关如何创建 ARN 的信息,请参阅开始前的准备工作

特定警报

使用以下 Java 代码段创建或更新 CloudWatch 警报。此模板中指定的警报监控 Amazon EC2 实例状态检查。如果警报进入 ALARM 状态,它会在 OpsItem 中创建一个 OpsCenter。

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 代码段更新 CloudWatch 账户中的所有 AWS 警报,以在警报进入 OpsItems 状态时创建 ALARM

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,并且您指定了重复数据删除字符串,则警报不会创建额外的 OpsItems,即使您在 CloudWatch 中编辑警报也是如此。(如果在 OpsItem 中解析 OpsCenter,CloudWatch 将创建新的 OpsItem。)

如果您编辑警报并更改从它创建的任何新 OpsItems 的严重性或类别,则 Systems Manager 不会更改已从该警报创建的 OpsItems 的严重性或类别。您可以手动编辑 OpsItems 以更改详细信息(如严重性或类别)。