Jaeger适配GaussDB开源开发任务心得
首先查看到Jaeger代码仓库issuehttps://github.com/jaegertracing/jaeger/issues/638
我们发现在Jaeger的 Additional storage backends 中已经含有PostgreSQL gRPC storage plugin https://github.com/jaegertracing/jaeger/issues/1895我们可以参考它的模型,由于原来的PostgreSQL storage plugin并不是很完善,于是我们可以基于它的gRPC storage plugin 进行重写我们的GaussDB gRPC storage plugin。
代码仓库
我实在gitee上先导入了PostgreSQL gRPC storage plugin相关的代码仓库,然后在上面开发GaussDB gRPC storage plugin。代码仓库地址:https://github.com/qixia1998/jaeger-gaussdb
开发过程
从Jaeger的官方文档了解到 https://github.com/jaegertracing/jaeger/tree/main/plugin/storage/grpc 可以通过远程存储 API 访问GaussDB,
该 API 由几个 gRPC 服务组成:
SpanReaderPlugin
- 用于查询数据SpanWriterPlugin
- 用于写入数据- (可选)
StreamingSpanWriterPlugin
- 允许更高效的传输 - (可选)
ArchiveSpanWriterPlugin
和ArchiveSpanReaderPlugin
- 支持归档存储 - (可选)
DependenciesReaderPlugin
- 用于读取服务依赖关系 - (可选)
PluginCapabilities
- 可以查询实现支持哪些服务
根据issue中的参考模型实现相关的SQL,并且使用到了 sqlc 来根据SQL生成完全类型安全的Go代码。关于sqlc的使用可以参考https://docs.sqlc.dev/en/stable/tutorials/getting-started-postgresql.html#setting-up
在开发过程中,我们使用华为云官方文档所推荐的Go驱动去连接GaussDBhttps://doc.hcs.huawei.com/db/zh-cn/gaussdb/24.1.30/devg-dist/gaussdb-12-0233.html。
开发过程中遇到的一些视图问题记录在https://gitcode.com/HuaweiCloudDeveloper/OpenSourceForHuaweiWiki/issues/27。
Jaeger最新版本部署可以参考https://www.jaegertracing.io/docs/1.63/deployment/
总结
本任务主要是根据Jaeger来实现一个基于GaussDB的gRPC storage plugin,通过这个storage plugin 将trace 数据存储在GaussDB中。
主要是需要注意本次开发是参考PostgreSQL,因此要同时去了解熟悉PostgreSQL和GaussDB的差异性。已经Jaeger的一些使用情况。
通过本次开发,发现有以下几点问题:
- 数据库迁移工具Goose暂时还不支持GaussDB的驱动。
- GaussDB不支持 ON CONFLICT 子句,本次使用WITH 模拟 ON CONFLICT 的行为满足了并发场景。
验证截图
验证思路
配置好GaussDB的连接信息启动GaussDB gRPC storage plugin,然后基于Jaeger的镜像部署好Jaeger,要求含有Jaeger-UI部分。然后我们可以查看相关数据库是否有所span数据写入。为了更加进一步验证我们的GaussDB gRPC storage plugin,后面会使用一个批量创建 span 并将 trace 数据发送到 Jaeger 的 Go 语言示例来进一步验证我们的功能。可以使用Jaeger UI 左侧的搜索面板来搜索具有特定属性的 trace: 它们来自哪个服务、进行了什么操作、包含在跟踪中的特定标记(例如,HTTP状态码)、过去需要查找多长时间以及结果数量限制等等。
GaussDB数据库表
此时的services表中可以看到我们的jager-all-in-one
Jaeger-UI
在Jaeger-UI中可以看到从GaussDB中读取到的span信息。
使用example中的示例批量创建 span 并将 trace 数据发送到 Jaeger
示例名称为Go-Jaeger-Example
- 点赞
- 收藏
- 关注作者
评论(0)