效果图

SQL的追踪正确插入到微服务的调用链之间

详细记录了SQL的执行内容和消耗时间

搜索SQL的类型

多线程(goroutine)下的追踪效果

在 Kubernetes 中部署微服务后,通过 Istio 管控微服务之间的流量,Istio 默认会将微服务之间的调用关系生成追踪,放入追踪收集器。但他不支持更细化的SQL操作,比如执行了哪些SQL,每条SQL消耗多长时间。为此,我写了一个简单的支持gorm查询并生成追踪的插件:istio-gorm-tracing

微服务追踪 gorm 插件

kubernetes上使用Istio管控微服务后,微服务之间的调用会自动上传到Jaeger的收集器。但只能追踪到服务层,这是我不能接受的,我希望能进一步追踪到服务中的所有MySQL查询,记录每个 sql 的耗时,所以,我简单写了这个插件。

特性

支持Istio

Istio管控下的容器请求之间,会自动携带x-b3-traceidx-b3-parentspanidx-b3-spanidx-b3-sampled等请求头,这些请求头都是与zipkin对齐的。此插件中会根据传递进来的请求头信息,自动解析出父span,并绑定上下服务之间的调用关系。

记录SQL信息

每次查询都会记录下执行的SQL语句以及执行耗时等信息,作为后期微服务追踪的依据。

使用

package main

import (
istiogormtracing "github.com/liamhao/istio-gorm-tracing"
"log"
"fmt"
"github.com/gin-gonic/gin"
"gorm.io/driver/mysql"
"gorm.io/gorm"
) func main() { router := gin.Default() dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local", "dbuser", "dbpswd", "dbhost", 3306, "dbname")
gormDb, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
log.Println("mysql连接出现了问题:", err.Error())
} else {
log.Println("mysql连接成功:", dsn)
} // 这一步很关键,一定要加上,为了启用我们的插件
gormDb.Use(istiogormtracing.NewDefault(
// 你的微服务名称
"istiogormtracing-service",
// 你的 Jaeger 收集器地址
"http://127.0.0.1:14268/api/traces",
)) router.GET("/", func(c *gin.Context) { // 这一步很关键,一定要加上,为了SQL能与上下游服务做关联
istiogormtracing.H = c.Request.Header list := []map[string]interface{}{}
gormDb.Table("users").Where("name = 'xiaoming'").Find(&list) c.JSON(http.StatusOK, map[string]interface{}{
"istiogormtracing": "ok",
})
}) router.Run(":7000")
}

然后即可在Jaeger面板中看到我们记录的SQL了。

微服务追踪SQL(支持Isto管控下的gorm查询追踪)的更多相关文章

  1. 在微服务框架Demo.MicroServer中添加SkyWalking+SkyApm-dotnet分布式链路追踪系统

    1.APM工具的选取 Apm监测工具很多,这里选用网上比较火的一款Skywalking. Skywalking是一个应用性能监控(APM)系统,Skywalking分为服务端Oap.管理界面UI.以及 ...

  2. 微服务网关从零搭建——(六)ocelot配置追踪功能

    butterfly 准备工作 首先下载buterfly release版本 解压并通过命令启动:dotnet Butterfly.Web.dll --EnableHttpCollector=true ...

  3. go微服务框架Kratos笔记(三)引入GORM框架

    介绍 GORM是一个使用Go语言编写的ORM框架.中文文档齐全,对开发者友好,支持主流数据库. GORM官方文档 安装 go get -u github.com/jinzhu/gorm 在kratos ...

  4. 微服务监控druid sql

    参考该文档 保存druid的监控记录 把日志保存的关系数据数据库(mysql,oracle等) 或者nosql数据库(redis,芒果db等) 保存的时候可以增加微服务名称标识好知道是哪个微服务的sq ...

  5. 【星云测试】Devops微服务架构下具有代码级穿透能力的精准测试

    微服务是Devops场景下热门的开发框架,在大型项目中被广泛采用.它把一个大型的单个应用程序和服务拆分为数十个的支持微服务,独立部署.互相隔离,通过扩展组件来处理功能瓶颈问题,比传统的应用程序更能有效 ...

  6. .NET Core微服务之基于Ocelot+Butterfly实现分布式追踪

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.什么是Tracing? 微服务的特点决定了功能模块的部署是分布式的,以往在单应用环境下,所有的业务都在同一个服务器上,如果服务器出现错 ...

  7. 第三代微服务架构:基于 Go 的博客微服务实战案例,支持分布式事务

    这是一个可一键部署在 Kubernetes-Istio 集群中的,基于 Golang 的博客微服务 Demo,支持分布式事务. 项目地址:https://github.com/jxlwqq/blog- ...

  8. SpringCloud微服务(07):Zipkin组件,实现请求链路追踪

    本文源码:GitHub·点这里 || GitEE·点这里 一.链路追踪简介 1.Sleuth组件简介 Sleuth是SpringCloud微服务系统中的一个组件,实现了链路追踪解决方案.可以定位一个请 ...

  9. 多云架构下,JAVA微服务技术选型实例解析

    [摘要] 本文介绍了基于开源自建和适配云厂商开发框架两种构建多云架构的思路,以及这些思路的优缺点. 微服务生态 微服务生态本质上是一种微服务架构模式的实现,包括微服务开发SDK,以及微服务基础设施. ...

随机推荐

  1. OA办公软件篇(二)—权限管理

    权限管理的背景 权限管理的作用 迭代历程 关键名词释义 权限管理模型 具体实现 写在最后   权限管理的背景 在OA办公软件篇(一)-组织架构一文中,我们说到组织架构是软件系统的权限体系的重要搭建依据 ...

  2. 超越iTerm! 号称下一代终端神器,功能贼强大!

    程序员的一生,用的最多的两个工具,一个是代码编辑器(Code Editor),另外一个就是命令行终端工具(Terminal).这两个工具对于提高开发效率至关重要. 代码编辑器在过去的 40 年里不断进 ...

  3. 关于fiddler抓包一键生成python脚本

    本人贡献一篇关于抓包转换成脚本的文章 步骤一 打开fiddler,抓到包之后,保存成txt文件 步骤二 脚本里str_filename改成保存的文件名 步骤三 执行脚本一键转换 附上脚本,感谢关注~ ...

  4. XCTF练习题---MISC---Hidden-Message

    XCTF练习题---MISC---Hidden-Message flag:Heisenberg 解题步骤: 1.观察题目,下载附件 2.拿到手以后发现是一个数据包格式,打开看一下 3.查看UDP流,并 ...

  5. 使用fastai训练的一个性别识别模型

    在学习了python中的一些机器学习的相关模块后,再一次开始了深度学习之旅.不过与上次的TensorFlow框架不同,这一次接触的是fast.ai这样一个东西.这个框架还不稳定,网上也没有相关的中文文 ...

  6. Golang 实现 Redis(10): 本地原子性事务

    为了支持多个命令的原子性执行 Redis 提供了事务机制. Redis 官方文档中称事务带有以下两个重要的保证: 事务是一个单独的隔离操作:事务中的所有命令都会序列化.按顺序地执行.事务在执行的过程中 ...

  7. 深度好文:Linux系统内存知识

    点击关注上方"开源Linux", 后台回复"读书",有我为您特别筛选书籍资料~ 相关阅读: 深度好文:Linux文件系统剖析 Linux 内存是后台开发人员,需 ...

  8. this-4

    ES6函数里的this指的是定义这个函数时外层代码的this,可以理解为:1.ES6箭头函数没有自己的this:2.ES6箭头函数的this是外层代码(定义时,非执行时,也就是词法作用域)this的引 ...

  9. C#/VB.NET 实现Word和ODT文档相互转换

    ODT文档格式一种开放文档格式(OpenDocument Text).通常,ODT格式的文件可以使用LibreOffice Writer.MS Word或其他一些文档编辑器来打开.我们在处理文档时,可 ...

  10. Mac 手动安装 bee工具

    前因: 1.go升级到1.16以后,bee官网给的安装方法(go get XXX)不好使,需要指定version. 2.指定 go get XXX@v2.0.0 可以下载,但是bee工具还是用不了:c ...