01 ​Opentelemetry 简介

Opentelemetry是一个开源的观测框架,用于收集、管理和导出分布式系统中的跟踪、日志和度量数据,帮助开发人员诊断问题、分析行为和优化应用程序。Opentelemetry正在逐渐形成行业标准,越来越多的用户考虑并进行接入。

1 优点

  • 标准化:提供统一的观测数据收集、传播和分析方法,使不同系统和工具无缝集成。
  • 多语言支持:适用于多种编程语言,如Java、Python、Go、JavaScript等。
  • 多云平台支持:可在多个云平台上运行,如AWS、Azure、Google Cloud等。
  • 高度可扩展:可添加和定制观测器、导出器和适配器,以满足特定需求和集成要求。

2 缺点

  • 学习曲线:学习和使用Opentelemetry可能需要一些时间和精力,特别是对于复杂的分布式系统和集成环境。
  • 配置复杂性:Opentelemetry的配置可能相对复杂,需要一些配置和调整才能与特定应用程序和观测工具集成。
  • 运行时开销:添加跟踪代码和数据传播可能带来一定的运行时开销,对应用程序性能产生影响。

02 Opentelemetry 架构

使用OTEL Go SDK 采集数据到Databuff

注意:这里不过多对Opentelemetry的架构进行解读,可以访问OTEL官方文档(https://opentelemetry.io/docs/)进行深入了解。


03 使用OTEL Go SDK 采集数据到Databuff


#01 架构

#02 代码实践

准备工作

  1. Go 环境
  2. OpenTelemetry Go SDK
  3. Gin Web 框架
  4. MySQL 数据库
  5. 确保测试环境安装了OneAgent

步骤

1. 导入所需的包和库

2. 定义配置常量,用于指定 OpenTelemetry 导出器和服务名称

3. 创建 OpenTelemetry OTLP 导出器将跟踪数据导出到指定的地址和默认资源设置:

4. 创建跟踪器提供者并设置全局提供者:

5. 创建 Gin 引擎并添加中间件

这将创建一个默认的 Gin 引擎,并使用 OpenTelemetry 中间件来自动记录每个传入请求的跟踪信息,并将服务名称设置为 "service-name",可以根据实际情况将服务名称替换为您的应用程序的名称。

6. 添加示例路由和数据库查询

为了演示分布式跟踪,添加一个示例路由和数据库查询操作。请参考以下代码:

本示例中,我们使用 OpenTelemetry 的 Tracer 创建一个跟踪器。在路由处理函数中,我们开始一个名为 "hello-span" 的跟踪 span,并在结束后关闭它。在数据库查询操作中,我们使用上下文包装了查询,并将查询语句设置为 span 的属性。最后,我们返回查询结果作为 JSON 响应。

7. 运行应用程序:

您现在可以访问 http://localhost:8080/hello 来测试应用程序。每个请求都将自动记录为一个跟踪 span,并将跟踪数据导出到指定的地址。

以上展示了使用 OpenTelemetry Go SDK 为应用程序添加分布式跟踪的基本教程。可以根据需要进一步扩展和自定义跟踪功能。


#03 效果展示





参考: