Stackdriver Monitoring 警报:我可以使用函数代替条件阈值的常量吗?

Stackdriver Monitoring alerting: can I use functions instead of constants for Condition Threshold?

我正在玩弄 Stackdriver Monitoring 警报并使用了 Prometheus/Alertmanager 一点我对似乎缺乏选项感到非常失望。

例如,我有一种资源每天发出一个数据点,即特定资源年龄的纪元秒。我想创建一个警报,将数据点与当前时间进行比较,如果资源太旧,则应触发警报。

在 Prometheus 中会这样表达:

- alert: TooOldAlert
  expr: sum(time() - datapoint_epoch_second) BY (datapoint_group) > 48 * 60 * 60
  for: 1m
  labels:
    severity: critical

所以如果数据点的存在时间超过 48 小时,我会收到警报。

Stackdriver Monitoring 警报中似乎不存在这样的选项。我也尝试检查 API / 编程接口,但我也没有找到。

TL;DR:Stackdriver Monitoring 警报中是否存在内置函数?

Stackdriver Alerting 有内置功能。但它们必须与聚合、过滤、比较和创建比率有关。请参阅有关警报策略的文档 here. An example for setting them up is here

但是,没有 time() 函数可用于在这些表达式中获取纪元时间。这就是问题所在。

为了将您的年龄警报移植到 Stackdriver,一种方法是更改​​日志 "up-stream",以便您的服务发出一个日志,说明它相对于 "now" 的年龄。在这种情况下,您可以过滤年龄而无需调用现在是什么时间。

如果您无法更改服务中的日志结构,您可以选择捕获日志 "down-stream" 并对其进行转换。一种方法是将此 Stackdriver 日志下沉到 Pub/Sub,并让该事件触发 Cloud Function。示例指南是 here