为特定错误消息设置 Stackdriver 警报

Set stackdriver alerts for specific error messages

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

我正在使用云函数将数据处理到云数据存储中。我希望收到 2 种类型的错误警报:

  1. 可能导致功能 'crash'
  2. 的技术异常
  3. 我们从云功能记录的自定义错误

我已经完成了以下操作,

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

对于条件的第一次触发,我收到了一封电子邮件。但是,在随后的触发器中,可以说在第二天,我没有。此外,该事件处于 'opened' 状态。

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. 如何自动/手动将事件设置为'resolved'?

通常,一旦警报政策停止触发,警报就会自行解决。您的警报未解决的问题是因为您的指标只写入非零点 - 如果没有错误,它不会写入零。这意味着该政策永远不会得到一个明确的信号,表明一切都很好,所以警报就在那里(它们会在 7 天后自动关闭,但我想这对你来说并不是那么有用)。

这是一个常见问题,而且很难解决。一种可能性是将您的策略​​编写为错误与非零值的比率,例如请求计数。只要请求计数不为零,如果没有错误,该比率将计算为零,因此有关该比率的警报将自动解决。不过,您需要小心舍入误差 - 如果您的请求计数足够高,您可能会错过一个错误,因为该比率可能会舍入为零。

Aaron Sher,Stackdriver 工程师

我遇到了类似的问题,每次至少都能收到一封邮件。 "trick" 似乎是使用 sum 而不是 countfor most recent value 结合使用 - 请参阅下面的屏幕截图。

这会导致 Stackdriver 在每次找到匹配的日志条目时发送一封邮件,并在一分钟后关闭问题。

我们通过将 insertId 作为我们为从 pods 运行 我们的 pods 运行 获取的每条日志记录创建的 log-based 指标的标签来解决这个问题服务。

在警报策略中,此标签有两方面的帮助:

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

正如@Aaron Sher 在他的回答中提到的,这是一个棘手的问题。我们可能做了一些不推荐或效率不高的事情,但它工作正常,当然我们愿意接受改进建议。