开始之前
如果你对OpenTelemetry协议标准不熟悉,可先查看OpenTelemetry原理概览 。
介绍
OpenTelemetry 是一个云原生计算基金会(CNCF)项目,它是 是两个先前项目OpenTracing和OpenCensus合并的结果。如果你啊当前正在使用OpenTracing或OpenCensus, 则可以查看迁移指南 ,了解如何迁移到OpenTelemetry。
什么是OpenTelemetry?
OpenTelemetry是一个与供应商无关的可观测性框架和工具包,旨在创建和管理遥测数据,例如跟踪、指标和日志。
OpenTelemetry的主要组成:
- 所有组件的规范
- 定义数据的标准协议
- 定义标准命名的语义约定 和常见遥测数据类型的方案
- 定义如何生成遥测数据的API
- 实现规范的语言SDK 、API 和 导出遥测数据
- 生成遥测数据的自动检测组件,无需更改代码
- OpenTelemetry Collector,接收处理和导出遥测数据
- 各种其他工具,例如 Kubernetes 的 OpenTelemetry Operator
扩展性
OpenTelemetry设计为可扩展的。包括:
- 向 OpenTelemetry Collector添加接收器以支持来自自定义源的遥测数据
- 将自定义插桩库加载到SDK中
- 创建 SDK 的分发版 或为特定用例量身定制的收集器
- 为尚不支持OpenTelemetry协议(OTLP)的自定义后端创建新的导出器
- 为非标准上下文传播格式创建自定义传播器
例子
下面使用golang集成OpenTelemetry,保证golang版本在1.22或更高。
初始化程序如下:
|
|
运行该程序访问http://localhost:8080/rolldice 可返回一个随机数。
使用go get
安装依赖包:
|
|
首先创建otel.go
,初始化OpenTelemetry SDK,这是任何需要导出遥测数据的应用程序所必须的,如下:
|
|
现在可以检测HTTP服务器了,修改main.go
如下:
|
|
启动程序,访问接口,控制台打印出json数据,json的很多字段在OpenTelemetry原理概览 中有过介绍,如下(省略了部分Resource和Attributes的值):
|
|
修改main.go
的代码,如下:
|
|
其余代码不变,重新启动程序调用接口,控制台打印了多条json, 有日志的json、指标的json和链路追踪的json,span之间也有了父子关系。