为特定错误消息设置 Stackdriver 警报
Set stackdriver alerts for specific error messages
找不到一种干净的方法来设置 Stackdriver 对云函数中的错误的警报通知
我正在使用云函数将数据处理到云数据存储中。我希望收到 2 种类型的错误警报:
- 可能导致功能 'crash'
的技术异常
- 我们从云功能记录的自定义错误
我已经完成了以下操作,
- 创建了一个搜索特定错误的日志指标(尽管这不适用于 'crash',因为每次错误消息都可能不同)
- 使用如下代码部分中的参数在 Stackdriver 监控中为此指标创建警报
这是根据问题的答案完成的,
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 个问题,
这是满足我创建警报要求的正确方法吗?
如何仍能收到后续错误的警报通知?
如何自动/手动将事件设置为'resolved'?
通常,一旦警报政策停止触发,警报就会自行解决。您的警报未解决的问题是因为您的指标只写入非零点 - 如果没有错误,它不会写入零。这意味着该政策永远不会得到一个明确的信号,表明一切都很好,所以警报就在那里(它们会在 7 天后自动关闭,但我想这对你来说并不是那么有用)。
这是一个常见问题,而且很难解决。一种可能性是将您的策略编写为错误与非零值的比率,例如请求计数。只要请求计数不为零,如果没有错误,该比率将计算为零,因此有关该比率的警报将自动解决。不过,您需要小心舍入误差 - 如果您的请求计数足够高,您可能会错过一个错误,因为该比率可能会舍入为零。
Aaron Sher,Stackdriver 工程师
我遇到了类似的问题,每次至少都能收到一封邮件。 "trick" 似乎是使用 sum
而不是 count
与 for most recent value
结合使用 - 请参阅下面的屏幕截图。
这会导致 Stackdriver 在每次找到匹配的日志条目时发送一封邮件,并在一分钟后关闭问题。
我们通过将 insertId
作为我们为从 pods 运行 我们的 pods 运行 获取的每条日志记录创建的 log-based 指标的标签来解决这个问题服务。
在警报策略中,此标签有两方面的帮助:
- 我们按它分组(命名为
record_id
),它使每个事件都独一无二,因此无需等待其他事件得到解决就可以报告它,同时它可以立即得到解决。
- 我们在通知文档中使用它来直接 link 问题(日志记录)本身,这是一个不错的基本功能。
https://console.cloud.google.com/logs/viewer?project=MY_PROJECT&advancedFilter=insertId%3D%22${metric.label.record_id}%22
正如@Aaron Sher 在他的回答中提到的,这是一个棘手的问题。我们可能做了一些不推荐或效率不高的事情,但它工作正常,当然我们愿意接受改进建议。
找不到一种干净的方法来设置 Stackdriver 对云函数中的错误的警报通知
我正在使用云函数将数据处理到云数据存储中。我希望收到 2 种类型的错误警报:
- 可能导致功能 'crash' 的技术异常
- 我们从云功能记录的自定义错误
我已经完成了以下操作,
- 创建了一个搜索特定错误的日志指标(尽管这不适用于 'crash',因为每次错误消息都可能不同)
- 使用如下代码部分中的参数在 Stackdriver 监控中为此指标创建警报
这是根据问题的答案完成的, 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 个问题,
这是满足我创建警报要求的正确方法吗?
如何仍能收到后续错误的警报通知?
如何自动/手动将事件设置为'resolved'?
通常,一旦警报政策停止触发,警报就会自行解决。您的警报未解决的问题是因为您的指标只写入非零点 - 如果没有错误,它不会写入零。这意味着该政策永远不会得到一个明确的信号,表明一切都很好,所以警报就在那里(它们会在 7 天后自动关闭,但我想这对你来说并不是那么有用)。
这是一个常见问题,而且很难解决。一种可能性是将您的策略编写为错误与非零值的比率,例如请求计数。只要请求计数不为零,如果没有错误,该比率将计算为零,因此有关该比率的警报将自动解决。不过,您需要小心舍入误差 - 如果您的请求计数足够高,您可能会错过一个错误,因为该比率可能会舍入为零。
Aaron Sher,Stackdriver 工程师
我遇到了类似的问题,每次至少都能收到一封邮件。 "trick" 似乎是使用 sum
而不是 count
与 for most recent value
结合使用 - 请参阅下面的屏幕截图。
这会导致 Stackdriver 在每次找到匹配的日志条目时发送一封邮件,并在一分钟后关闭问题。
我们通过将 insertId
作为我们为从 pods 运行 我们的 pods 运行 获取的每条日志记录创建的 log-based 指标的标签来解决这个问题服务。
在警报策略中,此标签有两方面的帮助:
- 我们按它分组(命名为
record_id
),它使每个事件都独一无二,因此无需等待其他事件得到解决就可以报告它,同时它可以立即得到解决。 - 我们在通知文档中使用它来直接 link 问题(日志记录)本身,这是一个不错的基本功能。
https://console.cloud.google.com/logs/viewer?project=MY_PROJECT&advancedFilter=insertId%3D%22${metric.label.record_id}%22
正如@Aaron Sher 在他的回答中提到的,这是一个棘手的问题。我们可能做了一些不推荐或效率不高的事情,但它工作正常,当然我们愿意接受改进建议。