这是一个我很早之前书写的中间件,主要用于监控、收集项目中所运行的所有SQL信息,并对他们进行分析
SQL运行中间件
本项目用于公司特定的运行环境,没有做其余的兼容措施,只是想分享一下解决这种问题的思路。
运行环境:
目标数据库:
MySQL
SQL框架:
database/sql
、gorm.io
基础知识
如果我们需要监控所运行的SQL我们就需要了解Go gorm.io
框架的执行流程,这不做更多的介绍直接说结论,所有的SQL都会由一个叫做 SQLCommon
的对象执行。我们先看一下它的结构

这样的话我们只需要代理这个接口的对象就可以拿到所有的SQL了。
实现
接下来我们开始代理这个接口

代理接口之后就可以拿到SQL的信息了,为了方便支持更多的监控,我们实现一个观察者模式,只要有SQL运行把消息发送过去就行。

写在最后
更多的就不想写了,就是一个比较基础的功能,主要是实现的思路比较奇特。
还可以水一篇博客,嘿嘿