我已经在GCP MOnitoring中创建了一个警报策略,当某种日志消息停止出现时(dead man's switch),该策略将通知我。我已经创建了一个带有标签"客户"的基于日志的指标,我使用该标签对指标进行分组,并获得每个客户端的时间序列。我一直在使用"缺乏数据"。作为警报的触发器。这一切都工作得很好,直到…
在最近的更改之后,日志现在也来自不同的资源,因此需要跨这些资源组合度量。我可以使用QML
实现这一点{ fetch gce_instance::logging.googleapis.com/user/ping
| group_by [metric.client], sum(val())
| every 30m
; fetch global::logging.googleapis.com/user/ping
| group_by [metric.client], sum(val())
| every 30m }
| union
注意,我需要用相同的桶大小(30m)对齐两个系列,以便能够连接它们,这是有意义的。我注意到时间序列的值是"未定义"。在那些没有度量数据的桶中(通过下载查询的CSV)。
要使用这个查询创建一个警报,我尝试这样做:
{ fetch gce_instance::logging.googleapis.com/user/ping
| group_by [metric.client], sum(val())
| every 30m
; fetch global::logging.googleapis.com/user/ping
| group_by [metric.client], sum(val())
| every 30m }
| union
| absent_for 1h
如果我查看此查询的CSV输出,它并没有反映时间序列缺少度量数据,这可能是因为值"未定义";不符合缺失数据的条件
是否有一种方法来检测"联合"的数据缺失?跨多个资源的度量(因此是一致的)?
更新1
我试过这个,这似乎让我有一些方式。我非常感谢大家对这个方法的意见。
{
fetch gce_instance::logging.googleapis.com/user/ping
| group_by [metric.client], sum(val())
;
fetch global::logging.googleapis.com/user/ping
| group_by [metric.client], sum(val())
}
| union
| absent_for 1h
我已确定如下解决方案,
{
fetch gce_instance::logging.googleapis.com/user/ping
| group_by [metric.client]
;
fetch global::logging.googleapis.com/user/ping
| group_by [metric.client]
}
| union
| absent_for 1h
| every 30m
注意:
group_by [metric.client]
符合来自不同资源的表,这允许union
工作absent_for
使用默认周期或以下每个 指定的周期对齐输入时间序列
我发现调试这些MQL查询非常困难,特别是要确认absent_for
将触发警报。我意识到我可以使用value [active]
来显示活动列的图(absent_for
产生),这让我相信我的警报实际上是要工作的。
{
fetch gce_instance::logging.googleapis.com/user/ping
| group_by [metric.client]
;
fetch global::logging.googleapis.com/user/ping
| group_by [metric.client]
}
| union
| absent_for 1h
| value [active]