1. Opentelemetry 是什么

Opentelemetry 是一个云原生可观测性的行业标准,它作为一个可观测性框架,提供了 trace、metrics、logs 从协议到 API 到可观测性数据从收集到处理到导出的 SDK 实现。

它本身并不实现可观测性数据的存储,而是提出一套标准协议(OTLP),和一套对 API 的实现 SDK(OTEL),由具体的各类数据存储后端来适配 OTLP 协议,或者在 OTEL 的具体 SDK 中对三方数据存储后端的协议进行适配。

image.png

支持的数据存储后端:https://opentelemetry.io/ecosystem/vendors/

2. 重要概念

image.png

3. Instrumentation 实现

以 JavaScript 语言的实现版本为例进行梳理。

image.png

4. 实现规范

  • OTEL API、SDK 实现规范
  • OTLP OTLP 协议数据结构、接口定义规范
  • OpAMP Open Agent Management Protocol 开放代理管理协议
  • Semantic Conventions 语义约定全集

5. Collector

5.1 简介

image.png

https://github.com/open-telemetry/opentelemetry-collector

一个接收(pull or push) otlp 协议数据 → 进行处理 → 上报(pull or push)到多个协议后端 的服务程序。

用 go 实现。

支持 docker 安装、源码编译安装。

5.2 三种数据上报模式

No Collector

image.png

遥测数据直通后端,适合较简单的开发场景或者小项目,且应用开发语言有对应 backend 协议的 exporter。

Collector As Agent

image.png

  • 将 collector 作为一个本地代理程序或者 sidecar
  • 应用程序通过 otlp 协议将数据上报到 collector,collector 提供了主流的 backend export 协议
  • collector 可以将处理后的结果上报到多个 backend
  • application 可以是另一个 opentelemetry collector

Collector As Gateway

image.png

  • 和代理模式类似,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

参考文档:https://opentelemetry.io/docs

☞ 参与评论