Configuração de um alarme existente do CloudWatch para criar OpsItems (programaticamente) - AWS Systems Manager

Configuração de um alarme existente do CloudWatch para criar OpsItems (programaticamente)

É possível configurar alarmes do Amazon CloudWatch para criar OpsItems programaticamente usando a AWS Command Line Interface (AWS CLI), modelos do AWS CloudFormation ou trechos de código Java.

Antes de começar

Caso edite um alarme existente programaticamente ou criar um alarme que crie OpsItems, você deverá especificar um nome do recurso da Amazon (ARN). Este ARN identifica o OpsCenter do Systems Manager como alvo para OpsItems criados a partir do alerta. Você pode personalizar o ARN para queOpsItemscriado a partir do alarme incluem informações específicas, como gravidade ou categoria. Cada ARN inclui as informações descritas na tabela a seguir.

Parâmetro Detalhes

Region (obrigatório)

ORegião da AWSonde o alarme existe. Por exemplo: us-west-2. Para obter informações sobre as Regiões da AWS onde você pode usar o OpsCenter, consulte AWS Systems Manager endpoints and quotas (Endpoints e cotas do Systems Manager).

account_ID (obrigatório)

O mesmoConta da AWSO ID usado para criar o alarme. Por exemplo: 123456789012. O ID da conta deve ser seguido por dois pontos (:) e o parâmetro opsitem, conforme mostrado nos exemplos a seguir.

severity (obrigatório)

Um nível de gravidade definido pelo usuário para OpsItems, criado no alerta. Valores válidos: 1, 2, 3, 4

Category (opcional)

Uma categoria para o OpsItems criada a partir do alerta. Valores válidos: Availability, Cost, Performance, Recovery e Security.

Crie o ARN usando a sintaxe a seguir. Este ARN não inclui o opcionalCategoryparâmetro .

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

Veja um exemplo a seguir.

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

Para criar um ARN que use oCategory, use a sintaxe a seguir.

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

Veja um exemplo a seguir.

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

Como configurar alarmes do CloudWatch para criar OpsItems (AWS CLI)

Este comando requer que você especifique um ARN para o parâmetro alarm-actions. Para obter informações sobre como criar o ARN, consulte Antes de começar.

Como configurar um alarme do CloudWatch para criar OpsItems (AWS CLI)
  1. Instale e configure a AWS Command Line Interface (AWS CLI), caso ainda não o tenha feito.

    Para obter informações, consulte Instalar ou atualizar a versão mais recente da AWS CLI.

  2. Execute o seguinte comando a fim de coletar informações sobre o alarme que você deseja configurar.

    aws cloudwatch describe-alarms --alarm-names "alarm name"
  3. Execute o comando a seguir para atualizar um alarme. Substitua cada espaço reservado para recurso de exemplo por suas próprias informações.

    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

    Aqui está um exemplo.

    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

Como configurar alarmes do CloudWatch para criar ou atualizar OpsItems (CloudFormation)

Esta seção inclui modelos do AWS CloudFormation que você pode usar para configurar alarmes do CloudWatch para criar ou atualizar OpsItems automaticamente. Cada modelo requer que você especifique um ARN para o parâmetro AlarmActions. Para obter informações sobre como criar o ARN, consulte Antes de começar.

Alarme de métrica: use o modelo do CloudFormation a seguir para criar ou atualizar um alarme de métrica do CloudWatch. O alarme especificado neste modelo monitora as verificações de status da instância do Amazon Elastic Compute Cloud (Amazon EC2). Se o alarme entrar no estado ALARM, ele criará um OpsItem no 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"}}] } } } }

Alarme composto: use o modelo do CloudFormation a seguir para criar ou atualizar um alarme composto. Um alarme compite consiste em vários alarmes métricos. Se o alarme entrar no estado ALARM, ele criará um OpsItem no 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" } } }

Como configurar alarmes do CloudWatch para criar ou atualizar OpsItems (Java)

Esta seção inclui trechos de código Java que você pode usar para configurar alarmes do CloudWatch para criar ou atualizar OpsItems automaticamente. Cada trecho requer que você especifique um ARN para o parâmetro validSsmActionStr. Para obter informações sobre como criar o ARN, consulte Antes de começar.

Um alarme específico: use o trecho de código Java a seguir para criar ou atualizar um alarme do CloudWatch. O alarme especificado neste modelo monitora as verificações de status de instância do Amazon EC2. Se o alarme entrar no estado ALARM, ele criará um OpsItem no 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); }

Atualizar todos os alarmes: use o trecho de código Java a seguir para atualizar todos os alarmes do CloudWatch em sua Conta da AWS para criar OpsItems quando um alarme entrar no estado 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; } } }