1. Opentelemetry 是什么
Opentelemetry 是一个云原生可观测性的行业标准,它作为一个可观测性框架,提供了 trace、metrics、logs 从协议到 API 到可观测性数据从收集到处理到导出的 SDK 实现。
它本身并不实现可观测性数据的存储,而是提出一套标准协议(OTLP),和一套对 API 的实现 SDK(OTEL),由具体的各类数据存储后端来适配 OTLP 协议,或者在 OTEL 的具体 SDK 中对三方数据存储后端的协议进行适配。
支持的数据存储后端:https://opentelemetry.io/ecosystem/vendors/
2. 重要概念
3. Instrumentation 实现
以 JavaScript 语言的实现版本为例进行梳理。
4. 实现规范
- OTEL API、SDK 实现规范
- OTLP OTLP 协议数据结构、接口定义规范
- OpAMP Open Agent Management Protocol 开放代理管理协议
- Semantic Conventions 语义约定全集
5. Collector
5.1 简介
https://github.com/open-telemetry/opentelemetry-collector
一个接收(pull or push) otlp 协议数据 → 进行处理 → 上报(pull or push)到多个协议后端 的服务程序。
用 go 实现。
支持 docker 安装、源码编译安装。
5.2 三种数据上报模式
No Collector
遥测数据直通后端,适合较简单的开发场景或者小项目,且应用开发语言有对应 backend 协议的 exporter。
Collector As Agent
- 将 collector 作为一个本地代理程序或者 sidecar
- 应用程序通过 otlp 协议将数据上报到 collector,collector 提供了主流的 backend export 协议
- collector 可以将处理后的结果上报到多个 backend
- application 可以是另一个 opentelemetry collector
Collector As Gateway
- 和代理模式类似,application 和 collector 不再是一对一,而是多个 application 对同一个 collector 集群
- 适合大规模集群部署
- 会引入额外的运维成本
5.3 高级功能
Collector 配置
- Receivers 接收 pipeline 配置(可以是push模式如grpc/http推送,可以是pull模式如 prometheus export数据拉取)
- Processors 处理 pipeline 配置(filtering, dropping, renaming, or recalculating telemetry)
- Exporters 导出 pipeline 配置(可以是push模式如grpc/http推送,可以是pull模式如 prometheus export数据拉取)
- Connectors pipelines连接配置,从上面的一个 pipeline 接受数据,传给下一个 pipeline
- 扩展插件
connectors 示例:
1 | receivers: foo: exporters: bar: connectors: count: spanevents: my.prod.event.count: description: The number of span events from my prod environment. conditions: - 'attributes["env"] == "prod"' - 'name == "prodevent"' service: pipelines: traces: receivers: [foo] exporters: [count] metrics: receivers: [count] exporters: [bar] |
Collector 扩容
https://opentelemetry.io/docs/collector/scaling/
遥测数据转换
https://opentelemetry.io/docs/collector/transforming-telemetry/
自定义 collector
- Building a custom collector
- Building a custom authenticator
- Building a Trace Receiver
- Building a Connector
参考文档:https://opentelemetry.io/docs
本文链接:https://www.zoucz.com/blog/2023/12/14/8499aee0-9a8b-11ee-9fa0-5dbc93f9d3ee/