Cloudformation ELB Cloudwatch Alarmes InsufficientData

3

Eu configurei um monte de alarmes do cloudwatch para o meu serviço usando cloudformation. Todos os meus alarmes funcionam, exceto os alarmes do ELB. Eles sempre mostram apenas dados insuficientes. Eu posso entrar no console e configurar os alarmes manualmente, mas quero poder usar modelos de cloudformation para criar tudo. Eu devo ter um erro em algum lugar do meu json para o alarme. Aqui está um deles:

"ELBHighLatencyAlarm": {
    "Type": "AWS::CloudWatch::Alarm",
    "Properties": {
        "Namespace": "AWS/ELB",
        "AlarmName": { "Fn::Join" : ["", [ { "Ref" : "AWS::StackName"}, "-ELB-ELBHighLatencyAlarm"]]},
        "AlarmDescription":  { "Fn::Join" : ["", [ { "Ref" : "AWS::StackName"}, "-ELB-ELBHighLatencyAlarm"]]},
        "ComparisonOperator": "GreaterThanThreshold",
        "Threshold": "0.5",
        "EvaluationPeriods": "1",
        "Period": "300",
        "MetricName": "Latency",
        "Statistic": "Average",
        "OKActions": [],
        "AlarmActions": [ { "Ref": "PagerDutySNSTopicArn" } ],
        "InsufficientDataActions": [ { "Ref": "PagerDutySNSTopicArn" } ],
        "Dimensions": [ {
            "Name": "ElasticLoadBalancer",
            "Value": { "Ref": "WebServerLoadBalancer" }
        }]
    }
}

Você vê algo de errado com isso?

    
por gprime 20.10.2015 / 16:28

2 respostas

2

Sua seção "Dimensions" não está usando o valor "Name" adequado. Se você substituir:

 "Dimensions": [ {
            "Name": "ElasticLoadBalancer",
            "Value": { "Ref": "WebServerLoadBalancer" }
        }]

com

 "Dimensions": [ {
            "Name": "LoadBalancerName",
            "Value": { "Ref": "WebServerLoadBalancer" }
        }]

você deve descobrir que seu alarme funcionará.

    
por 04.05.2016 / 20:57
3

Posso confirmar o que o Dojo disse acima. Embora o texto na descrição do bloco de dimensões faça parecer que não é necessário e as sequências / valores são arbitrários, existe uma lista específica de nomes que podem ser usados para cada tipo de serviço para o qual você deseja criar um alarme. Essa lista mapeia o tipo de serviço para os valores permitidos no bloco de dimensões, o que faz com que seus alarmes funcionem corretamente.

Parece-me que o bloco de dimensões é uma forma de filtrar eventos. Portanto, se você quiser ver CPUUtilization para um cluster, forneça ClusterName. Se você deseja o serviço específico de um cluster, forneça 2 entradas para o bloco de dimensões. ClusterName e ServiceName.

link

A única diferença entre os dois exemplos abaixo é o campo Dimensions.Name.

Exemplo que NÃO funcionará

"CPUUtilizationScaleInAlarm": {
  "Type": "AWS::CloudWatch::Alarm",
  "Properties": {
    "ActionsEnabled": true,
    "AlarmActions": [
      {
        "Ref": "ESCServiceScaleInPolicy"
      }
    ],
    "AlarmDescription": "Scale in in response to CPUUtilization being low",
    "AlarmName": "CPUUtilizationScaleIn",
    "ComparisonOperator": "LessThanOrEqualToThreshold",
    "Dimensions": [
      {
        "Name": "ECService",
        "Value": "MyAwesomeService"
    ],
    "EvaluationPeriods": 1,
    "MetricName": "CPUUtilization",
    "Namespace": "AWS/ECS",
    "Period": 60,
    "Statistic": "Average",
    "Threshold": 25,
    "Unit": "Percent"
  }
}

Exemplo que WILL funciona

"CPUUtilizationScaleInAlarm": {
  "Type": "AWS::CloudWatch::Alarm",
  "Properties": {
    "ActionsEnabled": true,
    "AlarmActions": [
      {
        "Ref": "ESCServiceScaleInPolicy"
      }
    ],
    "AlarmDescription": "Scale in in response to CPUUtilization being low",
    "AlarmName": "CPUUtilizationScaleIn",
    "ComparisonOperator": "LessThanOrEqualToThreshold",
    "Dimensions": [
      {
        "Name": "ServiceName",
        "Value": "MyAwesomeService"
    ],
    "EvaluationPeriods": 1,
    "MetricName": "CPUUtilization",
    "Namespace": "AWS/ECS",
    "Period": 60,
    "Statistic": "Average",
    "Threshold": 25,
    "Unit": "Percent"
  }
}
    
por 04.01.2017 / 01:14