You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为GCP Cloud Monitoring设置基于时段的动态告警阈值?

问题描述

我有一个Google Dataflow Pipeline,会记录如下格式的JSON日志:

jsonPayload: {
    metric: "viewings-per-second",
    time: "2023-03-28 17:16:14",
    value: 15
}

已创建基于日志的指标(Log-based-metric)提取value字段,用于Cloud Monitoring的固定阈值告警。但实际需求是设置两个阈值:高峰时段(6:00-次日1:00)和非高峰时段(1:00-6:00)。

请问是否可以创建动态阈值?是否可借助Monitoring Query Language(MQL)实现?

我想到一个替代方案:创建两个基于日志的指标,通过日志查询语言(LQL)添加时段条件。在日志资源管理器中测试时,以下查询可正常运行:

jsonPayload.time>="2023-03-28 06:00:00"

但无法从datetime值中单独提取小时部分。

最后的办法是修改Dataflow Pipeline,使其仅记录小时或时间信息,但想了解是否有更优方案。

编辑:
当前使用的LQL如下:

logName="projects/example-project/logs/dataflow-viewings-per-second"
jsonPayload.metric="viewings-per-second"
jsonPayload.time>="2023-03-28 06:00:00"
解决方案

1. 用MQL实现动态阈值(推荐)

无需拆分指标,直接在Cloud Monitoring告警策略中用MQL根据时段设置不同阈值:

基于日志自带时间戳的查询

fetch global
| metric 'logging.googleapis.com/user/viewings_per_second'
| align rate(1m)
| condition val() > (if hour(timestamp) >=6 AND hour(timestamp) <25 then 20 else 5)

说明:

  • hour(timestamp) 提取日志系统自带时间戳的小时数
  • 高峰时段(6:00-次日1:00)阈值设为20,非高峰(1:00-6:00)设为5,可按需调整数值

基于日志内容中jsonPayload.time的查询

如果必须以日志里的自定义时间字段为准,先解析字符串为时间类型再提取小时:

fetch global
| metric 'logging.googleapis.com/user/viewings_per_second'
| parse jsonPayload.time as string log_time
| let log_hour = hour(parse_time("%Y-%m-%d %H:%M:%S", log_time))
| align rate(1m)
| condition val() > (if log_hour >=6 OR log_hour <1 then 20 else 5)

2. 用LQL拆分两个日志指标

创建日志指标时,通过正则提取小时部分过滤时段:

  • 高峰时段指标过滤条件:
logName="projects/example-project/logs/dataflow-viewings-per-second"
jsonPayload.metric="viewings-per-second"
REGEXP_EXTRACT(jsonPayload.time, r" (\d{2}):") >= "06" OR REGEXP_EXTRACT(jsonPayload.time, r" (\d{2}):") < "01"
  • 非高峰时段指标过滤条件:
logName="projects/example-project/logs/dataflow-viewings-per-second"
jsonPayload.metric="viewings-per-second"
REGEXP_EXTRACT(jsonPayload.time, r" (\d{2}):") >= "01" AND REGEXP_EXTRACT(jsonPayload.time, r" (\d{2}):") < "06"

说明:用REGEXP_EXTRACT匹配jsonPayload.time中空格后的两位小时数字,再做时段判断。

3. 修改Dataflow Pipeline(备选)

如果上述方法不适用,可修改Pipeline在日志中额外添加hour字段:

jsonPayload: {
    metric: "viewings-per-second",
    time: "2023-03-28 17:16:14",
    hour: 17,
    value: 15
}

后续LQL过滤或MQL查询会更简洁直接。

内容的提问来源于stack exchange,提问作者Shahid Thaika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 05:53:16