mysql sql审计及监控
2019-08-21 11:32
1281 查看
在dba平时的工作任务中随时都可能涉及到sql审计、突然的并发需要查明情况,而这两种需求在mysql官方社区版本中除了使用general log并没什么好的方式,而打开该log直接影响mysql本身执行性能,在社区中也有开源audit的方案,比如mariadb开源了有audit插件,要集成上去也存在一定的复杂度,即使集成上去了因为它是直接在mysql服务上做sql记录,这或多或少会影响一些mysql本身的执行性能
在我们的工作环境中正好这两个需求都有,又是用的官方版本,我们在尽量不想影响mysql本身性能的前提下最开始使用脚本每秒执行一次show processlist获取sql记录,这始终存在时间间隔,如果sql本身执行很快使用这种方式并不能获取到,最终我们通过调研mysql通信协议,考虑使用python抓包分析的方式来实现功能,经过我们线上使用功能基本没什么问题,开源出来供大家测试、使用,代码很简单,主要是对mysql协议的理解:
在我们的工作环境中正好这两个需求都有,又是用的官方版本,我们在尽量不想影响mysql本身性能的前提下最开始使用脚本每秒执行一次show processlist获取sql记录,这始终存在时间间隔,如果sql本身执行很快使用这种方式并不能获取到,最终我们通过调研mysql通信协议,考虑使用python抓包分析的方式来实现功能,经过我们线上使用功能基本没什么问题,开源出来供大家测试、使用,代码很简单,主要是对mysql协议的理解:
实现原理
1. 通过pypcap获取数据包,利用dpkt进行解包
2. 通过mysql协议发包回报过程组装session
3. 执行时间利用session开始结束时间进行计算(pypcap在py2中返回的时间戳只精确到十毫秒,所以在代码中使用当前时间做计算,会存在偏差)
4. 执行操作的用户名获取方式分为两种,如果是新建连接通过解包获取,如果是已经存在的长连接,通过后端数据库中processlist获取(前提是工具所获取的数据流后端就是mysql才能使用)
执行方式:
python tcp_audit.py -h 可以获取参数介绍
示例:
1、比如我在中间件层对后面3306端口的数据流进行监听:
python tcp_audit.py -e eth0 -p 3306 -t src -u username -P password
2、如果是对本地端口进行监听,比如我们中间件层端口为6001:
python tcp_audit.py -e eth0 -p 6001 -t des (这里未提供用户名密码,因为中间件改变了来源信息,而我监听的是应用到中间件这层的数据流,所以不能直接获取链接所使用的用户,只能使用默认的解包获取)
3、获取内容打印如下:
2019-08-06 08:52:22,984 INFO log.py : INFO source_host: 10.1.11.59 source_port: 59272 destination_host: 10.1.1.46 destination_port: 3306 user_name: test01 sql: INSERT INTO proxy_heart_beat.tb_heartbeat (p_id, p_ts) VALUES('?', '?') values: None execute_time:0.0001 status:#42000INSERT, UPDATE command denied to user 'test01'@'10.1.11.59' for table 'tb_heartbeat'
特别提醒:
1. 如果数据流非常大,该工具会使用不小的cpu时间
2. 日志保存在log目录,且默认10分钟切割一次,保留一个小时的数据,如有需要可自行修改log.py中的配置
需求的包:
dpkt、psutil、pypacp、pymysql
使用该工具可以搜集日志到elk等日志平台进行分析保存,也可直接保存为文件自己过滤分析
github 地址: https://github.com/wwwbjqcom/mysql_audit
有任何疑问或使用中的问题可以加qq群(479472450)交流
相关文章推荐
- SQL监控:mysql及mssql数据库SQL执行过程监控审计
- SQL监控:mysql及mssql数据库SQL执行过程监控审计
- SQL监控:mysql及mssql数据库SQL执行过程监控审计
- 开发同学的福利--mysql监控工具sqlprofiler,类似sqlserver的profiler工具
- mysql 监控 sql执行语句
- 轻量级面向SQL的MySQL开源监控工具
- 跟踪监控MYSQL执行的sql语句
- mysql执行sql及慢查询监控 推荐
- 跟踪监控MYSQL执行的sql语句
- MySql 监控sql执行
- binlog+审计日志 定位mariadb(mysql)数据库特定sql
- Mysql 对SQL语句监控查看的记录
- mysql监控工具sqlprofiler,类似sqlserver的profiler工具
- 监控mysql执行的sql语句
- 使用Mysql慢查询日志对有效率问题的SQL进行监控
- MySQL监控SQL及命中率脚本
- Mysql 慢 sql 日志监控
- MySQL监控全部执行过的sql语句
- java 监控mysql执行sql
- 根据mysql慢日志监控SQL语句执行效率