設定 CloudWatch 以建立來自警示的 OpsItems - AWS Systems Manager

設定 CloudWatch 以建立來自警示的 OpsItems

當警示進入 ALARM 狀態時,您可以設定 Amazon CloudWatch 自動建立 OpsCenter (AWS Systems Manager 功能) 中的 OpsItem。這樣做可讓您從單一主控台快速診斷和修復 AWS 資源。

例如,如果 Application Load Balancer 產生的 HTTP 錯誤突然增加,則您可以設定警示來自動建立 OpsItem。為了協助您診斷問題,OpsItem 包含與上下文相關的資訊,例如受監控 AWS 資源的名稱和 ID、警示詳細資訊、警示歷史記錄,以及警示時間表圖形。對於受監控 AWS 資源,OpsCenter 會彙總 AWS Config、AWS CloudTrail 日誌和 EventBridge 的資訊,因此您無需在調查期間瀏覽多個主控台頁面。您可以在 OpsCenter 中執行 Systems Manager Automation Runbook,以輕鬆修復。

這項功能適用於所有 Systems Manager 可用的 AWS 區域。請注意以下與此功能相關的重要詳細資訊:

  • CloudWatch 可以在 OpsCenter 中建立 OpsItems 用於指標和複合警示。

  • 警示必須使用預設 aws 命名空間,例如 AWS/EC2 (僅限指標警示)。

  • 當您設定警示以建立 OpsItems 時,CloudWatch 會在 AWS Identity and Access Management (IAM) 中自動建立新的服務連結角色。新角色已命名為 AWSServiceRoleForCloudWatchAlarms_ActionSSM。如需 CloudWatch 服務連結角色的詳細資訊,請參閱《Amazon CloudWatch 使用者指南》中的使用 CloudWatch 的服務連結角色

  • OpsCenter 使用重複資料刪除功能,禁止單一警示建立多個 OpsItems。如需更多詳細資訊,請參閱 減少重複的 OpsItems

如需有關如何建立會自動在 OpsCenter 中建立 OpsItems 的新警示,請參閱《Amazon CloudWatch 使用者指南》中的根據靜態閾值建立 CloudWatch 警示。在該處理程序的步驟 8 中,選擇 Systems Manager OpsCenter action (Systems Manager OpsCenter 動作),然後完成處理程序。

手動設定現有警示以建立 OpsItems (主控台)

使用下列處理程序編輯現有的警示,並設定 Systems Manager (Systems Manager) 作為該警示的目標。當警示進入 ALARM 狀態時,CloudWatch 會在 OpsCenter 中建立新的 OpsItem。

編輯現有的警示,並將 Systems Manager 設定為該警示的目標

  1. 透過 https://console.aws.amazon.com/cloudwatch/ 開啟 CloudWatch 主控台。

  2. 在導覽窗格中,選擇 Alarms (警示)。

  3. 選取警示,然後選擇 Actions (動作)、Edit (編輯)。

  4. (選用) 變更 Metrics (指標) 和 Conditions (條件) 選項中的設定,然後選擇 Next (下一步)。

  5. Systems Manager (Systems Manager) 區段中,選擇 Add Systems Manager OpsCenter action (新增 Systems Manager OpsCenter 動作)。

  6. 對於 Severity (嚴重性),選擇數字。

    注意

    嚴重性是使用者定義的值。您或您的組織會決定每個嚴重性值的含義,以及與每個嚴重性相關的任何服務水準協議。

  7. (選用) 對於 Category (類別),選擇一個選項。

  8. 選擇 Next (下一步) 並完成精靈。

從顯示 CloudWatch alarm - 'alarm_name' is in ALARM state (CloudWatch 警示 - 'alarm_name' 處於警示狀態) 之警示建立的 OpsItem。若要檢視從警示建立之特定 OpsItem 的詳細資訊,選擇 OpsItem,然後選擇 Related resource details (相關資源詳細資訊) 索引標籤。

注意

如果警報建立了 OpsItem 而且如果您指定了重複資料刪除字串,則警示不會建立額外的 OpsItems,即使您在 CloudWatch 中編輯警示也是如此。(如果在 OpsCenter 中解析 OpsItem,CloudWatch 將建立新的 OpsItem。)

如果您編輯警示並變更任何從中建立之新 OpsItems 的嚴重性或類別,Systems Manager 將不會變更已從該警示建立之 OpsItems 的嚴重性和類別。您可以手動編輯 OpsItems 來變更詳細資訊,例如嚴重性或類別。

以程式設計的方式設定 CloudWatch 警示來建立 OpsItems

您可以以程式設計方式設定 Amazon CloudWatch 警示,以使用 AWS Command Line Interface (AWS CLI)、AWS CloudFormation 範本或 Java 程式碼片段建立 OpsItems。

開始之前

如果以程式設計方式編輯現有的警示,或建立新的警示 (該警示會建立 OpsItems),則您必須指定 Amazon 資源名稱 (ARN)。此 ARN 可識別 Systems Manager OpsCenter 作為從警示建立之 OpsItems 的目標。您可以自訂 ARN,以便從警示建立之 OpsItems 包含特定資訊,例如嚴重性或類別。每個 ARN 包含下表中所述的資訊。

參數 詳細資訊

區域 (必填)

警示存在的 AWS 區域。例如:us-west-2。如需您可在其中使用 OpsCenter 之 AWS 區域 相關資訊,請參閱 AWS Systems Manager 端點和配額

AWS 帳戶 ID (必填)

相同 AWS 帳戶 ID 用於建立警示。例如:123456789012。帳戶 ID 後面必須加上冒號 (:) 和參數 opsitem,如下列範例所示。

嚴重性 (必填)

從警示建立之 OpsItems 的使用者定義嚴重性層級。有效值:1、2、3、4

由於這是使用者定義的值,因此您或您的組織會決定每個嚴重性值的含義,以及與每個嚴重性相關的任何服務水準協議。

類別 (選用)

從警示建立之 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)

使用下列命令設定現有的警示,以藉由 AWS CLI 建立 OpsItems。此命令要求您為 alarm-actions 參數指定 Amazon 資源名稱 (ARN)。如需如何建立 ARN 的相關資訊,請參閱 開始之前

設定現有警示以建立 OpsItems

  1. 如果您尚未安裝並設定 AWS Command Line Interface (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 & 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

從顯示 CloudWatch alarm - 'alarm_name' is in ALARM state (CloudWatch 警示 - 'alarm_name' 處於警示狀態) 之警示建立的 OpsItem。若要檢視從警示建立之特定 OpsItem 的詳細資訊,選擇 OpsItem,然後選擇 Related resource details (相關資源詳細資訊) 索引標籤。

注意

如果警報建立了 OpsItem 而且如果您指定了重複資料刪除字串,則警示不會建立額外的 OpsItems,即使您在 CloudWatch 中編輯警示也是如此。(如果在 OpsCenter 中解析 OpsItem,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 狀態,它會在 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"}}] } } } }

複合警示

請採用下列 AWS 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" } } }

從顯示 CloudWatch alarm - 'alarm_name' is in ALARM state (CloudWatch 警示 - 'alarm_name' 處於警示狀態) 之警示建立的 OpsItem。若要檢視從警示建立之特定 OpsItem 的詳細資訊,選擇 OpsItem,然後選擇 Related resource details (相關資源詳細資訊) 索引標籤。

注意

如果警報建立了 OpsItem 而且如果您指定了重複資料刪除字串,則警示不會建立額外的 OpsItems,即使您在 CloudWatch 中編輯警示也是如此。(如果在 OpsCenter 中解析 OpsItem,CloudWatch 將建立新的 OpsItem。)

如果您編輯警示並變更任何從中建立之新 OpsItems 的嚴重性或類別,Systems Manager 將不會變更已從該警示建立之 OpsItems 的嚴重性和類別。您可以手動編輯 OpsItems 來變更詳細資訊,例如嚴重性或類別。

使用 Java 程式碼片段將 CloudWatch 警示設定為自動建立 OpsItems

本節包含 Java 程式碼片段,您可以用來設定 CloudWatch 警示以自動建立 OpsItems。每個程式碼片段都要求您為 validSsmActionStr 參數指定 Amazon 資源名稱 (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 程式碼片段來更新 AWS 帳戶 中的所有 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; } } }

從顯示 CloudWatch alarm - 'alarm_name' is in ALARM state (CloudWatch 警示 - 'alarm_name' 處於警示狀態) 之警示建立的 OpsItem。若要檢視從警示建立之特定 OpsItem 的詳細資訊,選擇 OpsItem,然後選擇 Related resource details (相關資源詳細資訊) 索引標籤。

注意

如果警報建立了 OpsItem 而且如果您指定了重複資料刪除字串,則警示不會建立額外的 OpsItems,即使您在 CloudWatch 中編輯警示也是如此。(如果在 OpsCenter 中解析 OpsItem,CloudWatch 將建立新的 OpsItem。)

如果您編輯警示並變更任何從中建立之新 OpsItems 的嚴重性或類別,Systems Manager 將不會變更已從該警示建立之 OpsItems 的嚴重性和類別。您可以手動編輯 OpsItems 來變更詳細資訊,例如嚴重性或類別。