GCP日志告警邮件自定义:如何展示labels\error_stack实际值?
解决GCP日志告警邮件自定义内容及变量解析问题
核心问题定位
你遇到的变量未解析问题,是因为误用了log.extracted_label前缀——这个前缀仅适用于通过日志提取规则手动提取的自定义标签,而原生日志自带的labels.error_stack字段,需要直接使用${labels.error_stack}格式引用。
具体实现步骤及示例
1. 确认日志字段的正确路径
先确认你的日志条目里labels.error_stack的层级无误,参考JSON结构示例:
{ "labels": { "error_stack": "com.example.Error: xxx\nat com.example.Class.method(Class.java:123)\n..." }, "timestamp": "2024-05-20T10:00:00Z" // 其他日志字段 }
2. 配置告警规则的Documentation字段
编辑已有的基于日志的告警规则,在「Documentation」标签页中,用Markdown编写自定义内容并正确引用变量:
## 错误告警详情 - 触发时间:${timestamp} - 错误堆栈: ${labels.error_stack} - 关联告警规则:${alert.name}
3. 排查变量未解析的常见原因
如果变量仍未正常解析,检查以下两点:
- 确认告警规则的日志过滤器能正确匹配包含
labels.error_stack字段的日志条目——若过滤器过滤掉该字段,变量会无法获取值 - 变量格式需严格遵循
${字段路径},不要在大括号和字段名之间加空格,比如不要写成${ labels.error_stack }
4. 测试告警效果
手动触发符合条件的日志条目,收到的告警邮件会展示实际值:
错误告警详情
- 触发时间:2024-05-20T10:00:00Z
- 错误堆栈:
com.example.Error: xxx
at com.example.Class.method(Class.java:123)
...- 关联告警规则:我的错误告警规则
额外提示
- 如果
error_stack字段嵌套在更深层级(比如jsonPayload.labels.error_stack),需调整变量路径为${jsonPayload.labels.error_stack} - GCP支持直接引用日志中的所有顶级字段作为变量,比如
${resource.type}、${resource.labels.instance_id}等
内容的提问来源于stack exchange,提问作者Alex F
相关产品推荐
相关产品推荐

