Configurazione di un allarme CloudWatch esistente per la creazione di OpsItems (a livello di programmazione) - AWS Systems Manager

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Configurazione di un allarme CloudWatch esistente per la creazione di OpsItems (a livello di programmazione)

È possibile configurare gli allarmi Amazon CloudWatch a livello di programmazione per la creazione di OpsItems utilizzando AWS Command Line Interface (AWS CLI), i modelli AWS CloudFormation o frammenti di codice Java.

Prima di iniziare

Se modifichi a livello di programmazione un allarme esistente o crei un allarme che crea OpsItems, devi specificare un nome della risorsa Amazon (ARN). Questo ARN identificherà Systems Manager OpsCenter come obiettivo per la creazione di OpsItems dall'allarme. È possibile personalizzare l'ARN in modo che OpsItems creati dall'allarme includano informazioni specifiche quali la gravità o la categoria. Ogni ARN include le informazioni descritte nella tabella seguente.

Parametro Informazioni

Region (obbligatorio)

La Regione AWS dove l'allarme è esistente. Ad esempio: us-west-2. Per informazioni su Regioni AWS dove è possibile utilizzare OpsCenter, consulta Endpoint e quote AWS Systems Manager.

account_ID (obbligatorio)

Lo stesso ID Account AWS utilizzato per creare l'allarme. Ad esempio: 123456789012. L'ID account deve essere seguito da due punti (:) e dal parametro opsitem come mostrato negli esempi seguenti.

severity (obbligatorio)

Un livello di gravità definito dall'utente per la creazione di OpsItems dall'allarme. Valori validi: 1, 2, 3, 4

Category (facoltativo)

categoria per la creazione di OpsItems dall'allarme. Valori validi: Availability, Cost, Performance, Recovery e Security.

Creare l'ARN utilizzando la seguente sintassi. Questo ARN non include l'opzione di parametro Category.

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

Di seguito è riportato un esempio.

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

Per creare un ARN che utilizza l'opzione Category utilizzare la seguente sintassi.

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

Di seguito è riportato un esempio.

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

Configurazione di allarmi CloudWatch per la creazione di OpsItems (AWS CLI)

Questo comando richiede di specificare un ARN per il parametro alarm-actions. Per informazioni su come creare l'ARN, consulta Prima di iniziare.

Configurazione di un allarme CloudWatch per la creazione di OpsItems (AWS CLI)
  1. Se non lo hai ancora fatto, installa e configura AWS Command Line Interface (AWS CLI).

    Per informazioni, consulta la pagina Installazione o aggiornamento della versione più recente di AWS CLI.

  2. Eseguire il seguente comando per raccogliere informazioni sull'allarme da configurare.

    aws cloudwatch describe-alarms --alarm-names "alarm name"
  3. Esegui il seguente comando per aggiornare un allarme. Sostituisci ciascun segnaposto delle risorse di esempio con le tue informazioni.

    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

    Ecco un esempio:

    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

Configurazione di allarmi CloudWatch per la creazione o l'aggiornamento di OpsItems (CloudFormation)

Questa sezione include i modelli AWS CloudFormation che è possibile utilizzare per configurare gli allarmi CloudWatch per la creazione o l'aggiornamento automatici di OpsItems. Ogni modello richiede di specificare un ARN per il parametro AlarmActions. Per informazioni su come creare l'ARN, consulta Prima di iniziare.

Allarme parametro: utilizza il modello CloudFormation seguente per creare o aggiornare un allarme parametro CloudWatch. L'allarme specificato in questo modello monitora i controlli dello stato delle istanze Amazon Elastic Compute Cloud (Amazon EC2). Se l'allarme entra nel ALARM, crea un OpsItem in 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"}}] } } } }

Allarme composito: utilizza il modello CloudFormation seguente per creare o aggiornare un allarme composito. Un allarme composito è costituito da più allarmi dei parametri. Se l'allarme entra nel ALARM, crea un OpsItem in 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" } } }

Configurazione di allarmi CloudWatch per la creazione o l'aggiornamento di OpsItems (Java)

Questa sezione include i frammenti di codice Java che è possibile utilizzare per configurare gli allarmi CloudWatch per la creazione o l'aggiornamento automatici degli OpsItems. Ogni frammento richiede di specificare un ARN per il parametro validSsmActionStr. Per informazioni su come creare l'ARN, consulta Prima di iniziare.

Un allarme specifico: utilizza il seguente frammento di codice Java per creare o aggiornare un allarme CloudWatch. L'allarme specificato in questo modello monitora i controlli dello stato delle istanze Amazon EC2. Se l'allarme entra nel ALARM, crea un OpsItem in 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); }

Aggiorna tutti gli allarmi: utilizza il seguente frammento di codice Java per aggiornare tutti gli allarmi CloudWatch in Account AWS per la creazione di OpsItems quando un allarme entra nello stato 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; } } }