DataBuff 如何结合 Opentelemetry 监控 golang 应用
01
Opentelemetry 简介
Opentelemetry 是一个开源的观测框架,用于收集、管理和导出分布式系统中的跟踪、日志和度量数据,帮助开发人员诊断问题、分析行为和优化应用程序。Opentelemetry 正在逐渐形成行业标准,越来越多的用户考虑并进行接入。
1 优点
标准化:提供统一的观测数据收集、传播和分析方法,使不同系统和工具无缝集成。
多语言支持:适用于多种编程语言,如 Java、Python、Go、JavaScript 等。
多云平台支持:可在多个云平台上运行,如 AWS、Azure、Google Cloud 等。
高度可扩展:可添加和定制观测器、导出器和适配器,以满足特定需求和集成要求。
2 缺点
学习曲线:学习和使用 Opentelemetry 可能需要一些时间和精力,特别是对于复杂的分布式系统和集成环境。
配置复杂性:Opentelemetry 的配置可能相对复杂,需要一些配置和调整才能与特定应用程序和观测工具集成。
运行时开销:添加跟踪代码和数据传播可能带来一定的运行时开销,对应用程序性能产生影响。
02
Opentelemetry 架构
使用 OTEL Go SDK 采集数据到 Databuff
引用自 https://opentelemetry.io/docs/
注意:这里不过多对 Opentelemetry 的架构进行解读,可以访问 OTEL 官方文档(https://opentelemetry.io/docs/)进行深入了解。
03
使用 OTEL Go SDK 采集数据到 Databuff
#01 架构
#02 代码实践
准备工作
Go 环境
OpenTelemetry Go SDK
Gin Web 框架
MySQL 数据库
确保测试环境安装了 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 效果展示
参考:
[OneAgent]https://mp.weixin.qq.com/s/dRVQYUu3Ph10gACokFJFCg
[opentelemetry doc]https://opentelemetry.io/docs/
[github.opentelemetry-go-contrib]https://github.com/open-telemetry/opentelemetry-go-contrib
[github.opentelemetry-go]https://github.com/open-telemetry/opentelemetry-go
[gopkg]https://pkg.go.dev/go.opentelemetry.io/otel
版权声明: 本文为 InfoQ 作者【乘云 DataBuff】的原创文章。
原文链接:【http://xie.infoq.cn/article/0c70bdab997e20e5352d950f5】。文章转载请联系作者。
评论