Anemometer自动审核sql,添加自定义字段,二次开发需要修改的地方
来源:互联网 发布:网络对人们生活的影响 编辑:程序博客网 时间:2024/06/05 20:47
定制内容如下:
一、
设置一个单独的datasources,可以命名为audit_sql.
这个datasources里面只放置开发环境或者测试环境的慢查询(你要做sql审核基于哪个环境),将此环境的long_query_time设置为0,接收所有的sql查询.
二、修改anemometer
ALTER TABLE `global_query_review` ADD audit_status VARCHAR(255) NOT NULL DEFAULT 'refuse' comment 'sql审计的状态 refuse未通过 pass审核通过';
修改PHP代码.
在report模块的where条件中增加一个Aduit Status的选项框,可以过滤audit_status的状态
在show_query模块中增加一个Audit Status的选项框,可以人工设置audit_status的状态
三、增加两个额外的脚本,准实时的分析audit_status为refuse的sql,如果sql的满足自动审核通过的条件,那么就设置audit_status为pass,表示自动审核通过.
自动审核未通过的sql,由DBA人工在anemometer上检索和处理.
这里就涉及到一个自动审核通过的算法:
算法分两种.
第一种是准实时,也就是可以几分钟或者一个小时运行一次,主要是根据每个sql的执行效率判断是否pass.
对应的脚本名字叫做:audit_sql.py
第二种是一天一次,弱化执行效率判断,增加一天执行的频率判断.
对应的脚本名字叫做:audit_sql_day.py
自定义audit_status字段需要修改的地方,全部修改后,可以完成自定义字段的增加:
/var/www/html/anemometer/views/report.php ,搜索:reviewed_status 关键字。前端展示页面。
/var/www/html/anemometer/lib/Anemometer.php ,搜索:reviewed_status 关键字。另外:319行,430行。
/var/www/html/anemometer/lib/AnemometerModel.php:84:
/var/www/html/anemometer/lib/AnemometerModel.php:85:
/data/server/anemometer/conf/config.inc.php ,搜索:review_types 关键字。数组文件,定义默认选项内容。line:369,453增加where条件。
/data/server/anemometer/conf/config.inc.php 中搜索 $conf['reports']['slow_query_log'] = array( ,该方法下查找:'custom_fields' => array(,
一、
设置一个单独的datasources,可以命名为audit_sql.
这个datasources里面只放置开发环境或者测试环境的慢查询(你要做sql审核基于哪个环境),将此环境的long_query_time设置为0,接收所有的sql查询.
二、修改anemometer
ALTER TABLE `global_query_review` ADD audit_status VARCHAR(255) NOT NULL DEFAULT 'refuse' comment 'sql审计的状态 refuse未通过 pass审核通过';
修改PHP代码.
在report模块的where条件中增加一个Aduit Status的选项框,可以过滤audit_status的状态
在show_query模块中增加一个Audit Status的选项框,可以人工设置audit_status的状态
三、增加两个额外的脚本,准实时的分析audit_status为refuse的sql,如果sql的满足自动审核通过的条件,那么就设置audit_status为pass,表示自动审核通过.
自动审核未通过的sql,由DBA人工在anemometer上检索和处理.
这里就涉及到一个自动审核通过的算法:
算法分两种.
第一种是准实时,也就是可以几分钟或者一个小时运行一次,主要是根据每个sql的执行效率判断是否pass.
对应的脚本名字叫做:audit_sql.py
第二种是一天一次,弱化执行效率判断,增加一天执行的频率判断.
对应的脚本名字叫做:audit_sql_day.py
自定义audit_status字段需要修改的地方,全部修改后,可以完成自定义字段的增加:
/var/www/html/anemometer/views/report.php ,搜索:reviewed_status 关键字。前端展示页面。
/var/www/html/anemometer/lib/Anemometer.php ,搜索:reviewed_status 关键字。另外:319行,430行。
/var/www/html/anemometer/lib/AnemometerModel.php:84:
/var/www/html/anemometer/lib/AnemometerModel.php:85:
/data/server/anemometer/conf/config.inc.php ,搜索:review_types 关键字。数组文件,定义默认选项内容。line:369,453增加where条件。
/data/server/anemometer/conf/config.inc.php 中搜索 $conf['reports']['slow_query_log'] = array( ,该方法下查找:'custom_fields' => array(,
依照'rows_sent_avg' => 'ROUND(SUM(Rows_sent_sum)/SUM(ts_cnt),0)', 添加自定义字段,这样在慢查询统计界面左上角自定义列中可以看到自定义的列。
audit_sql.py 脚本内容
#!/usr/bin/python# coding=utf-8'''auto audit sql taskhuoyuanshen20170616继续统计参数进行sql自动审核。'''import MySQLdbdb = MySQLdb.connect("192.168.1.148","root","123456","slow_query_log") #Anemometer所在数据库的配置。#过滤参数配置Query_time_max=0.1 #执行最慢的那个sql语句花费的时间Query_time_pct_95=0.08 #执行时间位于95%分位的sql执行时间Query_time_median=0.06 #执行时间位于中位数位置的sql执行时间Lock_time_pct_95=0.01#位于95%分位的sql锁定时间def run():cursor = db.cursor()sql = '''UPDATE `global_query_review` aa,( SELECT a.`checksum`, MAX(b.`Query_time_max`), AVG(b.`Query_time_pct_95`), AVG(b.`Query_time_median`), AVG(b.`Lock_time_pct_95`), MAX(b.`Rows_sent_max`), AVG(b.`Rows_sent_pct_95`), AVG(b.`Rows_examined_pct_95`), MAX(b.`Rows_examined_max`), AVG(b.`Bytes_median`) FROM `global_query_review` a, global_query_review_history bWHERE a.`checksum` = b.`checksum` and a.audit_status = 'refuse' GROUP BY a.`checksum` HAVING ( MAX(b.`Query_time_max`) < %s OR AVG(b.`Query_time_pct_95`) < %s OR AVG(b.`Query_time_median`) < %s ) AND AVG(b.`Lock_time_pct_95`) < %s AND ( MAX(b.`Rows_sent_max`) < 1000 OR AVG(b.`Rows_sent_pct_95`) < 100 ) AND ( AVG(b.`Rows_examined_pct_95`) < 500 OR MAX(b.`Rows_examined_max`) < 2000 ) AND AVG(b.`Bytes_median`) < 1000 ) bbSET aa.`audit_status` = 'pass'WHERE aa.`checksum` = bb.checksum''' % (Query_time_max,Query_time_pct_95,Query_time_median,Lock_time_pct_95)#定义特殊的语句,建议除了DDL语句,其他DML语句在Anemometer前端统一维护。sql2 = '''UPDATE `global_query_review` a SET a.`audit_status` = 'pass' WHERE a.`audit_status` = 'refuse' AND (a.`sample` LIKE '%show create table%' OR a.`sample` LIKE '%/*!40001 SQL_NO_CACHE */%' OR a.sample LIKE 'explain%' );'''try: cursor.execute(sql) cursor.execute(sql2) db.commit() print 'Exec sucessful'except: db.rollback() print 'Exec fail'db.close()if __name__=='__main__': run()
audit_sql_day.py脚本内容
#!/usr/bin/python#coding=utf-8'''auto audit sql taskhuoyuanshen20170616将执行次数计算在内的sql自动审核脚本'''import MySQLdb#过滤参数配置Query_time_max=1 #执行最慢的那个sql语句花费的时间Lock_time_max=0.01 #最大sql锁定时间db = MySQLdb.connect("192.168.1.148","root","123456","slow_query_log") #连接到Anemometer数据库的链接def run():cursor = db.cursor()sql = '''UPDATE `global_query_review` aa,( SELECT a.`checksum`, COUNT(b.`checksum`) AS coun , sum(b.`ts_cnt`) AS sum_ts_cntFROM `global_query_review` a, global_query_review_history b WHERE a.`checksum` = b.`checksum` AND a.audit_status = 'refuse' GROUP BY a.`checksum` HAVING MAX(b.`Query_time_max`) < %s AND AVG(b.`Lock_time_max`) < %s AND (MAX(b.`Rows_sent_max`) <= 1000) AND MAX(b.`Rows_examined_max`) < 5000 AND AVG(b.`Bytes_median`) < 5000 AND coun < 5 AND sum_ts_cnt < 10) bbSET aa.`audit_status` = 'pass'WHERE aa.`checksum` = bb.checksum''' % (Query_time_max,Lock_time_max)cursor.execute(sql) try: cursor.execute(sql) db.commit() print 'Exec sucessful' except: db.rollback() print 'Exec fail' db.close()if __name__=='__main__':run()
阅读全文
0 0
- Anemometer自动审核sql,添加自定义字段,二次开发需要修改的地方
- 需要修改的地方
- ecshop二次开发 给商品添加自定义字段
- PreferenceActivity中添加自定义布局文件需要注意的地方
- SQL SERVER添加删除修改字段的SQL
- SQl Server 添加字段、修改字段
- Nutch 二次开发需要修改的东西
- Nutch 二次开发需要修改的东西
- Ecshop二次开发:给商品添加自定义字段(三)
- Ecshop二次开发:给商品添加自定义字段(三)
- 用SQL语句添加删除修改字段、一些表与字段的基本操作、数据库备份等,需要的朋友可以参考下。
- 用SQL语句添加删除修改字段、一些表与字段的基本操作、数据库备份等,需要的朋友可以参考下。
- 用SQL语句添加删除修改字段、一些表与字段的基本操作、数据库备份等,需要的朋友可以参考下。
- 将鼠标指针修改为自定义图片需要注意的几个地方
- 添加FCKeditor插件需要注意的地方
- 重装系统后,需要修改的地方
- 电子商务系统需要修改的地方
- 电子商务系统需要修改的地方
- Hibernate如何使用BigDecimal
- 人生中第一个记忆化搜索题 hdu1978
- oracle拷贝数据导另一个用户
- java必备技能-集合类的遍历删除和包含判断
- springboot中使用logback
- Anemometer自动审核sql,添加自定义字段,二次开发需要修改的地方
- 常用软件注册码
- SDK安装的闪退问题
- freemarker几个字符的含义
- yolo-darknet在ubuntu下的GPU版本安装与测试
- 【PM】精确的恒流调节有助于提高快速充电
- [PHP学习]论PHP调用.net的webservice接口所碰到的坑
- user space 通过SIOCSIFNAME修改网口的name
- ASP.Net 在IIS中的处理过程