如何创建满足双条件触发的GCP基于日志的告警?
GCP基于日志的告警配置方案
需求说明
需创建满足以下两个条件的告警:
- 最近未收到新的日志消息(示例中为超过20分钟)
- 最后一条日志消息包含特定字符串(示例中为
alive and kicking)
示例场景:
当最后一条日志包含
alive and kicking且已超过20分钟未更新时触发告警;若后续收到含alive but inactive的日志,告警不再触发。对应示例日志,告警应在16:40触发,17:00之后停止触发。
示例日志内容:
2022-12-29 15:00 i'm alive but inactive. don't send an alert. 2022-12-29 15:10 i'm alive but inactive. don't send an alert. 2022-12-29 15:20 i'm alive but inactive. don't send an alert. 2022-12-29 16:00 i'm alive and kicking. send an alert if you don't hear from me in the next 20 minutes. 2022-12-29 16:10 i'm alive and kicking. send an alert if you don't hear from me in the next 20 minutes. 2022-12-29 16:20 i'm alive and kicking. send an alert if you don't hear from me in the next 20 minutes. 2022-12-29 17:00 i'm alive but inactive. don't send an alert. 2022-12-29 17:10 i'm alive but inactive. don't send an alert. 2022-12-29 17:20 i'm alive but inactive. don't send an alert.
配置步骤
1. 编写日志查询语句
使用GCP日志查询语言,筛选出符合条件的日志:
# 替换为你的资源类型、项目ID和日志名称 resource.type="your-resource-type" logName="projects/your-project-id/logs/your-log-name" | order_by timestamp desc | limit 1 | where textPayload contains "alive and kicking" | where timestamp < timestamp_sub(current_timestamp(), interval 20 minute)
查询逻辑说明:
- 按时间倒序排序,仅保留最后一条日志
- 检查该日志的内容是否包含目标字符串
- 验证该日志的时间是否早于当前时间减去20分钟(即超过20分钟无新日志)
2. 创建告警策略
- 进入GCP控制台,导航至监控 > 告警 > 创建告警策略
- 选择日志匹配作为数据源,粘贴上述查询语句
- 设置触发条件:当查询存在匹配结果时触发告警
- 配置通知渠道:添加邮件、Slack等你需要的通知方式
- 填写告警名称(如「服务存活状态异常告警」)和描述信息
3. 逻辑验证
- 16:20收到最后一条含
alive and kicking的日志,16:40时,当前时间减20分钟为16:20,查询返回该日志,触发告警 - 17:00收到含
alive but inactive的日志,此时取最后一条日志不包含目标字符串,查询无匹配结果,告警自动恢复,不再触发
内容的提问来源于stack exchange,提问作者Jayen
相关产品推荐
相关产品推荐

