zabbix利用python脚本监控lvslinux lvs 负载均衡衡,状态提示不支持。是怎么回事

Zabbix监控LVS状态及keepalived VIP漂移 - 推酷
Zabbix监控LVS状态及keepalived VIP漂移
此文只说 lvs 监控, lvs+keepalived 的部署,请参考我另外的文章。
1 、监控目标
lvs 的每秒会话连接数
lvs 的每秒包转发数
lvs 每秒转发带宽
VIP 切换情况
keepalived 进程的存活
2 、 zabbix_sender 汇报脚本
主要汇报内容:
会话连接数,每秒包转发数,每秒转发带宽, VIP 值
监控python脚本,采用 zabbix_sender 上报方式:
# cat/usr/local/lvsmonitor/lvs_status_sender.py
#!/usr/bin/env python
#coding=utf-8
#auth :yangr
#function:汇报lvs的相关状态,有每秒连接数,每秒转发数,VIP主从切换.每秒转发带宽
#lvs_conns_sec,lvs_packets_sec,keepalived_vip_status
import os,commands,sys,time
#变量定义----------------------
#从zabbix_agentd.conf中获取server IP或hostname
zabbix_agent_file='/usr/local/zabbix/etc/zabbix_agentd.conf'
if notos.path.exists(zabbix_agent_file):
sys.exit(4)
zabbix_server=commands.getstatusoutput('''grep'^ServerActive' %s|awk -F[=] '{print $2}' '''%zabbix_agent_file)[1].strip()
zabbix_hostname=commands.getstatusoutput('''grep'^Hostname' %s|awk -F[=] '{print $2}' '''%zabbix_agent_file)[1].strip()
if not zabbix_server or notzabbix_hostname:
sys.exit()
zabbix_server_port=10051
timestamp = int(time.time())
keepalived_vip=['192.168.1.100']
tmp_file_path='/tmp/lvs_status.txt'
#指定监控值输出文件
#-------------------------
def monit_lvs():
#获取每秒包转发数
status,lvs_packets_sec=commands.getstatusoutput('''tail -1/proc/net/ip_vs_stats | /usr/bin/awk '{print strtonum(&0x&$1),strtonum(&0x&$2), strtonum(&0x&$3), strtonum(&0x&$4),strtonum(&0x&$5)}'|awk '{print $2}' ''')
#获取每秒转发的流量
status,lvs_bit_sec=commands.getstatusoutput('''tail -1/proc/net/ip_vs_stats | /usr/bin/awk '{print strtonum(&0x&$1),strtonum(&0x&$2), strtonum(&0x&$3),strtonum(&0x&$4), strtonum(&0x&$5)}'|awk '{print $4}' ''')
#获取lvs会话连接数
status,lvs_conns_sec=commands.getstatusoutput('wc -l/proc/net/ip_vs_conn')
#获取VIP状态,如值非0为master,为0则是backup,如果有变动,则进行了切换
status,lvs_keepalived_vip_status=commands.getstatusoutput('/sbin/ipaddr |grep %s |wc -l'%keepalived_vip[0])
#如果本机有VIP,则取出VIP的最后一段十进制。
if int(lvs_keepalived_vip_status) != 0:
status,result_ip=commands.getstatusoutput(''' echo%s|awk -F '.' '{print $NF}' '''%keepalived_vip[0])
lvs_keepalived_vip_status =int(result_ip)
#把 key值信息写到一个临时文件,格式为 hostname,key,timestamp,value
with open(tmp_file_path,'wb') as f:
f.write('%s %s %s %s\n'%(zabbix_hostname,'lvs_packets_sec',timestamp,lvs_packets_sec))
f.write('%s %s %s %s\n'%(zabbix_hostname,'lvs_bit_sec',timestamp,lvs_bit_sec))
f.write('%s %s %s %s\n'%(zabbix_hostname,'lvs_conns_sec',timestamp,lvs_packets_sec))
f.write('%s %s %s %s\n'%(zabbix_hostname,'lvs_keepalived_vip_status',timestamp,lvs_keepalived_vip_status))
if __name__=='__main__':
monit_lvs()
#把临时文件通过zabbix_sender命令发送到server端
send_data_cmd='/usr/local/zabbix/bin/zabbix_sender -vv -z %s-p %s -T -i %s'%(zabbix_server,zabbix_server_port,tmp_file_path)
#print send_data_cmd
os.popen(send_data_cmd)
定时任务设置:
#crontab -l
#zabbix_sender汇报lvs的监控信息
* * * * * /usr/bin/python/usr/local/lvsmonitor/lvs_status_sender.py &&/var/log/crontab.log2&&1
3 、 zabbix server 端监控项配置:
lvs_packets_sec,
lvs_bit_sec,
lvs_conns_se,
lvs_keepalived_vip_status,
keepalived,
在 zabbix 中创建一个 lvs 监控模板,创建五个名称如上的监控项,键值如下图所示:
监控模板中 item
监控模板中 tragger
此处对三个监控项进行报警设置
1 ) VIP 有变动,无论从有到无或从无到有,有变动代表发生了切换,则告警
2 ) keepalived 进程 down 掉告警
3 ) lvs 每秒转发请求大于 5W ,告警(这个依实际情况判断,如果远远高于正常请求值,代表有 CC 攻击)
一切设置好后,就可以创建一台监控主机,调用lvs监控模板,然后查看数据获取是否正确。
如有问题,欢迎留言。
已发表评论数()
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
没有分页内容
图片无法显示
视频无法显示
与原文不一致zabbix在模板中预定义了一些key,但通常情况,并不能满足我们的需求。幸运的是zabbix提供了自定义key的方法,因此我们可以灵活的监控各种我们想要监控的数据。
定义配置文件
通过yum安装的zabbix-agent配置文件路径为/etc/zabbix/zabbix_agentd.conf。
大约在这个文件的255行左右,我们可以发现下面的代码:
Include=/etc/zabbix/zabbix_agentd.d/
Include=/etc/zabbix/zabbix_agentd.d/
我们自定义的配置,可以放到这个目录。
我们可以创建一个自定义的文件来定义我们需要的key:
vim /etc/zabbix/zabbix_agent.d/userparameter_script.conf
vim /etc/zabbix/zabbix_agent.d/userparameter_script.conf
文件里面添加这样的内容:
# 这个文件监控自定义脚本输出值
# 格式为UserParameter=&key&,&command&
UserParameter=script.date,date
# 这个文件监控自定义脚本输出值# 格式为UserParameter=&key&,&command&&UserParameter=script.date,date
保存之后重启zabbix-agent。
测试获取自定义key的值
在zabbix-server上使用zabbix_get工具获取自定义值。
shell& zabbix_get -s 100.10.1.2 -k script.date
Fri Apr 24 14:41:18 CST 2015
shell& zabbix_get -s 100.10.1.2 -k script.dateFri Apr 24 14:41:18 CST 2015
获取到了上面例子中执行date的结果,说明配置是成功的。
创建一个脚本
首先新建一个script目录来存放我们的脚本,并将这个脚本命名为kucun.sh,我将使用zabbix来监控数据库中的库存表,使用库存数据画图。
mkdir -p /etc/zabbix/script/
vim /etc/zabbix/script/kucun.sh
mkdir -p /etc/zabbix/script/vim /etc/zabbix/script/kucun.sh
我们定义脚本,输入一个店铺号来查询这个店铺中商品数量小于n的条数。
若手动执行查询,查询方式是这样的:
shell& /etc/zabbix/script/kucun.sh bj001 30
shell& /etc/zabbix/script/kucun.sh bj001 302
输出2即表示有2个商品数量小于30。
下面是脚本的内容:
#!/bin/bash
shop_id=$1
dbhost="100.10.1.2"
dbuser="monitor"
dbpasswd="21"
sql="SELECT count(*) FROM lsp_cus.menu WHERE shop_no = \"$shop_id\" AND date = UNIX_TIMESTAMP(DATE_FORMAT(NOW(),'%Y-%m-%d')) AND num - sale & \"$number\""
mysql -h$dbhost -u$dbuser -p$dbpasswd -Ne "$sql"
#!/bin/bashshop_id=$1number=$2dbhost="100.10.1.2"dbuser="monitor"dbpasswd="21"sql="SELECT count(*) FROM lsp_cus.menu WHERE shop_no = \"$shop_id\" AND date = UNIX_TIMESTAMP(DATE_FORMAT(NOW(),'%Y-%m-%d')) AND num - sale & \"$number\""mysql -h$dbhost -u$dbuser -p$dbpasswd -Ne "$sql"
使用脚本查询的结果创建key
vim /etc/zabbix/zabbix_agent.d/userparameter_script.conf
vim /etc/zabbix/zabbix_agent.d/userparameter_script.conf
文件修改为:
# 这个文件监控自定义脚本输出值
# 格式为UserParameter=&key&,&command&
UserParameter=script.kucun[*],/etc/zabbix/script/kucun.sh $1 $2
# 这个文件监控自定义脚本输出值# 格式为UserParameter=&key&,&command&UserParameter=script.kucun[*],/etc/zabbix/script/kucun.sh $1 $2
通过zabbix-server查询
在zabbix服务器上使用zabbix_get工具查询店铺号001,库存小于30的商品数量。
shell& zabbix_get -s 100.10.1.2 -k script.kucun[001,30]
shell& zabbix_get -s 100.10.1.2 -k script.kucun[001,30]18
可以看到成功了。
上面用到方法的一些解释
UserParameter=key[*],command
key为唯一值,[*]表示参数。
command为要执行的命令或脚本,key的[*]里面的参数一一对应$1到$9,一共9个参数。$0表示脚本命令。返回结果数据最大为512KB。
参数禁止使用下列字符:\ ‘ ” ` * ? [ ] { } ~ $ ! & ; ( )
脚本的命令行参数可以通过搜索引擎搜索相关文章。
热门文章最新发布随机推荐用python写的一段小脚本zabbix调用监控mysql的QPS和TPS
用python写的一段小脚本zabbix调用监控mysql的QPS和TPS
编辑日期: 字体:
写这段脚本不是为了别的,只是自己熟练掌握类的操作 另外还熟释一些函数,那么zabbix监控mysql,其中涉及到了一些计算,在配置文件不能进行计算,我觉得不太可能,所以写了这么一段脚本,功能得实现,因为知识面有限,后面遇到再继续优化吧,贴上代码如下:
#!/usr/bin/env python
#coding=utf-8
import sys
import commands
class QpsTps(object):
def __init__(self):
self.QPS = ''
self.TPS = ''
def getQps(self):
(Queries,QPS_result) = commands.getstatusoutput("mysqladmin -uroot -p123456 extended-status | grep 'Queries' | cut -d'|' -f3")
self.QPS = int(QPS_result)
return self.QPS
def getTps(self):
(Com_commit,cm_result) = commands.getstatusoutput("mysqladmin -uroot -p123456 extended-status | grep 'Com_commit' | cut -d'|' -f3 ")
(Com_rollback,rb_result) = commands.getstatusoutput("mysqladmin -uroot -p123456 extended-status | grep 'Com_rollback' | cut -d'|' -f3 | awk 'NR==1'")
self.TPS = int(cm_result) + int(rb_result)
return self.TPS
class error_out(object):
def error_print(self):
'''代入值少输,输出错误'''
print 'Usage : ' + sys.argv[0] + ' MysqlStatusKey '
sys.exit(1)
class Main(object):
def main(self):
if len(sys.argv) == 1:
error = error_out()
error.error_print()
elif sys.argv[1] == 'QPS':
a = QpsTps()
print a.getQps()
elif sys.argv[1] == 'TPS':
a = QpsTps()
print a.getTps()
if __name__ == '__main__':
main_obj = Main()
main_obj.main()
1234567891011121314151617181920212223242526272829303132333435363738394041424344
#!/usr/bin/env python#coding=utf-8&import sysimport osimport commands&class QpsTps(object):&&&&def __init__(self):&&&&&&&&self.QPS = ''&&&&&&&&self.TPS = ''&&&&def getQps(self):&&&&&&&&(Queries,QPS_result) = commands.getstatusoutput("mysqladmin -uroot -p123456 extended-status | grep 'Queries' | cut -d'|' -f3")&&&&&&&&self.QPS = int(QPS_result)&&&&&&&&return self.QPS&&&&def getTps(self):&&&&&&&&(Com_commit,cm_result) = commands.getstatusoutput("mysqladmin -uroot -p123456 extended-status | grep 'Com_commit' | cut -d'|' -f3 ")&&&&&&&&(Com_rollback,rb_result) = commands.getstatusoutput("mysqladmin -uroot -p123456 extended-status | grep 'Com_rollback' | cut -d'|' -f3 | awk 'NR==1'")&&&&&&&&self.TPS = int(cm_result) + int(rb_result)&&&&&&&&return self.TPS&class error_out(object):&&&&def error_print(self):&&&&&&&&'''代入值少输,输出错误'''&&&&&&&&print&&&&&&&&print 'Usage : ' + sys.argv[0] + ' MysqlStatusKey '&&&&&&&&print&&&&&&&&sys.exit(1)&class Main(object):&&&&def main(self):&&&&&&&&if len(sys.argv) == 1:&&&&&&&&&&&&error = error_out()&&&&&&&&&&&&error.error_print()&&&&&&&&elif sys.argv[1] == 'QPS':&&&&&&&&&&&&a = QpsTps()&&&&&&&&&&&&print a.getQps()&&&&&&&&elif sys.argv[1] == 'TPS':&&&&&&&&&&&&a = QpsTps()&&&&&&&&&&&&print a.getTps()&if __name__ == '__main__':&&&&main_obj = Main()&&&&main_obj.main()
将代码上传至系统,赋值权限,在zabbix的mysql配置文中加入:
UserParameter=mysql.QPS,python /usr/local/zabbix/scripts/get_qps_tps.py QPS
UserParameter=mysql.TPS,python /usr/local/zabbix/scripts/get_qps_tps.py TPS
UserParameter=mysql.QPS,python /usr/local/zabbix/scripts/get_qps_tps.py QPSUserParameter=mysql.TPS,python /usr/local/zabbix/scripts/get_qps_tps.py TPS
服务端取值测试:
# /usr/local/zabbix/bin/zabbix_get -s 10.16.1.68 -p 10050 -k"mysql.QPS"
# /usr/local/zabbix/bin/zabbix_get -s 127.0.0.1 -p 10050 -k"mysql.QPS"
# /usr/local/zabbix/bin/zabbix_get -s 127.0.0.1 -p 10050 -k"mysql.TPS"
# /usr/local/zabbix/bin/zabbix_get -s 10.16.1.68 -p 10050 -k"mysql.QPS"1783724# /usr/local/zabbix/bin/zabbix_get -s 127.0.0.1 -p 10050 -k"mysql.QPS"&&&&3695982# /usr/local/zabbix/bin/zabbix_get -s 127.0.0.1 -p 10050 -k"mysql.TPS"278279
#!/usr/bin/env python
#coding=utf-8
import sys
import time
import commands
from db_init import InitDb
class MysqlPeerStatus(object):
def __init__(self):
a = InitDb()
a.readconfigfile()
self.user = a.GetUser()
self.passwd = a.GetPasswd()
self.value = 0
def GetValue(self, key):
(temp,last) = commands.getstatusoutput("mysqladmin -u%s -p%s extended-status | grep '%s&' | cut -d'|' -f3"%(self.user,self.passwd,key))
last = float(last)
return last
class MysqlQpsTps(object):
def __init__(self):
"""init"""
self.a = MysqlPeerStatus()
for key in ('Com_insert','Com_update', 'Com_delete', 'Com_select'):
if key == 'Com_insert':
_insert = self.a.GetValue(key)
elif key == 'Com_update':
_update = self.a.GetValue(key)
elif key == 'Com_delete':
_delete = self.a.GetValue(key)
_select = self.a.GetValue(key)
def Tps(self):
Tps = _insert + _update + _delete
return Tps
def Qps(self):
Qps = _insert + _update + _delete + _select
return Qps
class InnodbBufferStatus(object):
def __init__(self):
"""init"""
self.a = MysqlPeerStatus()
for key in ('Innodb_buffer_pool_pages_total','Innodb_buffer_pool_read_requests','Innodb_buffer_pool_reads',
'Innodb_buffer_pool_pages_free','Innodb_buffer_pool_pages_dirty'):
if key == 'Innodb_buffer_pool_pages_total':
self.pages_total = self.a.GetValue(key)
elif key == 'Innodb_buffer_pool_read_requests':
self.cache_read = self.a.GetValue(key)
elif key == 'Innodb_buffer_pool_reads':
self.disk_read = self.a.GetValue(key)
elif key == 'Innodb_buffer_pool_pages_free':
self.free_pages = self.a.GetValue(key)
self.pages_dirty = self.a.GetValue(key)
def InnodbBufferReadHitRate(self):
result = (1 - self.disk_read/self.cache_read) * 100
return result
def InnodbBufferUsage(self):
result = (1 - self.free_pages/self.pages_total) * 100
return result
def InnodbBufferPoolDirtyPercentage(self):
result = self.pages_dirty/self.pages_total * 100
return result
class error_out(object):
def error_print(self):
'''输出错误信息'''
print 'Usage : ' + sys.argv[0] + ' time ' + ' MysqlStatusKey '
print 'MysqlStatusKey include (Qps, Tps, innodb_buffer_read_hit_ratio, innodb_buffer_usage, Queries Etc!)'
sys.exit(1)
class Main(object):
def main(self):
if len(sys.argv) == 1:
error = error_out()
error.error_print()
elif len(sys.argv) == 2:
#times = float(sys.argv[1])
key = sys.argv[1]
if key == 'innodb_buffer_read_hit_ratio':
b = InnodbBufferStatus()
print b.InnodbBufferReadHitRate()
elif key == 'innodb_buffer_usage':
b = InnodbBufferStatus()
print b.InnodbBufferUsage()
elif key == 'innodb_pages_dirty_percentage':
b = InnodbBufferStatus()
print b.InnodbBufferPoolDirtyPercentage()
elif key == 'Qps':
b = MysqlQpsTps()
print b.Qps()
elif key == 'Tps':
b = MysqlQpsTps()
print b.Tps()
b = MysqlPeerStatus()
print b.GetValue(key)
#print last
#time.sleep(times)
#print (b.GetValue(key) - last) / times
if __name__ == '__main__':
main_obj = Main()
main_obj.main()
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
#!/usr/bin/env python#coding=utf-8&import sysimport osimport timeimport commandsfrom db_init import InitDb&class MysqlPeerStatus(object):&&&&def __init__(self):&&&&&&&&a = InitDb()&&&&&&&&a.readconfigfile()&&&&&&&&self.user = a.GetUser()&&&&&&&&self.passwd = a.GetPasswd()&&&&&&&&self.value = 0&&&&def GetValue(self, key):&&&&&&&&(temp,last) = commands.getstatusoutput("mysqladmin -u%s -p%s extended-status | grep '%s&' | cut -d'|' -f3"%(self.user,self.passwd,key))&&&&&&&&last = float(last)&&&&&&&&return last&class MysqlQpsTps(object):&&&&def __init__(self):&&&&&&&&"""init"""&&&&&&&&self.a = MysqlPeerStatus()&&&&&&&&for key in ('Com_insert','Com_update', 'Com_delete', 'Com_select'):&&&&&&&&&&&&if key == 'Com_insert':&&&&&&&&&&&&&&&&self.com_insert = self.a.GetValue(key)&&&&&&&&&&&&elif key == 'Com_update':&&&&&&&&&&&&&&&&self.com_update = self.a.GetValue(key)&&&&&&&&&&&&elif key == 'Com_delete':&&&&&&&&&&&&&&&&self.com_delete = self.a.GetValue(key)&&&&&&&&&&&&else:&&&&&&&&&&&&&&&&self.com_select = self.a.GetValue(key)&&&&&def Tps(self):&&&&&&&&Tps = self.com_insert + self.com_update + self.com_delete&&&&&&&&return Tps&&&&&def Qps(self):&&&&&&&&Qps = self.com_insert + self.com_update + self.com_delete + self.com_select&&&&&&&&return Qps&class InnodbBufferStatus(object):&&&&def __init__(self):&&&&&&&&"""init"""&&&&&&&&self.a = MysqlPeerStatus()&&&&&&&&for key in ('Innodb_buffer_pool_pages_total','Innodb_buffer_pool_read_requests','Innodb_buffer_pool_reads', &&&&&&&&&&&&&&&&&&&&'Innodb_buffer_pool_pages_free','Innodb_buffer_pool_pages_dirty'):&&&&&&&&&&&&if key == 'Innodb_buffer_pool_pages_total':&&&&&&&&&&&&&&&&self.pages_total = self.a.GetValue(key)&&&&&&&&&&&&elif key == 'Innodb_buffer_pool_read_requests':&&&&&&&&&&&&&&&&self.cache_read = self.a.GetValue(key)&&&&&&&&&&&&elif key == 'Innodb_buffer_pool_reads':&&&&&&&&&&&&&&&&self.disk_read = self.a.GetValue(key)&&&&&&&&&&&&elif key == 'Innodb_buffer_pool_pages_free':&&&&&&&&&&&&&&&&self.free_pages = self.a.GetValue(key)&&&&&&&&&&&&else:&&&&&&&&&&&&&&&&self.pages_dirty = self.a.GetValue(key)&&&&&def InnodbBufferReadHitRate(self):&&&&&&&&result = (1 - self.disk_read/self.cache_read) * 100&&&&&&&&return result&&&&&&&&&&&&def InnodbBufferUsage(self):&&&&&&&&result = (1 - self.free_pages/self.pages_total) * 100&&&&&&&&return result&&&&&def InnodbBufferPoolDirtyPercentage(self):&&&&&&&&result = self.pages_dirty/self.pages_total * 100&&&&&&&&return result&class error_out(object):&&&&def error_print(self):&&&&&&&&'''输出错误信息'''&&&&&&&&print&&&&&&&&print 'Usage : ' + sys.argv[0] + ' time ' + ' MysqlStatusKey '&&&&&&&&print 'MysqlStatusKey include (Qps, Tps, innodb_buffer_read_hit_ratio, innodb_buffer_usage, Queries Etc!)'&&&&&&&&print&&&&&&&&sys.exit(1)&class Main(object):&&&&def main(self):&&&&&&&&if len(sys.argv) == 1:&&&&&&&&&&&&error = error_out()&&&&&&&&&&&&error.error_print()&&&&&&&&elif len(sys.argv) == 2:&&&&&&&&&&&&#times = float(sys.argv[1])&&&&&&&&&&&&key = sys.argv[1]&&&&&&&&&&&&if key == 'innodb_buffer_read_hit_ratio':&&&&&&&&&&&&&&&&b = InnodbBufferStatus()&&&&&&&&&&&&&&&&print b.InnodbBufferReadHitRate()&&&&&&&&&&&&elif key == 'innodb_buffer_usage':&&&&&&&&&&&&&&&&b = InnodbBufferStatus()&&&&&&&&&&&&&&&&print b.InnodbBufferUsage()&&&&&&&&&&&&elif key == 'innodb_pages_dirty_percentage':&&&&&&&&&&&&&&&&b = InnodbBufferStatus()&&&&&&&&&&&&&&&&print b.InnodbBufferPoolDirtyPercentage()&&&&&&&&&&&&elif key == 'Qps':&&&&&&&&&&&&&&&&b = MysqlQpsTps()&&&&&&&&&&&&&&&&print b.Qps()&&&&&&&&&&&&elif key == 'Tps':&&&&&&&&&&&&&&&&b = MysqlQpsTps()&&&&&&&&&&&&&&&&print b.Tps()&&&&&&&&&&&&else:&&&&&&&&&&&&&& b = MysqlPeerStatus()&&&&&&&&&&&&&& print b.GetValue(key)&&&&&&&&&&&&#print last&&&&&&&&&&&&#time.sleep(times)&&&&&&&&&&&&#print (b.GetValue(key) - last) / times&if __name__ == '__main__':&&&&main_obj = Main()&&&&main_obj.main()
上述脚本不适合mysql 5.6 以上版本,所以要用MySQLdb模块去写:
#!/usr/bin/env python
#coding=utf8
import sys
class GetMysqlStatus():
def __init__(self):
self.val = {}
self.result = {}
def check(self):
import MySQLdb
import MySQLdb.cursors
self.db = MySQLdb.connect(user="root", passwd="123456",
host="192.168.1.62", port=3306,
cursorclass=MySQLdb.cursors.DictCursor)
except Exception, e:
raise Exception, 'Cannot interface with MySQL server, %s' % e
def extract(self, key):
c = self.db.cursor()
c.execute("""show global status like '%s';""" % key)
self.val = c.fetchone()
#print self.val
return float(self.val['Value'])
self.db.close()
except Exception, e:
print e.message
def init(self):
for key in ('Com_insert', 'Com_delete', 'Com_select', 'Com_rollback',
'Com_update', 'Com_commit', 'Innodb_buffer_pool_pages_total',
'Innodb_buffer_pool_read_requests', 'Innodb_buffer_pool_reads',
'Innodb_buffer_pool_pages_free', 'Innodb_buffer_pool_pages_dirty',
'Key_blocks_used', 'Key_blocks_unused', 'Key_reads',
'Key_read_requests', 'Key_writes', 'Key_write_requests'):
self.result[key] = self.extract(key)
def get_tps(self):
TPS = self.result['Com_commit'] + self.result['Com_rollback']
return TPS
def get_qps(self):
QPS = self.result['Com_insert'] + self.result['Com_delete'] +
self.result['Com_select'] + self.result['Com_update']
return QPS
def GetKeyReadHitRatio(self):
if self.result['Key_read_requests'] == 0:
Key_read_hit_ratio = 0
Key_read_hit_ratio = (1 - self.result['Key_reads'] /
self.result['Key_read_requests']) * 100
return Key_read_hit_ratio
def GetKeyUsageRatio(self):
Key_usage_ratio = self.result['Key_blocks_used'] /
(self.result['Key_blocks_used'] + self.result['Key_blocks_unused']) * 100
return Key_usage_ratio
def GetKeyWriteHitRatio(self):
if self.result['Key_write_requests'] == 0:
Key_write_hit_ratio = 0
Key_write_hit_ratio = (1 - self.result['Key_writes'] /
self.result['Key_write_requests']) * 100
return Key_write_hit_ratio
def GetInnodbBufferReadHitRatio(self):
Innodb_buffer_read_hit_ratio = (1 - self.result['Innodb_buffer_pool_reads'] /
self.result['Innodb_buffer_pool_read_requests']) * 100
return Innodb_buffer_read_hit_ratio
def GetInnodbBufferPoolUsage(self):
Innodb_buffer_usage = (1 - self.result['Innodb_buffer_pool_pages_free'] /
self.result['Innodb_buffer_pool_pages_total']) * 100
return Innodb_buffer_usage
def GetInnodbBufferPoolDirtyRatio(self):
Innodb_buffer_pool_dirty_ratio = (self.result['Innodb_buffer_pool_pages_dirty'] /
self.result['Innodb_buffer_pool_pages_total']) * 100
return Innodb_buffer_pool_dirty_ratio
def get_alive_status(self):
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(1)
sock.connect(('192.168.1.62', 3306))
#print 'MySQL is alive!'
result = 1
return result
except Exception:
#print 'MySQL 3306 not connect!'
result = 0
return result
sock.close()
class ErrorOut():
def error_print(self):
"""输出错误信息"""
print 'Usage: ' + sys.argv[0] + ' ' + ' MySQL_Status_Key '
sys.exit(1)
class Main():
def main(self):
if len(sys.argv) == 1:
error = ErrorOut()
error.error_print()
elif len(sys.argv) == 2:
key = sys.argv[1]
a = GetMysqlStatus()
if key == 'Innodb_buffer_read_hit_ratio':
print a.GetInnodbBufferReadHitRatio()
elif key == 'Innodb_buffer_usage':
print a.GetInnodbBufferPoolUsage()
elif key == 'Innodb_buffer_pool_dirty_ratio':
print a.GetInnodbBufferPoolDirtyRatio()
elif key == 'QPS':
print a.get_qps()
elif key == 'TPS':
print a.get_tps()
elif key == 'Key_usage_ratio':
print a.GetKeyUsageRatio()
elif key == 'Key_read_hit_ratio':
print a.GetKeyReadHitRatio()
elif key == 'Key_write_hit_ratio':
print a.GetKeyWriteHitRatio()
elif key == 'MySQL_alive':
print a.get_alive_status()
print a.extract(key)
if __name__ == "__main__":
exe = Main()
exe.main()
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
#!/usr/bin/env python#coding=utf8&import sysimport os&class GetMysqlStatus():&&&&def __init__(self):&&&&&&&&self.val = {}&&&&&&&&self.result = {}&&&&&def check(self):&&&&&&&&import MySQLdb&&&&&&&&import MySQLdb.cursors&&&&&&&&try:&&&&&&&&&&&&self.db = MySQLdb.connect(user="root", passwd="123456",&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&host="192.168.1.62", port=3306,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&cursorclass=MySQLdb.cursors.DictCursor)&&&&&&&&except Exception, e:&&&&&&&&&&&&raise Exception, 'Cannot interface with MySQL server, %s' % e&&&&&def extract(self, key):&&&&&&&&try:&&&&&&&&&&&&c = self.db.cursor()&&&&&&&&&&&&c.execute("""show global status like '%s';""" % key)&&&&&&&&&&&&self.val = c.fetchone()&&&&&&&&&&&&#print self.val&&&&&&&&&&&&return float(self.val['Value'])&&&&&&&&&&&&c.close()&&&&&&&&&&&&self.db.close()&&&&&&&&except Exception, e:&&&&&&&&&&&&print e.message&&&&&def init(self):&&&&&&&&for key in ('Com_insert', 'Com_delete', 'Com_select', 'Com_rollback',&&&&&&&&&&&&&&&&&&&&'Com_update', 'Com_commit', 'Innodb_buffer_pool_pages_total',&&&&&&&&&&&&&&&&&&&&'Innodb_buffer_pool_read_requests', 'Innodb_buffer_pool_reads',&&&&&&&&&&&&&&&&&&&&'Innodb_buffer_pool_pages_free', 'Innodb_buffer_pool_pages_dirty',&&&&&&&&&&&&&&&&&&&&'Key_blocks_used', 'Key_blocks_unused', 'Key_reads',&&&&&&&&&&&&&&&&&&&&'Key_read_requests', 'Key_writes', 'Key_write_requests'):&&&&&&&&&&&&self.result[key] = self.extract(key)&&&&&def get_tps(self):&&&&&&&&TPS = self.result['Com_commit'] + self.result['Com_rollback']&&&&&&&&return TPS&&&&&def get_qps(self):&&&&&&&&QPS = self.result['Com_insert'] + self.result['Com_delete'] + &&&&&&&&&&&&&&self.result['Com_select'] + self.result['Com_update']&&&&&&&&return QPS&&&&&def GetKeyReadHitRatio(self):&&&&&&&&if self.result['Key_read_requests'] == 0:&&&&&&&&&&&&Key_read_hit_ratio = 0&&&&&&&&else:&&&&&&&&&&&&Key_read_hit_ratio = (1 - self.result['Key_reads'] /&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&self.result['Key_read_requests']) * 100&&&&&&&&return Key_read_hit_ratio&&&&&def GetKeyUsageRatio(self):&&&&&&&&Key_usage_ratio = self.result['Key_blocks_used'] / &&&&&&&&&&&&&&&&&&&&&&&&&&(self.result['Key_blocks_used'] + self.result['Key_blocks_unused']) * 100&&&&&&&&return Key_usage_ratio&&&&&def GetKeyWriteHitRatio(self):&&&&&&&&if self.result['Key_write_requests'] == 0:&&&&&&&&&&&&Key_write_hit_ratio = 0&&&&&&&&else:&&&&&&&&&&&&Key_write_hit_ratio = (1 - self.result['Key_writes'] /&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& self.result['Key_write_requests']) * 100&&&&&&&&return Key_write_hit_ratio&&&&&def GetInnodbBufferReadHitRatio(self):&&&&&&&&Innodb_buffer_read_hit_ratio = (1 - self.result['Innodb_buffer_pool_reads'] /&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&self.result['Innodb_buffer_pool_read_requests']) * 100&&&&&&&&return Innodb_buffer_read_hit_ratio&&&&&def GetInnodbBufferPoolUsage(self):&&&&&&&&Innodb_buffer_usage = (1 - self.result['Innodb_buffer_pool_pages_free'] /&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& self.result['Innodb_buffer_pool_pages_total']) * 100&&&&&&&&return Innodb_buffer_usage&&&&&def GetInnodbBufferPoolDirtyRatio(self):&&&&&&&&Innodb_buffer_pool_dirty_ratio = (self.result['Innodb_buffer_pool_pages_dirty'] /&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&self.result['Innodb_buffer_pool_pages_total']) * 100&&&&&&&&return Innodb_buffer_pool_dirty_ratio&&&&&def get_alive_status(self):&&&&&&&&import socket&&&&&&&&sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)&&&&&&&&sock.settimeout(1)&&&&&&&&try:&&&&&&&&&&&&sock.connect(('192.168.1.62', 3306))&&&&&&&&&&&&#print 'MySQL is alive!'&&&&&&&&&&&&result = 1&&&&&&&&&&&&return result&&&&&&&&except Exception:&&&&&&&&&&&&#print 'MySQL 3306 not connect!'&&&&&&&&&&&&result = 0&&&&&&&&&&&&return result&&&&&&&&sock.close()&class ErrorOut():&&&&def error_print(self):&&&&&&&&"""输出错误信息"""&&&&&&&&print&&&&&&&&print 'Usage: ' + sys.argv[0] + ' ' + ' MySQL_Status_Key '&&&&&&&&print&&&&&&&&sys.exit(1)&class Main():&&&&def main(self):&&&&&&&&if len(sys.argv) == 1:&&&&&&&&&&&&error = ErrorOut()&&&&&&&&&&&&error.error_print()&&&&&&&&elif len(sys.argv) == 2:&&&&&&&&&&&&key = sys.argv[1]&&&&&&&&&&&&a = GetMysqlStatus()&&&&&&&&&&&&a.check()&&&&&&&&&&&&a.init()&&&&&&&&&&&&if key == 'Innodb_buffer_read_hit_ratio':&&&&&&&&&&&&&&&&print a.GetInnodbBufferReadHitRatio()&&&&&&&&&&&&elif key == 'Innodb_buffer_usage':&&&&&&&&&&&&&&&&print a.GetInnodbBufferPoolUsage()&&&&&&&&&&&&elif key == 'Innodb_buffer_pool_dirty_ratio':&&&&&&&&&&&&&&&&print a.GetInnodbBufferPoolDirtyRatio()&&&&&&&&&&&&elif key == 'QPS':&&&&&&&&&&&&&&&&print a.get_qps()&&&&&&&&&&&&elif key == 'TPS':&&&&&&&&&&&&&&&&print a.get_tps()&&&&&&&&&&&&elif key == 'Key_usage_ratio':&&&&&&&&&&&&&&&&print a.GetKeyUsageRatio()&&&&&&&&&&&&elif key == 'Key_read_hit_ratio':&&&&&&&&&&&&&&&&print a.GetKeyReadHitRatio()&&&&&&&&&&&&elif key == 'Key_write_hit_ratio':&&&&&&&&&&&&&&&&print a.GetKeyWriteHitRatio()&&&&&&&&&&&&elif key == 'MySQL_alive':&&&&&&&&&&&&&&&&print a.get_alive_status()&&&&&&&&&&&&else:&&&&&&&&&&&&&&&&print a.extract(key)&if __name__ == "__main__":&&&& exe = Main()&&&& exe.main()
D:flask&python get_mysql_status.py
Usage: get_mysql_status.py
MySQL_Status_Key
D:flask&python get_mysql_status.py Innodb_buffer_pool_reads
D:flask&python get_mysql_status.py MySQL_alive
D:flask&python get_mysql_status.py Innodb_buffer_read_hit_ratio
12345678910111213
D:flask>python get_mysql_status.py&Usage: get_mysql_status.py&&MySQL_Status_Key&&D:flask>python get_mysql_status.py Innodb_buffer_pool_reads144.0&D:flask>python get_mysql_status.py MySQL_alive1&D:flask>python get_mysql_status.py Innodb_buffer_read_hit_ratio68.
这样的if else让人有点蛋疼,继续优化代码:
#!/usr/bin/env python
#coding=utf8
import sys
import inspect
class GetMysqlStatus():
def __init__(self):
self.val = {}
self.result = {}
def check(self):
import MySQLdb
import MySQLdb.cursors
self.db = MySQLdb.connect(user="root", passwd="LVS@071103",
host="192.168.1.62", port=3306,
cursorclass=MySQLdb.cursors.DictCursor)
except Exception, e:
raise Exception, 'Cannot interface with MySQL server, %s' % e
def extract(self, key):
c = self.db.cursor()
c.execute("""show global status like '%s';""" % key)
self.val = c.fetchone()
return float(self.val['Value'])
self.db.close()
except Exception, e:
print e.message
def init(self):
for key in ('Com_insert', 'Com_delete', 'Com_select', 'Com_rollback',
'Com_update', 'Com_commit', 'Innodb_buffer_pool_pages_total',
'Innodb_buffer_pool_read_requests', 'Innodb_buffer_pool_reads',
'Innodb_buffer_pool_pages_free', 'Innodb_buffer_pool_pages_dirty',
'Key_blocks_used', 'Key_blocks_unused', 'Key_reads',
'Key_read_requests', 'Key_writes', 'Key_write_requests'):
self.result[key] = self.extract(key)
def TPS(self):
TPS = self.result['Com_commit'] + self.result['Com_rollback']
return TPS
def QPS(self):
QPS = self.result['Com_insert'] + self.result['Com_delete'] +
self.result['Com_select'] + self.result['Com_update']
return QPS
def Key_read_hit_ratio(self):
if self.result['Key_read_requests'] == 0:
Key_read_hit_ratio = 0
Key_read_hit_ratio = (1 - self.result['Key_reads'] /
self.result['Key_read_requests']) * 100
return Key_read_hit_ratio
def Key_usage_ratio(self):
Key_usage_ratio = self.result['Key_blocks_used'] /
(self.result['Key_blocks_used'] + self.result['Key_blocks_unused']) * 100
return Key_usage_ratio
def Key_write_hit_ratio(self):
if self.result['Key_write_requests'] == 0:
Key_write_hit_ratio = 0
Key_write_hit_ratio = (1 - self.result['Key_writes'] /
self.result['Key_write_requests']) * 100
return Key_write_hit_ratio
def Innodb_buffer_read_hit_ratio(self):
Innodb_buffer_read_hit_ratio = (1 - self.result['Innodb_buffer_pool_reads'] /
self.result['Innodb_buffer_pool_read_requests']) * 100
return Innodb_buffer_read_hit_ratio
def Innodb_buffer_usage(self):
Innodb_buffer_usage = (1 - self.result['Innodb_buffer_pool_pages_free'] /
self.result['Innodb_buffer_pool_pages_total']) * 100
return Innodb_buffer_usage
def Innodb_buffer_pool_dirty_ratio(self):
Innodb_buffer_pool_dirty_ratio = (self.result['Innodb_buffer_pool_pages_dirty'] /
self.result['Innodb_buffer_pool_pages_total']) * 100
return Innodb_buffer_pool_dirty_ratio
def MySQL_alive(self):
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(1)
sock.connect(('192.168.1.62', 3306))
#print 'MySQL is alive!'
result = 1
return result
except Exception:
#print 'MySQL 3306 not connect!'
result = 0
return result
sock.close()
class ErrorOut():
def error_print(self):
"""输出错误信息"""
print 'Usage: ' + sys.argv[0] + ' ' + ' MySQL_Status_Key '
sys.exit(1)
class Main():
def main(self):
if len(sys.argv) == 1:
error = ErrorOut()
error.error_print()
elif len(sys.argv) == 2:
method_name = sys.argv[1]
a = GetMysqlStatus()
if hasattr(a, method_name):
print getattr(a, method_name)()
print a.extract(method_name)
if __name__ == "__main__":
run = Main()
run.main()
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
#!/usr/bin/env python#coding=utf8&import sysimport osimport inspect&class GetMysqlStatus():&&&&def __init__(self):&&&&&&&&self.val = {}&&&&&&&&self.result = {}&&&&&def check(self):&&&&&&&&import MySQLdb&&&&&&&&import MySQLdb.cursors&&&&&&&&try:&&&&&&&&&&&&self.db = MySQLdb.connect(user="root", passwd="LVS@071103",&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&host="192.168.1.62", port=3306,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&cursorclass=MySQLdb.cursors.DictCursor)&&&&&&&&except Exception, e:&&&&&&&&&&&&raise Exception, 'Cannot interface with MySQL server, %s' % e&&&&&def extract(self, key):&&&&&&&&try:&&&&&&&&&&&&c = self.db.cursor()&&&&&&&&&&&&c.execute("""show global status like '%s';""" % key)&&&&&&&&&&&&self.val = c.fetchone()&&&&&&&&&&&&return float(self.val['Value'])&&&&&&&&&&&&c.close()&&&&&&&&&&&&self.db.close()&&&&&&&&except Exception, e:&&&&&&&&&&&&print e.message&&&&&def init(self):&&&&&&&&for key in ('Com_insert', 'Com_delete', 'Com_select', 'Com_rollback',&&&&&&&&&&&&&&&&&&&&'Com_update', 'Com_commit', 'Innodb_buffer_pool_pages_total',&&&&&&&&&&&&&&&&&&&&'Innodb_buffer_pool_read_requests', 'Innodb_buffer_pool_reads',&&&&&&&&&&&&&&&&&&&&'Innodb_buffer_pool_pages_free', 'Innodb_buffer_pool_pages_dirty',&&&&&&&&&&&&&&&&&&&&'Key_blocks_used', 'Key_blocks_unused', 'Key_reads',&&&&&&&&&&&&&&&&&&&&'Key_read_requests', 'Key_writes', 'Key_write_requests'):&&&&&&&&&&&&self.result[key] = self.extract(key)&&&&&def TPS(self):&&&&&&&&TPS = self.result['Com_commit'] + self.result['Com_rollback']&&&&&&&&return TPS&&&&&def QPS(self):&&&&&&&&QPS = self.result['Com_insert'] + self.result['Com_delete'] + &&&&&&&&&&&&&&self.result['Com_select'] + self.result['Com_update']&&&&&&&&return QPS&&&&&def Key_read_hit_ratio(self):&&&&&&&&if self.result['Key_read_requests'] == 0:&&&&&&&&&&&&Key_read_hit_ratio = 0&&&&&&&&else:&&&&&&&&&&&&Key_read_hit_ratio = (1 - self.result['Key_reads'] /&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&self.result['Key_read_requests']) * 100&&&&&&&&return Key_read_hit_ratio&&&&&def Key_usage_ratio(self):&&&&&&&&Key_usage_ratio = self.result['Key_blocks_used'] / &&&&&&&&&&&&&&&&&&&&&&&&&&(self.result['Key_blocks_used'] + self.result['Key_blocks_unused']) * 100&&&&&&&&return Key_usage_ratio&&&&&def Key_write_hit_ratio(self):&&&&&&&&if self.result['Key_write_requests'] == 0:&&&&&&&&&&&&Key_write_hit_ratio = 0&&&&&&&&else:&&&&&&&&&&&&Key_write_hit_ratio = (1 - self.result['Key_writes'] /&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& self.result['Key_write_requests']) * 100&&&&&&&&return Key_write_hit_ratio&&&&&def Innodb_buffer_read_hit_ratio(self):&&&&&&&&Innodb_buffer_read_hit_ratio = (1 - self.result['Innodb_buffer_pool_reads'] /&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&self.result['Innodb_buffer_pool_read_requests']) * 100&&&&&&&&return Innodb_buffer_read_hit_ratio&&&&&def Innodb_buffer_usage(self):&&&&&&&&Innodb_buffer_usage = (1 - self.result['Innodb_buffer_pool_pages_free'] /&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& self.result['Innodb_buffer_pool_pages_total']) * 100&&&&&&&&return Innodb_buffer_usage&&&&&def Innodb_buffer_pool_dirty_ratio(self):&&&&&&&&Innodb_buffer_pool_dirty_ratio = (self.result['Innodb_buffer_pool_pages_dirty'] /&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&self.result['Innodb_buffer_pool_pages_total']) * 100&&&&&&&&return Innodb_buffer_pool_dirty_ratio&&&&&def MySQL_alive(self):&&&&&&&&import socket&&&&&&&&sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)&&&&&&&&sock.settimeout(1)&&&&&&&&try:&&&&&&&&&&&&sock.connect(('192.168.1.62', 3306))&&&&&&&&&&&&#print 'MySQL is alive!'&&&&&&&&&&&&result = 1&&&&&&&&&&&&return result&&&&&&&&except Exception:&&&&&&&&&&&&#print 'MySQL 3306 not connect!'&&&&&&&&&&&&result = 0&&&&&&&&&&&&return result&&&&&&&&sock.close()&class ErrorOut():&&&&def error_print(self):&&&&&&&&"""输出错误信息"""&&&&&&&&print&&&&&&&&print 'Usage: ' + sys.argv[0] + ' ' + ' MySQL_Status_Key '&&&&&&&&print&&&&&&&&sys.exit(1)&class Main():&&&&def main(self):&&&&&&&&if len(sys.argv) == 1:&&&&&&&&&&&&error = ErrorOut()&&&&&&&&&&&&error.error_print()&&&&&&&&elif len(sys.argv) == 2:&&&&&&&&&&&&method_name = sys.argv[1]&&&&&&&&&&&&a = GetMysqlStatus()&&&&&&&&&&&&a.check()&&&&&&&&&&&&a.init()&&&&&&&&&&&&if hasattr(a, method_name):&&&&&&&&&&&&&&&&print getattr(a, method_name)()&&&&&&&&&&&&else:&&&&&&&&&&&&&&&&print a.extract(method_name)&if __name__ == "__main__":&&&& run = Main()&&&& run.main()
进一步优化代码,让代码可以根据不同的端口取值,取出的值先存入一个元组,然后遍历元组,取出相应key的值,这样就可以减少对数据库查询:
#!/usr/bin/env python
#coding=utf8
import sys
import inspect
import MySQLdb
import MySQLdb.cursors
class GetMysqlStatus():
def __init__(self):
self.result = ''
self.each_result = ''
def check(self, port):
self.db = MySQLdb.connect(user="root", passwd="LVS@071103",
host="127.0.0.1", port=port,
cursorclass=MySQLdb.cursors.DictCursor)
except Exception, e:
raise Exception, 'Cannot interface with MySQL server, %s' % e
def extract(self):
c = self.db.cursor()
c.execute("""""")
self.result = c.fetchall()
return self.result
self.db.close()
except Exception, e:
def getVal(self, key):
for i in self.result:
if i['Variable_name'] == key:
self.each_result = i['Value']
return self.each_result
def TPS(self):
TPS = int(self.getVal('Com_commit')) + int(self.getVal('Com_rollback'))
return TPS
def QPS(self):
return int(self.getVal('Com_insert')) + int(self.getVal('Com_delete')) + int(self.getVal('Com_select')) + int(self.getVal('Com_update'))
def Key_read_hit_ratio(self):
Key_read_hit_ratio = (1 - float(self.getVal('Key_reads'))
/ float(self.getVal('Key_read_requests'))) * 100
except ZeroDivisionError, e:
print "integer division or modulo by zero", e
return Key_read_hit_ratio
def Key_usage_ratio(self):
Key_usage_ratio = float(self.getVal('Key_blocks_used')) / (float(self.getVal('Key_blocks_used')) + float(self.getVal('Key_blocks_unused')))
except ZeroDivisionError, e:
print "integer division or modulo by zero", e
return Key_usage_ratio
def Key_write_hit_ratio(self):
Key_write_hit_ratio = (1 - float(self.getVal('Key_writes')) / float(self.getVal('Key_write_requests'))) * 100
except ZeroDivisionError, e:
print "integer division or modulo by zero", e
return Key_write_hit_ratio
def Innodb_buffer_read_hit_ratio(self):
Innodb_buffer_read_hit_ratio = (1 - float(self.getVal('Innodb_buffer_pool_reads')) / float(self.getVal('Innodb_buffer_pool_read_requests'))) * 100
except ZeroDivisionError, e:
print "integer division or modulo by zero", e
return Innodb_buffer_read_hit_ratio
def Innodb_buffer_usage(self):
Innodb_buffer_usage = (1 - float(self.getVal('Innodb_buffer_pool_pages_free')) / float(self.getVal('Innodb_buffer_pool_pages_total'))) * 100
except ZeroDivisionError, e:
print "integer division or modulo by zero", e
return Innodb_buffer_usage
def Innodb_buffer_pool_dirty_ratio(self):
Innodb_buffer_pool_dirty_ratio = (float(self.getVal('Innodb_buffer_pool_pages_dirty')) / float(self.getVal('Innodb_buffer_pool_pages_total'))) * 100
except ZeroDivisionError, e:
print "integer division or modulo by zero", e
return Innodb_buffer_pool_dirty_ratio
class ErrorOut():
def error_print(self):
"""输出错误信息"""
print 'Usage: ' + sys.argv[0] + ' ' + ' MySQL_Status_Key '
sys.exit(1)
class Main():
def main(self):
error = ErrorOut()
if len(sys.argv) == 1:
error.error_print()
elif len(sys.argv) == 2:
error.error_print()
elif len(sys.argv) == 3:
port = int(sys.argv[1])
key = sys.argv[2]
a = GetMysqlStatus()
a.check(port)
a.extract()
if hasattr(a, key):
print getattr(a, key)()
print a.getVal(key)
if __name__ == "__main__":
run = Main()
run.main()
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
#!/usr/bin/env python#coding=utf8&import sysimport osimport inspectimport MySQLdbimport MySQLdb.cursors&class GetMysqlStatus():&&&&def __init__(self):&&&&&&&&self.result = ''&&&&&&&&self.each_result = ''&&&&def check(self, port):&&&&&&&&try:&&&&&&&&&&&&self.db = MySQLdb.connect(user="root", passwd="LVS@071103",&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&host="127.0.0.1", port=port,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&cursorclass=MySQLdb.cursors.DictCursor)&&&&&&&&except Exception, e:&&&&&&&&&&&&raise Exception, 'Cannot interface with MySQL server, %s' % e&&&&&def extract(self):&&&&&&&&try:&&&&&&&&&&&&c = self.db.cursor()&&&&&&&&&&&&c.execute("""""")&&&&&&&&&&&&self.result = c.fetchall()&&&&&&&&&&&&return self.result&&&&&&&&&&&&c.close()&&&&&&&&&&&&self.db.close()&&&&&&&&except Exception, e:&&&&&&&&&&&&print e&&&&&def getVal(self, key):&&&&&&&&for i in self.result:&&&&&&&&&&&&if i['Variable_name'] == key:&&&&&&&&&&&&&&&&self.each_result = i['Value']&&&&&&&&return self.each_result&&&&&def TPS(self):&&&&&&&&TPS = int(self.getVal('Com_commit')) + int(self.getVal('Com_rollback'))&&&&&&&&return TPS&&&&&def QPS(self):&&&&&&&&return int(self.getVal('Com_insert')) + int(self.getVal('Com_delete')) + int(self.getVal('Com_select')) + int(self.getVal('Com_update'))&&&&&def Key_read_hit_ratio(self):&&&&&&&&try:&&&&&&&&&&&&Key_read_hit_ratio = (1 - float(self.getVal('Key_reads'))&&/ float(self.getVal('Key_read_requests'))) * 100&&&&&&&&except ZeroDivisionError, e:&&&&&&&&&&&&print "integer division or modulo by zero", e&&&&&&&&return Key_read_hit_ratio&&&&&def Key_usage_ratio(self):&&&&&&&&try:&&&&&&&&&&&&Key_usage_ratio = float(self.getVal('Key_blocks_used')) / (float(self.getVal('Key_blocks_used')) + float(self.getVal('Key_blocks_unused')))&&&&&&&&except ZeroDivisionError, e:&&&&&&&&&&&&print "integer division or modulo by zero", e&&&&&&&&return Key_usage_ratio&&&&&def Key_write_hit_ratio(self):&&&&&&&&try:&&&&&&&&&&&&Key_write_hit_ratio = (1 - float(self.getVal('Key_writes')) / float(self.getVal('Key_write_requests'))) * 100&&&&&&&&except ZeroDivisionError, e:&&&&&&&&&&&&print "integer division or modulo by zero", e&&&&&&&&return Key_write_hit_ratio&&&&&def Innodb_buffer_read_hit_ratio(self):&&&&&&&&try:&&&&&&&&&&&&Innodb_buffer_read_hit_ratio = (1 - float(self.getVal('Innodb_buffer_pool_reads')) / float(self.getVal('Innodb_buffer_pool_read_requests'))) * 100&&&&&&&&except ZeroDivisionError, e:&&&&&&&&&&&&print "integer division or modulo by zero", e&&&&&&&&return Innodb_buffer_read_hit_ratio&&&&&def Innodb_buffer_usage(self):&&&&&&&&try:&&&&&&&&&&&&Innodb_buffer_usage = (1 - float(self.getVal('Innodb_buffer_pool_pages_free')) / float(self.getVal('Innodb_buffer_pool_pages_total'))) * 100&&&&&&&&except ZeroDivisionError, e:&&&&&&&&&&&&print "integer division or modulo by zero", e&&&&&&&&return Innodb_buffer_usage&&&&&def Innodb_buffer_pool_dirty_ratio(self):&&&&&&&&try:&&&&&&&&&&&&Innodb_buffer_pool_dirty_ratio = (float(self.getVal('Innodb_buffer_pool_pages_dirty')) / float(self.getVal('Innodb_buffer_pool_pages_total'))) * 100&&&&&&&&except ZeroDivisionError, e:&&&&&&&&&&&&print "integer division or modulo by zero", e&&&&&&&&return Innodb_buffer_pool_dirty_ratio&class ErrorOut():&&&&def error_print(self):&&&&&&&&"""输出错误信息"""&&&&&&&&print&&&&&&&&print 'Usage: ' + sys.argv[0] + ' ' + ' MySQL_Status_Key '&&&&&&&&print&&&&&&&&sys.exit(1)&class Main():&&&&def main(self):&&&&&&&&error = ErrorOut()&&&&&&&&if len(sys.argv) == 1:&&&&&&&&&&&&error.error_print()&&&&&&&&elif len(sys.argv) == 2:&&&&&&&&&&&&error.error_print()&&&&&&&&elif len(sys.argv) == 3:&&&&&&&&&&&&port = int(sys.argv[1])&&&&&&&&&&&&key = sys.argv[2]&&&&&&&&&&&&a = GetMysqlStatus()&&&&&&&&&&&&a.check(port)&&&&&&&&&&&&a.extract()&&&&&&&&&&&&if hasattr(a, key):&&&&&&&&&&&&&&&&print getattr(a, key)()&&&&&&&&&&&&else:&&&&&&&&&&&&&&&&print a.getVal(key)&if __name__ == "__main__":&&&& run = Main()&&&& run.main()
(增加端口指定)
#!/usr/bin/env python
#coding=utf8
import sys
import inspect
import MySQLdb
import MySQLdb.cursors
class GetMysqlStatus():
def __init__(self):
self.result = ''
self.dict = {}
def check(self, port):
self.db = MySQLdb.connect(user="root", passwd="LVS@071103",
host="127.0.0.1", port=port,
cursorclass=MySQLdb.cursors.DictCursor)
except Exception, e:
raise Exception, 'Cannot interface with MySQL server, %s' % e
def extract(self):
c = self.db.cursor()
c.execute("""""")
self.result = c.fetchall()
for i in self.result:
self.dict[i['Variable_name']] = i['Value']
return self.dict
self.db.close()
except Exception, e:
def get_val(self, key):
return self.dict[key]
def TPS(self):
TPS = int(self.dict['Com_commit']) + int(self.dict['Com_rollback'])
return TPS
def QPS(self):
return int(self.dict['Com_insert']) + int(self.dict['Com_delete']) + int(self.dict['Com_select']) + int(self.dict['Com_update'])
def Key_read_hit_ratio(self):
Key_read_hit_ratio = (1 - float(self.dict['Key_reads'])
/ float(self.dict['Key_read_requests'])) * 100
except ZeroDivisionError, e:
print "integer division or modulo by zero", e
return Key_read_hit_ratio
def Key_usage_ratio(self):
Key_usage_ratio = float(self.dict['Key_blocks_used']) / (float(self.dict['Key_blocks_used']) + float(self.dict['Key_blocks_unused']))
except ZeroDivisionError, e:
print "integer division or modulo by zero", e
return Key_usage_ratio
def Key_write_hit_ratio(self):
Key_write_hit_ratio = (1 - float(self.dict['Key_writes']) / float(self.dict['Key_write_requests'])) * 100
except ZeroDivisionError, e:
print "integer division or modulo by zero", e
return Key_write_hit_ratio
def Innodb_buffer_read_hit_ratio(self):
Innodb_buffer_read_hit_ratio = (1 - float(self.dict['Innodb_buffer_pool_reads']) / float(self.dict['Innodb_buffer_pool_read_requests'])) * 100
except ZeroDivisionError, e:
print "integer division or modulo by zero", e
return Innodb_buffer_read_hit_ratio
def Innodb_buffer_usage(self):
Innodb_buffer_usage = (1 - float(self.dict['Innodb_buffer_pool_pages_free']) / float(self.dict['Innodb_buffer_pool_pages_total'])) * 100
except ZeroDivisionError, e:
print "integer division or modulo by zero", e
return Innodb_buffer_usage
def Innodb_buffer_pool_dirty_ratio(self):
Innodb_buffer_pool_dirty_ratio = (float(self.dict['Innodb_buffer_pool_pages_dirty']) / float(self.dict['Innodb_buffer_pool_pages_total'])) * 100
except ZeroDivisionError, e:
print "integer division or modulo by zero", e
return Innodb_buffer_pool_dirty_ratio
class ErrorOut():
def error_print(self):
"""输出错误信息"""
print 'Usage: ' + sys.argv[0] + ' ' + ' MySQL_Status_Key '
sys.exit(1)
class Main():
def main(self):
error = ErrorOut()
if len(sys.argv) == 1:
error.error_print()
elif len(sys.argv) == 2:
error.error_print()
elif len(sys.argv) == 3:
port = int(sys.argv[1])
key = sys.argv[2]
a = GetMysqlStatus()
a.check(port)
a.extract()
if hasattr(a, key):
print getattr(a, key)()
print a.get_val(key)
if __name__ == "__main__":
run = Main()
run.main()
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
#!/usr/bin/env python#coding=utf8&import sysimport osimport inspectimport MySQLdbimport MySQLdb.cursors&class GetMysqlStatus():&&&&def __init__(self):&&&&&&&&self.result = ''&&&&&&&&self.dict = {}&&&&def check(self, port):&&&&&&&&try:&&&&&&&&&&&&self.db = MySQLdb.connect(user="root", passwd="LVS@071103",&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&host="127.0.0.1", port=port,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&cursorclass=MySQLdb.cursors.DictCursor)&&&&&&&&except Exception, e:&&&&&&&&&&&&raise Exception, 'Cannot interface with MySQL server, %s' % e&&&&&def extract(self):&&&&&&&&try:&&&&&&&&&&&&c = self.db.cursor()&&&&&&&&&&&&c.execute("""""")&&&&&&&&&&&&self.result = c.fetchall()&&&&&&&&&&&&for i in self.result:&&&&&&&&&&&&&&&&self.dict[i['Variable_name']] = i['Value']&&&&&&&&&&&&return self.dict&&&&&&&&&&&&c.close()&&&&&&&&&&&&self.db.close()&&&&&&&&except Exception, e:&&&&&&&&&&&&print e&&&&&&&&def get_val(self, key):&&&&&&&&return self.dict[key]&&&&&def TPS(self):&&&&&&&&TPS = int(self.dict['Com_commit']) + int(self.dict['Com_rollback'])&&&&&&&&return TPS&&&&&def QPS(self):&&&&&&&&return int(self.dict['Com_insert']) + int(self.dict['Com_delete']) + int(self.dict['Com_select']) + int(self.dict['Com_update'])&&&&&def Key_read_hit_ratio(self):&&&&&&&&try:&&&&&&&&&&&&Key_read_hit_ratio = (1 - float(self.dict['Key_reads'])&&/ float(self.dict['Key_read_requests'])) * 100&&&&&&&&except ZeroDivisionError, e:&&&&&&&&&&&&print "integer division or modulo by zero", e&&&&&&&&return Key_read_hit_ratio&&&&&def Key_usage_ratio(self):&&&&&&&&try:&&&&&&&&&&&&Key_usage_ratio = float(self.dict['Key_blocks_used']) / (float(self.dict['Key_blocks_used']) + float(self.dict['Key_blocks_unused']))&&&&&&&&except ZeroDivisionError, e:&&&&&&&&&&&&print "integer division or modulo by zero", e&&&&&&&&return Key_usage_ratio&&&&&def Key_write_hit_ratio(self):&&&&&&&&try:&&&&&&&&&&&&Key_write_hit_ratio = (1 - float(self.dict['Key_writes']) / float(self.dict['Key_write_requests'])) * 100&&&&&&&&except ZeroDivisionError, e:&&&&&&&&&&&&print "integer division or modulo by zero", e&&&&&&&&return Key_write_hit_ratio&&&&&def Innodb_buffer_read_hit_ratio(self):&&&&&&&&try:&&&&&&&&&&&&Innodb_buffer_read_hit_ratio = (1 - float(self.dict['Innodb_buffer_pool_reads']) / float(self.dict['Innodb_buffer_pool_read_requests'])) * 100&&&&&&&&except ZeroDivisionError, e:&&&&&&&&&&&&print "integer division or modulo by zero", e&&&&&&&&return Innodb_buffer_read_hit_ratio&&&&&def Innodb_buffer_usage(self):&&&&&&&&try:&&&&&&&&&&&&Innodb_buffer_usage = (1 - float(self.dict['Innodb_buffer_pool_pages_free']) / float(self.dict['Innodb_buffer_pool_pages_total'])) * 100&&&&&&&&except ZeroDivisionError, e:&&&&&&&&&&&&print "integer division or modulo by zero", e&&&&&&&&return Innodb_buffer_usage&&&&&def Innodb_buffer_pool_dirty_ratio(self):&&&&&&&&try:&&&&&&&&&&&&Innodb_buffer_pool_dirty_ratio = (float(self.dict['Innodb_buffer_pool_pages_dirty']) / float(self.dict['Innodb_buffer_pool_pages_total'])) * 100&&&&&&&&except ZeroDivisionError, e:&&&&&&&&&&&&print "integer division or modulo by zero", e&&&&&&&&return Innodb_buffer_pool_dirty_ratio&class ErrorOut():&&&&def error_print(self):&&&&&&&&"""输出错误信息"""&&&&&&&&print&&&&&&&&print 'Usage: ' + sys.argv[0] + ' ' + ' MySQL_Status_Key '&&&&&&&&print&&&&&&&&sys.exit(1)&class Main():&&&&def main(self):&&&&&&&&error = ErrorOut()&&&&&&&&if len(sys.argv) == 1:&&&&&&&&&&&&error.error_print()&&&&&&&&elif len(sys.argv) == 2:&&&&&&&&&&&&error.error_print()&&&&&&&&elif len(sys.argv) == 3:&&&&&&&&&&&&port = int(sys.argv[1])&&&&&&&&&&&&key = sys.argv[2]&&&&&&&&&&&&a = GetMysqlStatus()&&&&&&&&&&&&a.check(port)&&&&&&&&&&&&a.extract()&&&&&&&&&&&&if hasattr(a, key):&&&&&&&&&&&&&&&&print getattr(a, key)()&&&&&&&&&&&&else:&&&&&&&&&&&&&&&&print a.get_val(key)&if __name__ == "__main__":&&&& run = Main()&&&& run.main()
本文固定链接:
转载请注明:
作者:admin
这个作者貌似有点懒,什么都没有留下。
您可能还会对这些文章感兴趣!

我要回帖

更多关于 linux lvs 负载均衡 的文章

 

随机推荐