2. 核心概念:OpenTelemetry协议(OTLP)、信号(Signals)、资源(Resource)、属性(Attribute)与语义约定

在构建可靠性驱动的可观测性目录之前,必须深入理解 OpenTelemetry 的五大核心概念。它们是整个自助目录的数据基础与通信契约。本章将逐一拆解 OTLP 协议、信号类型、资源标识、属性机制以及语义约定,并阐明它们在目录架构中的具体作用。

2.1 OTLP:统一的可观测性传输协议

OTLP(OpenTelemetry Protocol)是 OpenTelemetry 的原生数据交换协议,定义了客户端(SDK/Collector)与服务端(Collector/Backend)之间的数据序列化与传输标准。它使用 Protobuf 作为序列化格式,支持 gRPC 和 HTTP/JSON 两种传输方式。

可靠性评审要点: 在自助目录中,OTLP 是唯一强制支持的协议。所有信号必须通过 OTLP 上报,避免因协议碎片化导致的数据丢失或解析错误。
特性 gRPC 传输 HTTP/JSON 传输
序列化格式 Protobuf(二进制) JSON(文本)
性能 高(低延迟、高吞吐) 中(序列化开销较大)
流式支持 原生支持(Server Streaming) 不支持(请求-响应模式)
推荐场景 生产环境、高负载 Collector 间通信 调试、浏览器端、受限网络环境

OTLP 的核心优势在于其统一性:无论信号类型(Trace、Metric、Log),都使用相同的传输层、认证机制和压缩策略。这大幅降低了目录架构的运维复杂度。

OTLP 协议栈与信号传输 应用 / SDK OpenTelemetry Collector 可观测性后端 OTLP gRPC OTLP HTTP 信号载荷:Traces(Span) | Metrics(DataPoint) | Logs(LogRecord) 传输层 gRPC / HTTP/1.1 TLS 加密 压缩(gzip/zstd) 序列化层 Protobuf Schema ExportRequest/Response 信号独立 Export 服务 认证与元数据 / OAuth2 Headers 传递上下文 速率限制标识

2.2 信号(Signals):可观测性的三大支柱

OpenTelemetry 将可观测性数据抽象为三种标准信号:Traces、Metrics 和 Logs。每种信号都有独立的数据模型和语义,但在目录架构中必须关联起来。

  • Traces(链路):记录请求在分布式系统中的完整路径。核心数据结构是 Span,包含 TraceId、SpanId、ParentSpanId、StartTime、EndTime、Attributes 和 Events。
  • Metrics(指标):聚合后的数值测量数据。支持 Counter、Histogram、Gauge、UpDownCounter 等 Instrument 类型。每个 Metric 包含一系列 DataPoint。
  • Logs(日志):带时间戳的结构化文本记录。OpenTelemetry 使用 LogRecord 模型,包含 Severity、Body、Attributes 和 TraceContext 关联字段。
目录设计提示: 自助目录必须为每种信号定义独立的 Schema 版本和校验规则。例如,Traces 必须包含 service.name 和 http.route,否则目录拒绝入库。

2.3 资源(Resource):数据的来源标识

Resource 描述了产生数据的实体(如服务、容器、主机、集群)。它是所有信号的公共元数据,在 OTLP 中作为独立的消息体存在,与信号载荷一起传输。

// Resource 示例(Protobuf 表示)
message Resource {
  repeated KeyValue attributes = 1;
  string dropped_attributes_count = 2;
}

// 典型资源属性
resource.attributes = {
  "service.name": "payment-service",
  "service.version": "1.4.2",
  "host.name": "ip-10-0-1-42",
  "k8s.pod.uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "deployment.environment": "production"
}

在可靠性评审中,资源是数据关联的关键纽带。目录架构必须强制要求每个信号携带完整的 Resource 信息,否则无法进行跨信号关联分析。

2.4 属性(Attribute):可观测性的维度键值对

Attribute 是 OpenTelemetry 中最灵活的元数据载体,以键值对(Key-Value)形式附加在 Span、DataPoint、LogRecord 和 Resource 上。属性支持多种值类型:字符串、布尔、整数、浮点数、数组。

属性作用域 示例 用途
Span 属性 http.method: GET 描述请求的 HTTP 方法
Span 属性 http.status_code: 200 记录响应状态码
Metric 属性 error.type: timeout 指标标签,用于聚合维度
Log 属性 transaction.id: tx-98765 日志上下文关联字段
Resource 属性 cloud.region: us-east-1 基础设施维度标识
避坑指南: 属性数量过多会导致存储膨胀和查询性能下降。目录架构应设置属性数量上限(例如 Span 最多 128 个属性),并强制使用语义约定中的标准属性名,避免自定义属性泛滥。

2.5 语义约定(Semantic Conventions):标准化的属性命名规范

语义约定是 OpenTelemetry 社区定义的属性命名与取值标准。它确保不同服务、不同语言 SDK 上报的数据使用一致的属性名,从而实现跨团队、跨工具的可观测性互操作性。

语义约定按领域组织,主要包含以下类别:

  • 通用约定:service.name、service.version、telemetry.sdk.name
  • HTTP 约定:http.method、http.url、http.status_code、http.route
  • 数据库约定:db.system、db.name、db.statement、db.operation
  • 消息队列约定:messaging.system、messaging.destination、messaging.operation
  • 基础设施约定:host.name、k8s.pod.name、cloud.provider
语义约定在目录架构中的分层应用 OpenTelemetry 语义约定仓库 自助目录:强制语义约定校验规则 Traces 属性校验 Metrics 属性校验 Logs 属性校验 违反语义约定的数据将被标记为“非标准”并降级处理,不进入可靠性分析管道

2.6 核心概念在自助目录中的协同关系

在可靠性评审驱动的自助目录中,这五个概念形成以下数据流:

  1. OTLP 作为统一传输管道,承载所有信号。
  2. 每个信号(Trace/Metric/Log)携带 Resource 标识来源实体。
  3. 信号内部通过 Attribute 描述具体操作的维度信息。
  4. 语义约定 确保 Attribute 的命名和取值在目录中可被统一解析和查询。
  5. 目录架构基于 Resource 和 Attribute 建立索引,实现跨信号的关联检索。
可靠性评审检查项:
  • 所有信号是否强制携带 Resource?
  • 关键属性(如 http.route、db.statement)是否遵循语义约定?
  • OTLP 端点是否配置了速率限制和认证?
  • 属性基数(Cardinality)是否在可控范围内?