天天看点

zabbix 监控各个库的慢查询数量

[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 &gt;= '%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 &gt;</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 &gt;</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 &gt; </code><code>1</code>

<code>-</code><code>-</code> <code>AND t2.ts_cnt &gt; </code><code>50</code> 

<code>ORDER BY</code>

<code>    </code><code>t2.ts_cnt DESC</code>

本文转自 liqius 51CTO博客,原文链接:http://blog.51cto.com/szgb17/1980016,如需转载请自行联系原作者