AWS CloudWatch记录已处理和未处理的异常的度量标准

时间:2016-12-06 18:35:55

标签: amazon-web-services amazon-cloudwatchlogs amazon-cloudwatch-metrics

我有一个关于AWS CloudWatch Logs的有趣场景。我目前使用log4net并使用CloudWatch Logs代理将所有日志泵入CloudWatch Logs。我在CloudWatch中有一个度量标准,它基本上扫描[ERROR]条目,并且当它们发生时,警报将它们传递给另一个服务以进行开发通知(阈值> = 1,周期 - 1分钟)。所有这一切都很有效。

现在我想以不同的方式处理某些错误。例如,基于异常类型,我希望仅在N分钟期间发生X次发生时触发警报。因此,在这种情况下,我会为此条件创建一个度量标准,然后为其分配警报。问题是在这个问题的第一部分中解释的一般误差度量仍在跟踪每个单独的错误发生。所以现在我收到了多个通知。每个错误一个,X个出现后一个。

我可以禁用常规错误指标,但是我失去了跟踪未处理异常的能力。我必须为每个可能的例外都有一个指标。我错过了什么吗?处理此问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

您通常可以通过创建函数来进行处理,然后再收到通知。最简单的方法是将AWS Lambda函数订阅到未处理的错误警报的SNS主题。取消订阅主题,并且只有在您定义的任何条件通过后,lambda函数才会通知您而不是SNS。

对于这种情况,听起来您希望在聚合度量标准处于警报状态时,根据与聚合度量标准匹配的未处理错误来抑制来自单个指标的通知。

<强>伪代码:

  • 使用DescribeAlarms API获取聚合未处理异常警报的状态。如果聚合警报在“警报”中。州,继续。
  • 使用FilterLogEvents API获取匹配的日志事件:
    • 您的日志组
    • 您的日志流
    • FilterPattern:您个人未处理的异常警报的指标过滤器
    • StartTime:闹钟时间戳 - 句号
    • EndTime:闹钟时间戳
  • 使用GetLogEvents API获取所有匹配的日志事件:
    • 您的日志组
    • 您的日志流
    • StartTime:闹钟时间戳 - 句号
    • EndTime:闹钟时间戳
  • 如果&#39;所有事件&#39;计算和过滤事件&#39;计数匹配,并且聚合报警处于报警状态,不发送通知。否则,使用SES或SNS API向您发送通知。

如果您想继续通过SNS获得通知,请不要重复使用警报用于触发lambda的相同主题 - 为您的移动/短信通知创建单独的主题。

我不确定这是否比log4net更容易,但如果您打算对日志进行此类后处理,最好直接向SNS发送未处理的例外,发布首先在lambda中处理,然后从lambda函数写出cloudwatch日志。此更改将允许您通过SNS消息有效内容检查未处理的异常,并为您提供有关如何抑制重叠问题的其他控制。