官方文档:https://opentelemetry.io/docs/specs/otlp/

本文仓库:https://github.com/zouchengzhuo/opentelemetry-proto.git

本文UML使用 https://github.com/GoogleCloudPlatform/proto-gen-md-diagrams.git 工具生成

1.基本数据结构

opentelemetry/proto 目录下有 log / trace / metrics 的具体数据结构定义

1
├── common
├── logs
├── metrics
├── resource
└── trace

1.1 common 通用数据

AnyValue 是 oneof 这些属性

image.png

1.2 resource 资源描述

在 OpenTelemetry 中,resource.proto 文件定义了 Resource 数据结构。Resource 是一个表示可观察对象(如服务、应用程序、主机等)的实体。它包含一组键值对,用于描述这些实体的属性。这些属性可以用于过滤和聚合观察到的数据,以便更好地理解和分析系统性能。

Resource 数据结构的主要目的是:

  • 为可观察对象提供上下文信息,以便更好地理解和分析度量、追踪和日志数据。
  • 通过提供有关实体的元数据,帮助将观察到的数据与实际系统组件关联起来。
  • 允许对观察到的数据进行过滤、分组和聚合,以便根据实体属性对性能进行深入分析。

总之,resource.proto 文件中定义的 Resource 数据结构在 OpenTelemetry 中起到了关键作用,它为可观察对象提供了描述性信息,以便在分析和监控系统性能时获得更丰富的上下文。

image.png

image.png

1.3 logs 数据结构描述

image.png

image.png

数据构成方式: Data → List<Resource> → List<Scope> → List<Record>

image.png

metrics 和 trace 也是一样,经过了几层相同的包装,才到最终的具体字段数据结构。

1.4 metrics 数据结构描述

https://github.com/zouchengzhuo/opentelemetry-proto/blob/main/opentelemetry/proto/metrics/v1/metrics.proto.md

数据构成方式: Data → List<Resource> → List<Scope> → List<Metric>

image.png

省略细节数据结构

1.5 trace数据结构描述

https://github.com/zouchengzhuo/opentelemetry-proto/blob/main/opentelemetry/proto/trace/v1/trace.proto.md

数据构成方式: Data → List<Resource> → List<Scope> → List<Span>

image.png

2. Collector Service 接口定义

opentelemetry/proto/collector 目录下有服务端的 service 定义

2.1 logs 服务接口

https://github.com/zouchengzhuo/opentelemetry-proto/blob/main/opentelemetry/proto/collector/logs/v1/logs_service.proto.md

image.png

2.2 metrics 服务接口

https://github.com/zouchengzhuo/opentelemetry-proto/blob/main/opentelemetry/proto/collector/metrics/v1/metrics_service.proto.md

image.png

2.3 trace服务接口

https://github.com/zouchengzhuo/opentelemetry-proto/blob/main/opentelemetry/proto/collector/trace/v1/trace_service.proto.md

image.png

3. Collector Service 实现规范

docs 目录下有完整的设计理念和设计思路的描述, 包括支持的数据编码格式、支持的通信协议、请求&响应的实现规范等。

此处不再赘述,详见文档:https://github.com/zouchengzhuo/opentelemetry-proto/blob/main/docs/specification.cn.md

image.png

4. 协议编译

根目录提供了 makefile 文件以从协议文件编译得到各个语言的实现。

1
make gen-cpp / gen-csharp / gen-go / gen-java / gen-kotlin / gen-js / gen-objc / gen-openapi / gen-php / gen-python / gen-ruby

☞ 参与评论