首页/云/可观测性速查/Span Kind:调用方向标注

Span Kind:调用方向标注

Kind 描述 span 在调用中的角色:server/client 成对接跨进程调用,producer/consumer 对接消息流,internal 表示进程内逻辑。

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

Span Kind 是什么

Span Kind 标注 span 在调用链中的角色:server 表示接收并处理请求,client 表示发起对外调用,producer 表示发送消息,consumer 表示消费消息,internal 表示进程内逻辑。server 与 client 成对接起一次跨进程调用,producer 与 consumer 描述异步消息流。Kind 与语义化命名配合,能让链路图直接看出「谁调谁」,排障时按 Kind 过滤客户端 span 就能看被调服务的真实耗时。

基本信息

取值server、client、producer、consumer、internal
规范来源OpenTelemetry Trace 规范
默认值未设置时通常按 internal 处理或由 SDK 推断
配合属性http.request.method、rpc.method、messaging.system 等
权限要求应用埋点配置,无额外系统权限

典型使用场景

  • 服务端耗时:过滤 server span 看接口自身处理时间,排除下游影响
  • 下游定位:按 client span 的属性排序,找到耗时最高的依赖
  • 异步链路:用 producer 与 consumer 描述生产与消费,识别积压环节
  • 内部细分:用 internal span 标记缓存、序列化等关键内部步骤
  • 采样控制:对不同 Kind 配置不同采样率,保留有诊断价值的调用

使用要点

  • 一次跨进程调用会同时产生 client 与 server 两个 span,两者互为对照
  • 消息场景下 producer 与 consumer 不在同一 trace 树内,需用链接或关联字段串起
  • 全用 internal 会让链路图失去调用边界,Kind 要按真实语义设置
  • 命名与 Kind 一起规范,例如 HTTP 服务端使用「方法加路由」的形式
  • 采样策略按 Kind 区分,避免把进程内噪声全量保留到后端

消息链路要点

消息链路要点
producer span 在发送消息时结束记录;
consumer span 在消费时新建,二者通过 span link 关联。

# 服务端与客户端成对出现,排障时先对齐这两个 span 的时间。
# 若只看到一个方向,通常是其中一侧没埋点或采样策略覆盖不到。

五类 Kind

Kind含义典型场景
server接收并处理请求HTTP 或 RPC 服务端处理
client发起对外调用调用下游服务、访问数据库
producer发送消息向消息队列生产消息
consumer消费消息从消息队列消费并处理
internal进程内操作本地计算、缓存读写、序列化
Kind 只有配合语义化命名才有价值:只有 Kind 而没有规范命名时,链路图仍然要靠猜来判断哪一段对应哪个业务动作。

易错点

  • 所有 span 都标成 internal 会让链路图无法区分调用边界,排障只能靠猜
  • 异步消息场景 producer 与 consumer 不在同一 trace 树内,需要链接或关联字段才能串起完整链路
  • 只埋客户端不埋服务端会导致耗时归因失真,无法判断时间花在自己还是对方身上
  • Kind 与命名不统一,各服务各写一套,链路检索时无法用统一条件过滤

数据来源与参考

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