为特定错误消息设置堆栈驱动程序警报

时间:2019-02-05 11:52:08

标签: google-cloud-functions policy stackdriver alerts

找不到一种干净的方法来针对云功能中的错误设置Stackdriver警报通知

我正在使用云功能将数据处理到云数据存储中。我想提醒两种错误:

  1. 可能导致功能崩溃的技术异常
  2. 我们正在从云功能记录的自定义错误

我已经完成了以下工作

  • 创建了一个用于搜索特定错误的日志指标(尽管此错误不适用于“崩溃”,因为错误消息每次均可能不同)
  • 使用以下代码部分中的参数在Stackdriver监控中为此指标创建警报

这是根据问题的答案完成的, how to create alert per error in stackdriver

对于这种情况的第一个触发条件,我会收到一封电子邮件。但是,在随后的触发条件下,让我们在第二天说,我不会。事件也处于“打开”状态。

Resource type: cloud function
Metric:from point 2 above
Aggregation: Aligner: count, Reducer: None, Alignment period: 1m
Configuration: Condition triggers if: Any time series violates, Condition: 
is above, Threshold: 0.001, For: 1 min

所以我有3个问题,

  1. 这是满足我创建警报要求的正确方法吗?

  2. 如何继续接收有关后续错误的警报通知?

  3. 如何自动/手动将事件设置为“已解决”?

3 个答案:

答案 0 :(得分:1)

通常,警报一旦停止触发,警报便会自行解决。警报无法解决的问题是,您的指标仅写入非零点-如果没有错误,则不会写入零。这意味着该策略永远不会收到明确表示一切正常的信号,因此警报就在那里(它们会在7天后自动关闭,但我想这对您没有太大用处)。

这是一个常见问题,需要解决的棘手问题。一种可能是将策略写为错误与非零值(例如请求计数)的比率。只要请求计数不为零,如果没有错误,比率将计算为零,因此有关比率的警报将自动解决。但是,您需要对舍入错误有所注意-如果请求计数足够高,则由于该比率可能舍入为零,因此您可能会错过一个错误。

Stackdriver工程师Aaron Sher

答案 1 :(得分:1)

我遇到了类似的问题,并设法至少每次都收到一封邮件。 “技巧”似乎是结合使用sum而不是countfor most recent value-参见下面的屏幕截图。

这会导致Stackdriver每当找到匹配的日志条目时就发送邮件,并在一分钟后解决问题。

enter image description here

答案 2 :(得分:0)

我们通过将insertId标记为基于日志的度量标准的标签来解决此问题,该度量标准是针对从运行服务的Pod中获得的每个日志记录创建的。 enter image description here

在警报策略中,此标签有两点帮助:

  1. 我们按它分组(命名为record_id),这是使每个事件都唯一的原因,因此无需等待其他事件得到解决就可以立即得到报告。 enter image description here
  2. 我们在通知的文档中使用了它,以包含指向问题(日志记录)本身的直接链接,这是一个不错且必不可少的功能。 https://console.cloud.google.com/logs/viewer?project=MY_PROJECT&advancedFilter=insertId%3D%22${metric.label.record_id}%22

正如@Aaron Sher在回答中提到的那样,这是一个棘手的问题。我们可能做过一些不推荐或效率不高的事情,但是效果很好,我们当然愿意提出改进建议。