前言:

     该文章将会介绍以下:

1,快速分析SQL日志的几种方法

2,使用mysql的全文索引快速分析少量SQL审计

3,准确快速分析4亿多条审计SQL日志(过程和最终解决方案)

公司核心库拆库拆表,对表和账号分析,大量系统连接,1主13个从库,几十个账号,后来都开通了全SQL审计,14个实例的审计日志条数每天超过4.5亿条+

  要求

1,怎么分析出这几百个表是哪些账号在用?

2,这些表那些账号在读,哪些在写?

  面临的问题:

1,如何能准确分析出表,账号和实例的关系

2,如何在14个实例中,能快速分析出结果

这件事情如何做,谁来做。弄来弄去,最后领导把这事硬丢给我,都不想接,但没办法硬着头皮做。

想想这些年都是做别人都不愿意做的事快速成长起来的,有时收获很多,现在想想的确是。

  正如中国军事战略家金一南将军说的:做难事,必有所得!

  这几个月做下来,收获总结成以下文档:

  方法:

1,方法一

手工下载csv文件,使用正则表达式,分析腾讯云导出这些审计日志csv文件 (分析很慢,而且不能把表对应具体的账号)  (此方法不行)

2,使用JSqlParser这样对SQL语义分析,解析出SQL的表名

手工下载csv文件,测试了一下,的确可以,有少量SQL无法解析,但是有4.5亿条,即使一条花费0.01秒,也要4百万秒分析完(超过1千多小时),  即使100个线程并发,也需要10个多小时,而且只是一天的量,效率太低太慢,而且如果中间出错,重新分析时间更长,而且还有部分SQL无法解析 (此方法不行)

是否有其他方法,能快速分析出SQL语句的表和账号关系, 突然想起了,可以把csv导入到MySQL表中,在SQL字段建立全文索引,通过python来分析全文索引,获取表和账号的关系,测试了MySQL的表全文索引,的确很好用

如查询表: ol_order ,如: lt_ol_order 表这个查询就不会查询处理,他查的是词,很好用。

如查询表,insert的用户和表的分析,取一条sql样例:

 SELECT count(*) num,user,'insert','ol_order',`sql`,date(`Timestamp`) dt FROM cc_0128 WHERE
MATCH(`sql`) AGAINST('+ol_order +insert' IN BOOLEAN MODE) group by user

对于delete,select,update和replace都可以这样分析出来。写5条SQL,一起union all,就可以

分析完后,分析有些异常数据:比如这样的语句: insert into 表 select 1,2  这样,如果再上面的语句加上 : `sql` like 'insert%' ,几百个表,5条SQL,查询比以前变慢很多!

怎么办?分析效率和准确率如何平衡

后来看了看,异常数据有些,但不多,可以针对异常数据的分析,以前的分析就不用改。修复的语句:

SELECT count(*) num,user,'insert','ol_order',`sql`,date(`Timestamp`)  FROM cc_0128 WHERE MATCH(`sql`)
AGAINST('+ol_order +insert' IN BOOLEAN MODE) and `sql` like 'insert%' group by user

这样就可以分析出表,账号还用调用次数的关系。

还能分析出表的字段被那些账号update更新。但几百个表。有1万多个字段,如果Python遍历,太低效,有没有更好的办法?

根据分析的update和表的关系,其实几百个表有更新的只有2百多个,只需遍历这200多个表的分析就可以了,这样既解决效率问题。

其实这个方法也可用,但是每次要下载csv文件,导表,建全文索引,再分析,太耗时间,后面把程序自动下载csv,通过filebeat导到ELK,在ELK直接查询,效率更高。

虽然用MySQL的表全文索引的方法未最终使用,但在分析少量数据(百万条),的确还是比较方便,如下:

额外收获:
如某一时刻,MySQL的QPS高,如何快速查出QPS高的表,导出范围日志csv到表,简单查一下(一般百万级别)
select tab,count(*) from (select id,substring_index(substring_index(LOWER(`sql`), 'where', 1),'from'
,-1) tab,`sql` from ol_sk1 ) t GROUP BY tab order by 2 desc
查询具体表的调用SQL:
select `User`,count(*), `sql` from ol_sk1 where MATCH(`sql`) AGAINST ('ol_admin_config') GROUP BY `User`
, `sql` order by 2 desc

   旧分析方法:

       SQL审计日志手工下载导入--MySQL全文索引--Python分析全文索引(最快遍历940张+表分析6000多万条需3个多小时,不能跨天,手工导出导入耗费大量人力时间)
    新分析方法:
       SQL审计日志Python程序化下载--filebeat--Kafka--ELK(14个实例每天4.5亿+条SQL执行日志) 
    新系统和ELK带来巨大便利:
        1,能全实例(14个实例),跨天长时间复杂查询分析(便利性和准确性远超腾讯云提供的审计日志查询)
        2,  新实例审计日志加到ELK,只需表中配置一条记录
        3,能快速准确的分析出表在online全实例账号调用情况,请求数量等
        4,审计日志导ELK程序系统化和配置化,无需人工介入,节省大量人力时间.
        ......
    额外带来好处便利
       1,更高效便利的线上bug数据分析
       2,数据安全审查的快速跟踪和分析
       ......
  
    相关文档:
  1. 用ELK分析每天4亿多条腾讯云MySQL审计日志(2)--EQL
  2. 用ELK分析每天4亿多条腾讯云MySQL审计日志(3)--下载日志
  3. 用ELK分析每天4亿多条腾讯云MySQL审计日志(4)--MySQL全文索引
  4. ELK查询和汇总
 

用ELK分析每天4亿多条腾讯云MySQL审计日志(1)--解决过程的更多相关文章

  1. jquery的$.extend和$.fn.extend作用及区别/用span实现进度条/腾讯云IIS端口号修改

    jQuery为开发插件提拱了两个方法,分别是: jQuery.fn.extend(); jQuery.extend(); 虽然 javascript 没有明确的类的概念,但是用类来理解它,会更方便. ...

  2. 服务质量分析:腾讯会议&腾讯云Elasticsearch玩出了怎样的新操作?

    导语 | 腾讯会议于2019年12月底上线,两个月内日活突破1000万,被广泛应用于疫情防控会议.远程办公.师生远程授课等场景,为疫情期间的复工复产提供了重要的远程沟通工具.上线100天内,腾讯会议快 ...

  3. [日志分析]Graylog2采集mysql慢日志

    之前聊了一下graylog如何采集nginx日志,为此我介绍了两种采集方法(主动和被动),让大家对graylog日志采集有了一个大致的了解. 从日志收集这个角度,graylog提供了多样性和灵活性,大 ...

  4. 使用Docker快速部署ELK分析Nginx日志实践(二)

    Kibana汉化使用中文界面实践 一.背景 笔者在上一篇文章使用Docker快速部署ELK分析Nginx日志实践当中有提到如何快速搭建ELK分析Nginx日志,但是这只是第一步,后面还有很多仪表盘需要 ...

  5. 4:ELK分析tomcat日志

    五.ELK分析tomcat日志 1.配置FIlebeat搜集tomcat日志 2.配置Logstash从filebeat输入tomcat日志 3.查看索引 4.创建索引

  6. 使用Docker快速部署ELK分析Nginx日志实践

    原文:使用Docker快速部署ELK分析Nginx日志实践 一.背景 笔者所在项目组的项目由多个子项目所组成,每一个子项目都存在一定的日志,有时候想排查一些问题,需要到各个地方去查看,极为不方便,此前 ...

  7. elk是指logstash,elasticsearch,kibana三件套,这三件套可以组成日志分析和监控工具

    Logstash是一个完全开源的工具,他可以对你的日志进行收集.分析,并将其存储供以后使用(如,搜索),您可以使用它.说到搜索,logstash带有一个web界面,搜索和展示所有日志.kibana 也 ...

  8. Python脚本收集腾讯云CDN日志,并入ELK日志分析

    负责搭建公司日志分析,一直想把CDN日志也放入到日志分析,前些日志终于达成所愿,现在贴出具体做法: 1.收集日志 腾讯云CDN日志一般一小时刷新一次,也就是说当前只能下载一小时之前的日志数据,但据本人 ...

  9. ELK 构建 MySQL 慢日志收集平台详解

    ELK 介绍 ELK 最早是 Elasticsearch(以下简称ES).Logstash.Kibana 三款开源软件的简称,三款软件后来被同一公司收购,并加入了Xpark.Beats等组件,改名为E ...

  10. ELK构建MySQL慢日志收集平台详解

    上篇文章<中小团队快速构建SQL自动审核系统>我们完成了SQL的自动审核与执行,不仅提高了效率还受到了同事的肯定,心里美滋滋.但关于慢查询的收集及处理也耗费了我们太多的时间和精力,如何在这 ...

随机推荐

  1. [转帖]ramfs、tmpfs、rootfs、ramdisk介绍

    ramfs.tmpfs.rootfs.ramdisk介绍   bootleader--->kernel---->initrd(是xz.cpio.是ramfs的一种,主要是驱动和为了加载ro ...

  2. [转帖]Jmeter之JDBC Request使用方法(oracle)

    https://zhuanlan.zhihu.com/p/121747788 JDBC Request: 这个sampler可以向数据库发送一个jdbc请求(sql语句),它经常需要和JDBC Con ...

  3. [转帖]JVM监控及诊断工具-命令行

    https://www.cnblogs.com/xiaojiesir/p/15622372.html 性能指标 停顿时间(响应时间) 提交请求和返回响应之间使用的时间,一般比较关注平均响应时间 常用操 ...

  4. git撤销推送到远端仓库的提交commit信息

    场景描述 有些时候,我们完成功能后,高兴的推送到远端. 推送到远端之后,我们才发现写错分支了. 这个时候,一万匹马在在内心奔腾而过. 然而,难受是没有用的,我们需要撤销推送到远端的代码 git log ...

  5. vue3中context.emit遇见的坑

    场景描述 今天遇见一个问题 ,子组件向上抛出去的事件. 被执行了两次,原因是 context.emit('click', item.id) 你的事件名是click 将click更改为其他事件名称,就可 ...

  6. 【验证码逆向专栏】最新某验三代滑块逆向分析,干掉所有的 w 参数!

    声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容.敏感网址.数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 本文章未经许 ...

  7. 【JS 逆向百例】转变思路,少走弯路,X米加密分析

    声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 逆向目标 目标:X米账号登 ...

  8. go中bytes.Buffer使用小结

    buffer 前言 例子 了解下bytes.buffer 如何创建bytes.buffer bytes.buffer的数据写入 写入string 写入[]byte 写入byte 写入rune 从文件写 ...

  9. 【3】VSCode 主题设置推荐,自定义配色方案,修改注释高亮颜色

    相关文章: [一]tensorflow安装.常用python镜像源.tensorflow 深度学习强化学习教学 [二]tensorflow调试报错.tensorflow 深度学习强化学习教学 [三]t ...

  10. C/C++ 实现FTP文件上传下载

    FTP(文件传输协议)是一种用于在网络上传输文件的标准协议.它属于因特网标准化的协议族之一,为文件的上传.下载和文件管理提供了一种标准化的方法,在Windows系统中操作FTP上传下载可以使用WinI ...