[root@xx scripts]# ls
table.txt testslownum.py testslowtable.py
[root@xx scripts]# cat testslowtable.py
#!/usr/bin/python
# coding:utf-8
import subprocess
import json
file='/usr/local/zabbix/scripts/table.txt'
tables=[]
with open(file,'r') as f:
for i in f.readlines():
table = i.strip('\n')
tables.append({'{#TABLE_NAME}': table})
print json.dumps({'data': tables}, indent=4, separators=(',', ':'))
结合lepus库
<code>[root@ct1 scripts]</code><code># cat testslownum.py </code>
<code>#!/usr/bin/python</code>
<code># coding:utf-8</code>
<code>import</code> <code>datetime,time</code>
<code>import</code> <code>sys</code>
<code>import</code> <code>MySQLdb</code>
<code>from</code> <code>ConfigParser </code><code>import</code> <code>ConfigParser</code>
<code>conf </code><code>=</code> <code>ConfigParser()</code>
<code>timenow </code><code>=</code> <code>time.localtime()</code>
<code>datenow </code><code>=</code> <code>time.strftime(</code><code>'%Y-%m-%d 00:00:00'</code><code>, timenow)</code>
<code>logstr </code><code>=</code> <code>"%s"</code> <code>%</code> <code>datenow</code>
<code>#datefmt='%Y-%m-%d %H:%M:%S'</code>
<code>con </code><code>=</code> <code>MySQLdb.connect(</code><code>'ip'</code><code>, </code><code>'root'</code><code>, </code><code>'xx'</code><code>, </code><code>'lepus'</code><code>)</code>
<code>def</code> <code>select(table):</code>
<code> </code><code>cursor </code><code>=</code> <code>con.cursor()</code>
<code> </code><code>sql </code><code>=</code> <code>"SELECT sum(t2.ts_cnt) as ts_cnt_sum FROM ( SELECT a.CHECKSUM,a.fingerprint,a.sample,a.first_seen,a.last_seen,b.serverid_max,b.db_max,b.user_max,b.ts_min,b.ts_max,sum(b.ts_cnt) AS ts_cnt,sum(b.Query_time_sum) / sum(b.ts_cnt) AS Query_time_avg,max(b.Query_time_max) AS Query_time_max,min(b.Query_time_min) AS Query_time_min,b.Query_time_sum AS Query_time_sum,max(b.Lock_time_max) AS Lock_time_max,min(b.Lock_time_min) AS Lock_time_min,sum(b.Lock_time_sum) AS Lock_time_sum FROM mysql_slow_query_review a JOIN mysql_slow_query_review_history b WHERE a. CHECKSUM = b. CHECKSUM AND b.serverid_max = '276' GROUP BY a. CHECKSUM) t2 WHERE t2.last_seen >= '%s' and t2.db_max='%s' ORDER BY t2.ts_cnt DESC"</code> <code>%</code><code>(datenow,table)</code>
<code> </code><code>##print sql</code>
<code> </code><code>cursor.execute(sql)</code>
<code> </code><code>template_list </code><code>=</code> <code>cursor.fetchall()</code>
<code> </code><code>res </code><code>=</code> <code>template_list</code>
<code> </code><code>for</code> <code>m </code><code>in</code> <code>res:</code>
<code> </code><code>print</code> <code>int</code><code>(m[</code><code>0</code><code>])</code>
<code> </code><code>cursor.close()</code>
<code>if</code> <code>__name__ </code><code>=</code><code>=</code> <code>'__main__'</code><code>:</code>
<code> </code><code>table </code><code>=</code> <code>sys.argv[</code><code>1</code><code>]</code>
<code> </code><code>result </code><code>=</code> <code>select(table)</code>
[root@xx zabbix_agentd.conf.d]# cat slow_num.conf
UserParameter=slowtable.discovery,/usr/bin/python /usr/local/zabbix/scripts/testslowtable.py
UserParameter=slowtable.nums[*],sudo /usr/bin/python /usr/local/zabbix/scripts/testslownum.py $1
#chmod g-wx,o-wx ~/.cache/Python-Eggs
zabbix添加
主要是每天的慢查询各个库的查询数量,做这个,主要看下每个库的查询数量,目前发现读比写多。
<code>SELECT</code>
<code> </code><code>sum</code><code>(t2.ts_cnt) as ts_cnt_sum</code>
<code>FROM</code>
<code> </code><code>(</code>
<code> </code><code>SELECT</code>
<code> </code><code>a. CHECKSUM,</code>
<code> </code><code>a.fingerprint,</code>
<code> </code><code>a.sample,</code>
<code> </code><code>a.first_seen,</code>
<code> </code><code>a.last_seen,</code>
<code> </code><code>b.serverid_max,</code>
<code> </code><code>b.db_max,</code>
<code> </code><code>b.user_max,</code>
<code> </code><code>b.ts_min,</code>
<code> </code><code>b.ts_max,</code>
<code> </code><code>sum</code><code>(b.ts_cnt) AS ts_cnt,</code>
<code> </code><code>sum</code><code>(b.Query_time_sum) </code><code>/</code> <code>sum</code><code>(b.ts_cnt) AS Query_time_avg,</code>
<code> </code><code>max</code><code>(b.Query_time_max) AS Query_time_max,</code>
<code> </code><code>min</code><code>(b.Query_time_min) AS Query_time_min,</code>
<code> </code><code>b.Query_time_sum AS Query_time_sum,</code>
<code> </code><code>max</code><code>(b.Lock_time_max) AS Lock_time_max,</code>
<code> </code><code>min</code><code>(b.Lock_time_min) AS Lock_time_min,</code>
<code> </code><code>sum</code><code>(b.Lock_time_sum) AS Lock_time_sum</code>
<code> </code><code>FROM</code>
<code> </code><code>mysql_slow_query_review a</code>
<code> </code><code>JOIN mysql_slow_query_review_history b</code>
<code> </code><code>WHERE</code>
<code> </code><code>a. CHECKSUM </code><code>=</code> <code>b. CHECKSUM</code>
<code> </code><code>AND b.serverid_max </code><code>=</code> <code>'276'</code> <code>AND b.ts_min ></code><code>=</code> <code>'2017-11-21 00:00:00'</code>
<code> </code><code>GROUP BY</code>
<code> </code><code>a. CHECKSUM</code>
<code> </code><code>) t2</code>
<code>WHERE</code>
<code> </code><code>t2.last_seen ></code><code>=</code> <code>'2017-11-21 00:00:00'</code>
<code>AND t2.db_max </code><code>=</code> <code>'o2oservice'</code>
<code>AND t2.Query_time_min > </code><code>1</code>
<code>-</code><code>-</code> <code>AND t2.ts_cnt > </code><code>50</code>
<code>ORDER BY</code>
<code> </code><code>t2.ts_cnt DESC</code>
本文转自 liqius 51CTO博客,原文链接:http://blog.51cto.com/szgb17/1980016,如需转载请自行联系原作者