在多个SQS队列上创建CloudWatch报警

4
假设我有N个EC2实例在自动扩展组中,每个实例都正在轮询M个SQS队列。如果可能的话,我如何在所有SQS队列上创建一个基于累计 ApproximateNumberOfMessagesVisible 的警报?
2个回答

4

目前还没有可见消息累计计数指标。

以下是解决方法:

创建一个Lambda/cron作业,可以轮询队列,在每个队列上获取ApproximateNumberOfMessages,并将总消息更新为自定义Cloudwatch指标。

QueueAttributes:

http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_GetQueueAttributes.html

自定义 Cloudwatch 指标:

http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html

你可以创建一个Lambda(无服务器),或者如果你想要基于服务器,你可以使用AWS CloudWatch的CLI轮询并更新总计数到自定义CloudWatch指标中。
一旦你有了CloudWatch指标,你就可以基于这些数字创建警报。
希望对你有所帮助。

现在不再是无法在警报中获取指标的累计计数的情况了。请参见 https://dev59.com/LLLma4cB1Zd3GeqPWipP#54908049 以定义一个基于两个ApproximateNumberOfMessages值之和的新指标。 - Ing. Luca Stucchi

2
您可以使用云形成定义警报。关键在于定义自定义表达式,其中每个表达式都具有一个或多个指标按队列分类。尺寸允许将度量与队列关联。
MyDeadLetterQueueAlarm:
  Type: AWS::CloudWatch::Alarm
  Properties:
    AlarmName: my-dlq-alarm
    AlarmDescription: 'Alarm when any Dead letter queue has items.'
    Metrics:
    - Id: summary
      Label: Dead Letter Queues Alarm
      Expression: IF(dlq1 > 1, 1, 0) OR IF(dlq2 > 1, 1, 0)
      ReturnData: true
    - Id: dlq1
      MetricStat:
        Metric:
          Namespace: AWS/SQS
          MetricName: ApproximateNumberOfMessagesVisible
          Dimensions:
          - Name: QueueName
            Value: !GetAtt
            - MyDeadLetterQueue1
            - QueueName
        Stat: Sum
        Period: 300
      ReturnData: false
    - Id: dlq2
      MetricStat:
        Metric:
          Namespace: AWS/SQS
          MetricName: ApproximateNumberOfMessagesVisible
          Dimensions:
          - Name: QueueName
            Value: !GetAtt
            - MyDeadLetterQueue2
            - QueueName
        Stat: Sum
        Period: 300
      ReturnData: false
    EvaluationPeriods: 1
    DatapointsToAlarm: 1
    Threshold: 0
    ComparisonOperator: GreaterThanThreshold
    TreatMissingData: notBreaching
    AlarmActions:
      - !Ref MyTopicArn

我认为你应该将表达式相加以获得累积值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接