如何将GCP告警策略的MQL转换为PromQL并按实例名聚合?
GCP MQL转PromQL:按实例名称聚合并实现告警条件匹配
原MQL查询(默认聚合)
fetch gce_instance | metric 'agent.googleapis.com/cpu/load_5m' | group_by 5m, [value_load_5m_mean: mean(value.load_5m)] | every 5m | condition val() > 70 '1'
目标MQL查询(按实例名称聚合)
fetch gce_instance | metric 'agent.googleapis.com/cpu/load_5m' | group_by 5m, [metric_value: mean(value.load_5m)] | add [metadata.system.name] | every 5m | condition val() > 70 '1'
问题说明
需要将上述目标MQL转换为PromQL,要求按元数据标签metadata.system.name(对应PromQL中的metadata_system_name)聚合,同时匹配MQL中condition val()>70 '1'的逻辑。之前编写的PromQL存在以下问题:
- 无告警红线触发
- 聚合逻辑不符合预期
- 错误使用
>0.7篡改数据
修正后的PromQL方案
avg_over_time(agent_googleapis_com_cpu_load_5m{monitored_resource="gce_instance"}[5m]) by (project_id, instance_id, metadata_system_name) > bool 70
关键修正点说明
- 单位对齐:MQL中阈值为70,PromQL需保持一致,之前的
>0.7属于单位误解,导致数据异常。 - 聚合逻辑修正:移除多余的
sum聚合,avg_over_time已针对单个实例的时间序列计算5分钟均值,直接按目标标签分组即可匹配MQL的group_by逻辑。 - 条件匹配等价实现:使用
bool修饰符实现与MQLcondition val()>70 '1'一致的输出——满足条件时返回1,不满足时返回0。若用于告警策略,可省略bool,直接使用>70,此时Prometheus会返回所有超过阈值的时间序列,供告警系统触发通知。
内容的提问来源于stack exchange,提问作者red888
相关产品推荐
相关产品推荐

