抓取tcp包解析出 mysql 语句,将查询信息打印在屏幕上或者发送到Kafka。

1. Architecture

架构设计:

本项目采用模块化设计,主要分为四大模块:TCP抓包模块,协议解析模块,输出模块,心跳模块

2. Parse Protocol

sniffer-agent采用模块化结构,支持用户添加自己的解析模块,只要实现了统一的接口即可

MySQL

PostgreSQL

Redis

Mongodb

GRPC

详细输出格式查看

sniffer-agent可以动态设置抓包率,详情查看文档

4. Exporter

输出模块主要负责,将解析的结果对外输出。默认情况下输出到命令行,可以通过指定export_type参数选择kafka,这时候会直接将解析结果发送到kafka。

同样只要实现了export接口,用户可以自定义自己的输出方式。

5. Install:

环境:

golang:1.12

libpcap包

测试脚本运行在 python 3环境下

1.安装依赖,目前自测支持 Linux 系列操作系统,其他版本的系统有待验证

CentOS:

yum install libpcap-devel

Ubuntu:

apt-get install libpcap-dev

2.执行编译命令 go build

6. Demo

目前只支持MySQL协议的抓取,需要将编译后的二进制文件上传到MySQL服务器上

1.最简单的使用

./sniffer-agent

2.指定log级别,可以指定的值为debug、info、warn、error,默认是info

./sniffer-agent --log_level=debug

默认会监听 网卡:eth0,端口3306

3.指定网卡和监听端口

./sniffer-agent --interface=eth0 --port=3358

4.指定输出到kafka,为了将ddl和select、dml区分处理,这里使用了两个topic来生产消息

./sniffer-agent --export_type=kafka --kafka-server=$kafka_server:$kafka_server --kafka-group-id=sniffer --kafka-async-topic=non_ddl_sql_collector --kafka-sync-topic=ddl_sql_collector

5.指定严格模式,通过查询获取长连接的用户名和数据库

./sniffer-agent --strict_mode=true --admin_user=root --admin_passwd=123456

7. 题外话

在做这个功能之前,项目组调研过类似功能的产品,最有名的是mysql-sniffer

和go-sniffer

,这两个产品都很优秀,不过我们的业务场景要求更多。

我们需要将提取的SQL信息发送到kafka进行处理,之前的两个产品输出的结果需要进行一些处理然后自己发送,在QPS比较高的情况下,这些处理会消耗较多的CPU;

另外mysql-sniffer使用c++开发,平台的适用性较差,后期扩展较难。

开发的过程中也借鉴了这些产品的思想,另外在MySQL包解析的时候,参考了一些Vitess

和TiDB

的内容,部分私有变量和函数直接复制使用,这里向这些优秀的产品致敬,如有侵权请随时联系。

8. 结果分析

在压测的过程中和mysql-sniffer进行了结果对比,压测执行28万条语句,mysql-sniffer抓取了8千条,sniffer-agent抓取了30万条语句(其中包含client自动生成的语句)

9. 风险提示

1.sniffer-agent使用了pacp抓包,根据pacp抓包原理,在IO较高的时候有一定的概率丢包;

2.sniffer-agent提供了Prepare语句的支持,但是如果sniffer-agent在prepare语句初始化之后启动,就无法抓取prepare语句;

mysql 抓包工具_好用的MySQL抓包工具:sniffer-agent相关推荐

  1. mysql客户端工具_性能优化-理解 MySQL 体系结构(MySQL分库分表)

    实例和数据库 我们通常所说的 MySQL 数据库服务器由一个实例(instance)以及一个数据库(database)组成.实例包括一组后台进程/线程和许多内存结构,用于管理数据库:数据库由一组磁盘文 ...

  2. mysqlbinlog工具_带你解析MySQL binlog

    前言: 我们都知道,binlog可以说是MySQL中比较重要的日志了,在日常学习及运维过程中,也经常会遇到.不清楚你对binlog了解多少呢?本篇文章将从binlog作用.binlog相关参数.解析b ...

  3. 连接mysql工具_非常实用的mysql可视化连接工具,开发测试必备软件,快收藏吧...

    今天小编给大家介绍一款mysql数据库连接工具,对于很多开发或者测试人员,在本机安装mysql连接客户端很麻烦,但是又需要查看数据库数据,此时简单快速的查看数据库工具就很重要了,今天给大家介绍一个带有 ...

  4. golang mysql连接池原理_[Go] golang实现mysql连接池

    golang中连接mysql数据库,需要使用一个第三方类库github.com/go-sql-driver/mysql,在这个类库中就实现了mysql的连接池,并且只需要设置两个参数就可以实现 一般连 ...

  5. mysql进程内存不足_故障排除指南:MySQL的运行内存不足怎么办?

    原标题:故障排除指南:MySQL的运行内存不足怎么办? [ ] [IT168 评论]故障排除对于所有人来说都不会是一件有趣的事情,尤其是在没有崩溃报告的情况下.如果MySQL因内存不足而崩溃时应该怎么 ...

  6. html自动生成工具_关于STM32代码自动生成的工具的进度....

    前情提要:STM32代码自动生成工具_本想...但是...可是...所以 首先说一下那几天大家的反应,有的持观望态度,毕竟STM32CUBE很香:有的很激动,期待我快点出东西:还有的很淡定,知道我在挖 ...

  7. mysql connection是什么_记一次MySQL出现too many connection

    今天中午的时候突然接到报警,MySQL连接数暴增..本来设置的max_conntion=6000, 这个数值连接已经够用.接到报警速度连接服务器连接mysql总是报如下错误: [mysql@local ...

  8. cassandra可视化工具_一位数据科学家的私房工具清单

    作为一位万人敬仰的数据科学家,不但需要培育一棵参天技能树,私人武器库里没有一票玩得转的大火力工具也是没法在江湖中呼风唤雨的. 近日北卡来罗纳大学CTO,一位数据科学家Jefferson Heard分享 ...

  9. mysql设置success信息_【原创】MySQL Cluster安装部署(Success)

    参考:http://www.cnblogs.com/zhoulf/archive/2013/01/30/2883207.html 安装要求 安装环境:centos6.3(X64) 软件名称 :mysq ...

  10. mysql native数据同步_记一次MySQL(5.7版本)数据库的主从同步和备份

    我遇到的问题 我先后在BAT三大云服务器商购买了学生机,配置如下百度云2核/4G 阿里云1核/2G 腾讯云1核/2G 我的解决方案 由于我不知道百度云的续费规则,导致买了2核/4G的服务器之后以为像阿 ...

最新文章

  1. Chrome神器Vimium快捷键学习记录
  2. GoldenGate学习笔记(11)_常用参数
  3. JavaScript数据结构和算法 1
  4. android oom工具,Android OOM-Heap,MAT工具检测内存泄露
  5. init进程 解析Android启动脚本init.rc 修改它使不启动android init.rc中启动一个sh文件...
  6. visio作图的一系列坑
  7. (微信小程序)微信小程序-毕设级项目搭建-微信小程序商城(内含源码,微信小程序+java逻辑后台+vue管理系统)
  8. 计算机视觉:图像分割算法综述总结
  9. 树状数组基础版解析+区间修改
  10. HttpServletResponse
  11. 中国互联网公司如何进军海外,先行者六点血泪教训
  12. 个人隐私保护法_浅学一下
  13. POJ 2942 Knights of the Round Table (奇圈+点双联通)
  14. 剑客vs刀客 Java vs .NET之飘逸的Java
  15. 用天然气做燃料极空气做氧化极的燃料电池
  16. 搜索引擎排名都选乐云seo_搜索优化技术选乐云seo
  17. 车架号/vin码识别
  18. 最令人蛋疼的10种用户体验设计师
  19. [Canvas绘图] 藏图阁(16) 人体穴位
  20. 【LMX2594调试软件TICS PRO的使用】

热门文章

  1. 去年北京居民服务消费快速增长 占消费支出半壁江山
  2. JAVA高性能I/O设计模式
  3. 这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)
  4. Mysql查询结果导出为Excel的几种方法
  5. rabbitMQ第四篇:远程调用
  6. 一入前端深似海,从此红尘是路人系列第四弹之未来前端路该何去何从
  7. TDD 测试驱动开发
  8. 【转载】实用的人际关系经验
  9. phonegap 总结
  10. sql防注入查询参数化parameters