Jaeger适配GaussDB开源开发任务心得

举报
yangjiaxin98 发表于 2024/11/21 20:34:38 2024/11/21
【摘要】 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- 允许更高效的传输
  • (可选)ArchiveSpanWriterPluginArchiveSpanReaderPlugin- 支持归档存储
  • (可选)DependenciesReaderPlugin- 用于读取服务依赖关系
  • (可选)PluginCapabilities- 可以查询实现支持哪些服务

相关部署文档参考(https://github.com/jaegertracing/documentation/blob/main/content/docs/next-release/deployment.md#storage-plugin)。

根据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


 


 




【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。