通过zabbix监控mysql的tps和qps,我们之前的percona mysql模板是没有关于这两个监控项的,需要我们通过脚本进行统计分析。

一、脚本思路:

#统计qps来源

show global status where Variable_name in('com_select','com_insert','com_delete','com_update');

#统计tps来源

show global status where Variable_name in('com_commit','com_rollback');

1.通过以上两条sql可以统计mysql从启动开始运行至今所有的qps、tps来源,我们每5分钟统计一次,使用(第二次-第一次)/时间差,可以得到qps、tps。

2.为了避免每次读库并提高脚本运行的效率,我们将本次的qps、tps来源存入临时文件,以便下次计算使用

3.由于脚本第一次运行没有临时文件或临时文件为空,因此我们通过延迟1秒读两次库,两次统计之差直接得到本次的qps

4.后续使用临时文件中的数据即可

二、脚本如下:

#!/usr/bin/env python

#-*- coding: utf8 -*-

#date: 2018-04-12

#author: yanggd

#comment: 计算mysql的qps和tps

import MySQLdb

import time

import sys

import os

class Mysql(object):

def __init__(self, host, port, user, passwd, db, unix_socket='/tmp/mysql.sock'):

self.host = host

self.port = port

self.user = user

self.passwd = passwd

self.db = db

self.unix_socket = unix_socket

self.conn = MySQLdb.connect(host=self.host,port=self.port,user=self.user,passwd=self.passwd,db=self.db,unix_socket=self.unix_socket)

self.cursor = self.conn.cursor()

def queryQps(self):

#获取qps来源

sql = "show global status where Variable_name in('com_select','com_insert','com_delete','com_update');"

self.cursor.execute(sql)

return self.cursor.fetchall()

def queryTps(self):

#获取tps来源

sql = "show global status where Variable_name in('com_commit','com_rollback');"

self.cursor.execute(sql)

return self.cursor.fetchall()

def closeDB(self):

self.cursor.close()

self.conn.close()

class Qps(object):

def __init__(self,qps_com):

self.qps_com = qps_com

def getQps(self):

qps_total = 0

for res in self.qps_com:

qps_total += int(res[1])

return qps_total

class Tps(object):

def __init__(self,tps_com):

self.tps_com = tps_com

def getTps(self):

tps_total = 0

for res in self.tps_com:

tps_total += int(res[1])

return tps_total

if __name__ == '__main__':

#时间间隔

diff = 300

#临时存放上次的qps,tps文件

qps_before = '/tmp/qps'

tps_before = '/tmp/tps'

mysql = Mysql('localhost',3306,'root','test','')

if len(sys.argv) <> 2:

print "Usage: " + sys.argv[0] + ' qps|tps'

elif sys.argv[1] == 'qps':

#若临时文件不存在或数据为空,通过延迟1秒,来获取本次的qps;最后将本次的qps来源数据存放到临时文件,供下次使用

if not os.path.exists(qps_before) or os.path.getsize(qps_before) == 0:

qps_com = mysql.queryQps()

qps = Qps(qps_com)

q1 = qps.getQps()

time.sleep(1)

qps_com = mysql.queryQps()

qps = Qps(qps_com)

q2 = qps.getQps()

print (q2-q1)

with open(qps_before, 'w') as f:

f.write(str(q2))

#若临时文件存在且有数据,获取上次qps并计算;最后将本次的qps来源数据存放到临时文件,供下次使用

else:

qps_com = mysql.queryQps()

qps = Qps(qps_com)

qps_cur = qps.getQps()

with open(qps_before) as f:

qps_last=f.read()

print (qps_cur-int(qps_last))/diff

with open(qps_before, 'w') as f:

f.write(str(qps_cur))

elif sys.argv[1] == 'tps':

#若临时文件不存在或数据为空,通过延迟1秒,来获取本次的tps;最后将本次的tps来源数据存放到临时文件,供下次使用

if not os.path.exists(tps_before) or os.path.getsize(tps_before) == 0:

tps_com = mysql.queryTps()

tps = Tps(tps_com)

t1 = tps.getTps()

time.sleep(1)

tps_com = mysql.queryTps()

tps = Tps(tps_com)

t2 = tps.getTps()

print (t2-t1)

with open(tps_before, 'w') as f:

f.write(str(t2))

#若临时文件存在且有数据,获取上次tps并计算;最后将本次的tps来源存放到临时文件,供下次使用

else:

tps_com = mysql.queryTps()

tps = Tps(tps_com)

tps_cur = tps.getTps()

with open(tps_before) as f:

tps_last=f.read()

print (tps_cur-int(tps_last))/diff

with open(tps_before, 'w') as f:

f.write(str(tps_cur))

else:

print "请输入正确参数: qps|tps"

mysql.closeDB()

三、配置zabbix agent

cd /etc/zabbix/zabbix_agentd.d/

vim userparameter_tps_qps.conf

UserParameter=mysql.qps,python /App/scripts/zabbix/mysql_qps_tps.py qps

UserParameter=mysql.tps,python /App/scripts/zabbix/mysql_qps_tps.py tps

四、配置percona mysql模板

1.配置监控项

2.配置图形

注意:时间间隔为300s,我们每5分钟统计一次。

mysql tps的监控项和图像也按如上配置。

四、总结

除了上述方式,还可以使用:

基于 questions 计算qps,基于 com_commit com_rollback 计算tps

questions = show global status like 'questions';

uptime = show global status like 'uptime';

qps=questions/uptime

com_commit = show global status like 'com_commit';

com_rollback = show global status like 'com_rollback';

uptime = show global status like 'uptime';

tps=(com_commit + com_rollback)/uptime

Questions 是记录了从mysqld启动以来所有的select,dml 次数包括show 命令的查询的次数。这样多少有失准确性,比如很多数据库有监控系统在运行,每5秒对数据库进行一次show 查询来获取当前数据库的状态,而这些查询就被记录到QPS,TPS统计中,造成一定的”数据污染”。

zabbix mysql qps_zabbix监控mysql的tps和qps相关推荐

  1. 使用Zabbix自带MySQL模板监控MySQL

    使用Zabbix自带MySQL模板监控MySQL 1. 安装zabbix agent [root@szlinux02 ~]# rpm -ivh http://repo.zabbix.com/zabbi ...

  2. 利用Zabbix ODBC monitoring监控MySQL

    利用Zabbix ODBC monitoring监控MySQL 1. 创建群组ODBC Templates 2. 创建Template SQL Server和Template MySQL 3. 在Za ...

  3. zabbix入门之监控MySQL

    zabbix入门之监控MySQL 这里使用的是zabbix官方自带的MySQL监控模板. 首先确保在被监控主机安装zabbix-agent.zabbix-sender,并且将主机加入监控节点.具体操作 ...

  4. mysql mpm_使用Zabbix + MPM全面监控MySQL

    Zabbix和MPM监控MySQL 环境说明 A: 192.168.1.190, 系统CentOS 6.3,部署Zabbix ServerB: 192.168.1.191, 系统CentOS 6.3, ...

  5. zabbix的mysql模板_使用Zabbix自带MySQL模板监控MySQL

    使用Zabbix自带MySQL模板监控MySQL 1. 安装zabbix agent[root@szzabbix ~]# rpm -ivh http://repo.zabbix.com/zabbix/ ...

  6. 使用Zabbix官方模板监控MySQL

    关于Zabbix和MySQL安装就不在说明,请自行参考相关文档 复制官方MySQL监控的userparameter到安装目录,我这里是采用的3.4.1源码安装,安装目录在/usr/local/zabb ...

  7. zabbix mysql.status_Zabbix 监控 Mysql 状态

    简介: 如何使用 Zabbix 来监控 Mysql 状态 ? Zabbix 有自带监控 Mysql 的模板,但是却不能直接使用.. 需要我们根据模板提供的 Key 自己写脚本获取数据 1.查看都有哪些 ...

  8. zabbix mysql.status_zabbix 监控mysql状态

    自定义监控项 Zabbix自己提供的模板可以监控mysql slow queries,mysqlversion,uptime,alive等信息,我们可以通过Zabbix官方提供的监控模板Templat ...

  9. mysql qps tps 监控_Mysql库TPS,QPS实时监控脚本

    作为一名数据库运维人员,手里都有一些工具脚本,这些都是你提升运维效率,快速排查故障的利器. 在生产上部署MySQL时,都会对同一配置的mysql数据库做QPS和TPS压测,获取QPS和TPS的容量数据 ...

最新文章

  1. sqlalchemy 网页_抓取网页数据,上班也能看股票
  2. 反向 Dropout!韩松团队最新工作NetAug:提高Tiny神经网络性能的新训练方法
  3. 设置cl.exe环境变量
  4. FragmentPagerAdapter与FragmentStatePagerAdapter使用详解与区别
  5. 4.2小时完成数万年计算,比超级计算机快亿亿亿倍!量子计算机“祖冲之号”“九章”再升级...
  6. Android全屏与透明状态栏
  7. OpenCV gapi模块基本API的实例(附完整代码)
  8. Dev c++一些调试方法
  9. SSH应用之BBS之路-2、Hibernate配置
  10. JdbcTemplate 的使用
  11. 8.3 Spring Boot集成Scala混合Java开发
  12. geoda权重矩阵导入matlab,geoda 导入空间权重矩阵怎么做
  13. RubyInstaller
  14. 处于停机等非正常状态_汽轮机运行最重要的启动与停机阶段,你得了解这些实际经验...
  15. FeignClient方式调用第三方接口
  16. openerp换mysql_OpenERP 源码变更后数据库升级
  17. java万年历闹钟节气,闹钟 提醒 万年历 用酷石英钟搞定
  18. 计算机专业近几年的参考文献,近几年计算机专业发参考文献 计算机专业发专著类参考文献哪里找...
  19. 2020年数据智能领域的“三宗最”,吴晓波罗胖都没提!
  20. SF31丨构建抄底摸顶策略的一小步

热门文章

  1. 机器学习中的数学——常用概率分布(十):贝塔分布(Beta分布)
  2. linux的tail用法,tail命令_Linux tail命令用法详解
  3. 职高一计算机专业阶段性目标500字,职高计算机专业职业生涯规划书
  4. js中html网页打开中文乱码
  5. CockroachDB-备份与恢复(6)RESTORE命令
  6. Android 解压 Zip 压缩文件
  7. 华为2017年实习面试面经(研发类)
  8. 曼孚科技入选IDC中国数据智能市场代表厂商
  9. python检测端口是否被占用_python判断指定的端口是否被占用
  10. 奇妙的 Docker Inspect