首页/云/可观测性速查/Span 状态与错误标记

Span 状态与错误标记

状态取值 Unset / Ok / Error:错误要显式标记,配合属性(错误类型、状态码)让筛选“只看失败链路”可用。

可观测性速查云更新于 2026-10-13

Span 状态是什么

Span 状态描述这个操作是成功还是失败,取值有未设置、成功、错误三种。它决定链路检索里「只看失败链路」能不能用:异常被捕获后如果只记录日志而不设置状态,链路在系统里仍然显示为正常,失败样本会整体遗漏。另一个容易踩的点是口径——业务失败(如参数校验不通过)与系统异常是否都算错误,需要团队统一定义。

基本信息

适用平台OpenTelemetry 各语言 SDK
取值Unset(默认)、Ok、Error
设置方式set_status 与异常记录接口配合使用
配套属性错误类型与错误信息建议一并记录

典型使用场景

  • 失败链路筛选:按错误状态检索出问题请求做批量分析
  • 错误率统计:以链路状态为口径计算失败比例
  • 调用链定位:在瀑布图里快速找到失败的环节
  • 依赖质量评估:按被调用服务统计错误状态占比
  • 回归验证:新版本上线后对比错误链路数量变化

标记示例

标记示例
from opentelemetry.trace import Status, StatusCode

with tracer.start_as_current_span("charge") as span:
    try:
        do_charge()                         # 可能抛出超时等异常
    except TimeoutError as e:
        span.set_status(Status(StatusCode.ERROR, "upstream timeout"))
        span.record_exception(e)            # 同时记录异常事件与堆栈
        raise                               # 是否继续抛出按业务需要决定
    else:
        span.set_attribute("charge.result", "ok")

# 只捕获而不设置状态时,链路仍显示正常,失败样本被漏掉

状态取值与含义

取值含义使用建议
Unset默认值,未明确成功或失败自动埋点未判定时的常见状态
Ok显式成功一般由自动埋点或框架中间件设置
Error失败需同时记录错误类型与描述
(业务字段)自定义结果属性业务失败是否算错误要事先约定
错误状态与错误事件要成对使用:状态用于筛选与统计,事件保留堆栈等细节,只有状态没有事件时排障仍然缺信息。
HTTP 状态码与业务结果的映射要提前定义:把参数校验失败(如 4xx)一律标为错误,会让错误率失真并抬高噪声。

易错点

  • 异常被捕获后没有设置状态,链路仍显示正常,统计失败链路时整批遗漏
  • 用状态码一律标记错误会把预期的客户端错误算成故障,错误率长期虚高
  • 只设置状态不记录异常事件,排障时看不到错误类型与堆栈
  • 业务失败与技术异常的判定口径在不同服务间不一致,跨服务错误率无法比较

数据来源与参考

  • OpenTelemetry 官方文档 · Span Status
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌