如何使用Monitoring API创建基于日志的告警,Java端如何构造对应Condition?
基于日志的告警Condition构造方案
首先纠正你的判断偏差:基于日志查询的告警Condition,在Monitoring API中通过Condition.Match(匹配类型条件)实现,你之前考虑的Absent、Threshold是针对时间序列指标的场景,日志匹配场景无需使用这几个类型,也不需要额外转换为MQL查询。
具体实现步骤
- 第一步:构造日志查询过滤语句,规则和你在UI上填写的日志查询规则完全一致即可,比如匹配GCE实例错误日志的规则示例:
resource.type="gce_instance" severity>=ERROR "runtime exception" - 第二步:使用
AlertPolicy.Condition.Match构造器构建匹配条件,核心需填写filter字段(即上述日志查询语句)、duration字段(告警触发的持续观察窗口,填0s表示匹配到日志就立即触发) - 第三步:将构造好的Match对象设置到Condition的
conditionMatch属性中,再放入告警策略的条件列表即可
Java代码示例
import com.google.monitoring.v3.AlertPolicy; import com.google.monitoring.v3.AlertPolicy.Condition; import com.google.protobuf.Duration; // 构造日志匹配条件 Condition.Match logMatchCondition = Condition.Match.newBuilder() // 替换为你自己的日志查询过滤规则,和UI输入格式完全一致 .setFilter("resource.type=\"cloud_function\" severity=ERROR \"function execution failed\"") // 设置观察窗口,示例为0秒,即匹配到日志立即触发告警 .setDuration(Duration.newBuilder().setSeconds(0).build()) .build(); // 组装为告警策略的Condition对象 Condition condition = Condition.newBuilder() .setDisplayName("云函数执行错误日志告警") .setConditionMatch(logMatchCondition) .build(); // 后续将该Condition添加到AlertPolicy的conditions列表即可完成告警策略构造 AlertPolicy alertPolicy = AlertPolicy.newBuilder() .setDisplayName("自定义基于日志的告警策略") .addConditions(condition) // 补充其他配置:通知渠道、告警说明、生效时间段等 .build();
注意事项
- 如果你的日志查询需要跨项目,需要在filter语句中加上项目限定,格式为
project="你的目标项目ID" - 持续窗口
duration最长支持设置为24小时,最小为0秒 - 如果你需要对匹配到的日志条数做阈值统计,需要先创建对应日志指标,再使用Threshold类型的条件实现
内容的提问来源于stack exchange,提问作者Jayleen
相关产品推荐
相关产品推荐

