zabbix mysql qps_zabbix监控mysql的tps和qps
通过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相关推荐
- 使用Zabbix自带MySQL模板监控MySQL
使用Zabbix自带MySQL模板监控MySQL 1. 安装zabbix agent [root@szlinux02 ~]# rpm -ivh http://repo.zabbix.com/zabbi ...
- 利用Zabbix ODBC monitoring监控MySQL
利用Zabbix ODBC monitoring监控MySQL 1. 创建群组ODBC Templates 2. 创建Template SQL Server和Template MySQL 3. 在Za ...
- zabbix入门之监控MySQL
zabbix入门之监控MySQL 这里使用的是zabbix官方自带的MySQL监控模板. 首先确保在被监控主机安装zabbix-agent.zabbix-sender,并且将主机加入监控节点.具体操作 ...
- 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, ...
- zabbix的mysql模板_使用Zabbix自带MySQL模板监控MySQL
使用Zabbix自带MySQL模板监控MySQL 1. 安装zabbix agent[root@szzabbix ~]# rpm -ivh http://repo.zabbix.com/zabbix/ ...
- 使用Zabbix官方模板监控MySQL
关于Zabbix和MySQL安装就不在说明,请自行参考相关文档 复制官方MySQL监控的userparameter到安装目录,我这里是采用的3.4.1源码安装,安装目录在/usr/local/zabb ...
- zabbix mysql.status_Zabbix 监控 Mysql 状态
简介: 如何使用 Zabbix 来监控 Mysql 状态 ? Zabbix 有自带监控 Mysql 的模板,但是却不能直接使用.. 需要我们根据模板提供的 Key 自己写脚本获取数据 1.查看都有哪些 ...
- zabbix mysql.status_zabbix 监控mysql状态
自定义监控项 Zabbix自己提供的模板可以监控mysql slow queries,mysqlversion,uptime,alive等信息,我们可以通过Zabbix官方提供的监控模板Templat ...
- mysql qps tps 监控_Mysql库TPS,QPS实时监控脚本
作为一名数据库运维人员,手里都有一些工具脚本,这些都是你提升运维效率,快速排查故障的利器. 在生产上部署MySQL时,都会对同一配置的mysql数据库做QPS和TPS压测,获取QPS和TPS的容量数据 ...
最新文章
- sqlalchemy 网页_抓取网页数据,上班也能看股票
- 反向 Dropout!韩松团队最新工作NetAug:提高Tiny神经网络性能的新训练方法
- 设置cl.exe环境变量
- FragmentPagerAdapter与FragmentStatePagerAdapter使用详解与区别
- 4.2小时完成数万年计算,比超级计算机快亿亿亿倍!量子计算机“祖冲之号”“九章”再升级...
- Android全屏与透明状态栏
- OpenCV gapi模块基本API的实例(附完整代码)
- Dev c++一些调试方法
- SSH应用之BBS之路-2、Hibernate配置
- JdbcTemplate 的使用
- 8.3 Spring Boot集成Scala混合Java开发
- geoda权重矩阵导入matlab,geoda 导入空间权重矩阵怎么做
- RubyInstaller
- 处于停机等非正常状态_汽轮机运行最重要的启动与停机阶段,你得了解这些实际经验...
- FeignClient方式调用第三方接口
- openerp换mysql_OpenERP 源码变更后数据库升级
- java万年历闹钟节气,闹钟 提醒 万年历 用酷石英钟搞定
- 计算机专业近几年的参考文献,近几年计算机专业发参考文献 计算机专业发专著类参考文献哪里找...
- 2020年数据智能领域的“三宗最”,吴晓波罗胖都没提!
- SF31丨构建抄底摸顶策略的一小步