K8s Pod 中的应用如何接入 GCP Error Reporting(Stackdriver)?

K8s 应用接入 GCP Error Reporting 的两种方式:写符合格式的结构化日志到 stdout(含 stack_trace 与 severity=ERROR),或用客户端库直接调用 API。GKE 自动采集 stdout 日志并识别错误。本文给出日志格式要求与配置。

最佳实践
K8s Pod 中的应用如何接入 GCP Error Reporting(Stackdriver)?封面

GKE 上的标准做法是"日志即错误":应用把异常堆栈以特定 JSON 格式写到 stdout,GKE 的日志代理自动采集进 Cloud Logging,Error Reporting 按 stack_trace 字段自动识别聚合成错误事件——无需额外组件。

方式一:结构化日志(推荐)

应用输出这样的 JSON 行到 stdout:

{
  "severity": "ERROR",
  "message": "支付回调处理失败",
  "stack_trace": "java.lang.NullPointerException\n\tat com.shop.PayService...",
  "context": {"httpRequest": {"url": "/callback/pay", "responseStatusCode": 500}}
}

要点:severity ≥ ERROR、含 stack_trace 字段(或 exception 堆栈文本)。Error Reporting 会按堆栈指纹自动聚合同类错误、计数并支持告警。

方式二:客户端库直连 API

Java/Node/Python/Go 都有 Error Reporting 客户端库,直接 report(exception)。K8s 中用 Workload Identity 绑定 GCP 服务账号授权,避免密钥文件。

注意事项

  • 日志必须是单条 JSON——多行堆栈要用 fluent-bit 的多行解析合并后再打 stack_trace;
  • 非 GKE 集群(自建 K8s)需要部署 Cloud Logging 代理并配置认证;
  • 错误分组依赖堆栈指纹,频繁变化的堆栈文本(如带随机 ID)会拆散分组。

观测云对照

观测云的错误追踪能力类似:应用日志或 APM 链路中的 ERROR 自动聚合为错误事件,按堆栈指纹聚类、计数、关联链路上下文,告警直达钉钉/企微——且与云厂商无关,多云与自建机房均可用。

常见问题(FAQ)

Q:println 打印的堆栈能被识别吗? 不能——必须进 JSON 的 stack_trace 字段;多行堆栈先合并。

Q:能自定义错误分组规则吗? Error Reporting 按堆栈指纹自动分组,不支持自定义;控制分组靠规范异常抛出位置。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台