MySQL系统运行状态实时监控(python版本)

昨天的文章,用shell写了一个简单的MySQL系统运行状态实时监控的模版,《MySQL系统运行状态实时监控(shell版本)》,对于这种操作,任何语言都可以完成,今儿就用python写一下,写的不优雅的地方,请各位指正。

首先,为了让python能连接MySQL数据库,需要一些第三方的库,由于我用的是python 2.3版本,因此可以使用mysqldb,(若是python 3.x,则可以使用PyMySQL),可以从以下链接下载压缩,目前最新版本是1.2.5,

https://pypi.python.org/pypi/MySQL-python/1.2.3

如果不确定本机是否安装了,可以使用,

python

>> import MySQLdb

看下是否报错,若提示了,

ImportError: No module named MySQLdb

则表示未安装。

解压MySQL-python-1.2.3.tar.gz,

进入目录,执行以下命令,完成mysqldb的安装,

python setup.py install

接下来开始coding,首先定义一个枚举类,方便常量调用,此处为五个状态参数,

def enum(**enums):

return type('Enum', (), enums)

Status=enum(QPS="queries", Commit="com_commit",

Rollback="com_rollback", Threads_con="Threads_connected",

Threads_run="Threads_running")

python连接数据库,确实比java这些语言,要简单些,

dbConn=MySQLdb.connect(

host='x.x.x.x',

port=3306,

user='bisal',

passwd='xxxxx',

db='mysql')

cursor=dbConn.cursor()

比如我要检索QPS这个参数,执行以下SQL,由于是肯定只返回一条数据,所以用了fetchone()函数,为了只要返回值,使用str[a:b]进行了字符串截取。

sql='show global status like \'' + Status.QPS + '\''

cursor.execute(sql)

result=cursor.fetchone()

str= ''.join(result)

q=str[len(Status.QPS):len(str)]

接下来就可以格式化打印,同样输出10次,重新打印表头,显示sleep一秒,

if (count==0):

print "|QPS        |Commit     |Rollback   |TPS        |Threads_con  |Threads_run |"

print "------------------------------------------------------------------------------"

if (count>=10):

count=0

print "------------------------------------------------------------------------------"

print "|QPS        |Commit     |Rollback   |TPS        |Threads_con  |Threads_run |"

print "------------------------------------------------------------------------------"

print "|%-10s |%-10s |%-10s |%-10s |%-12s |%-12s|" % (q,c,r,c+r,tc,tr)

else:

print "|%-10s |%-10s |%-10s |%-10s |%-12s |%-12s|" % (q,c,r,c+r,tc,tr)

count+=1

time.sleep(1)

另外,记得需要关闭数据库连接,

cursor.close()

dbConn.close()

整个流程,其实很简单,就是执行show status语句,进行一些字符串处理,格式化输出,以上完整代码,可以下载:

https://github.com/bisal-liu/mysql/blob/master/mysql_per_monitor_1.py

要说可以优化,就是上面这种方法中,对于每一个状态参数,都要执行一次show status,有些浪费,可以一次执行,多次解析,使用IN子句,实现执行一次SQL,返回不同参数,

sql='show global status where variable_name in (\'' + Status.QPS + '\',\'' + Status.Commit \

+ '\',\'' + Status.Rollback + '\',\'' + Status.Threads_con + '\',\'' + Status.Threads_run + '\')'

由于返回不止一条记录,因此需要使用for,if中根据字符串做匹配,以下写法中,

1. 若使用了''.join(line),则需要使用q=k1[len(Status.QPS):len(k1)]截取字符串。

2. 若使用了str(line),则需要使用q=k2.split('\'')[3]截取字符串。

for line in result:

k1=''.join(line).lower()

k2=str(line).lower()

if (Status.QPS in k1):

q=k1[len(Status.QPS):len(k1)]

elif (Status.Commit in k1):

c=k1[len(Status.Commit):len(k1)]

elif (Status.Rollback in k1):

r=k1[len(Status.Rollback):len(k1)]

elif (Status.Threads_con in k1):

tc=k1[len(Status.Threads_con):len(k1)]

elif (Status.Threads_run in k1):

tr=k1[len(Status.Threads_run):len(k1)]

if (Status.QPS in k2):

q=k2.split('\'')[3]

elif (Status.Commit in k2):

c=k2.split('\'')[3]

elif (Status.Rollback in k2):

r=k2.split('\'')[3]

elif (Status.Threads_con in k2):

tc=k2.split('\'')[3]

elif (Status.Threads_run in k2):

tr=k2.split('\'')[3]

以上完整代码,可以下载,

https://github.com/bisal-liu/mysql/blob/master/mysql_per_monitor_2.py

以上两种写法,效果一样,

1. 每隔1秒,刷新一次,

2. 每隔10次,重新打印表头,

如果您觉得此篇文章对您有帮助,欢迎关注微信公众号:bisal的个人杂货铺,您的支持是对我最大的鼓励!共同学习,共同进步:)

时间: 2024-10-26 11:46:58

MySQL系统运行状态实时监控(python版本)的相关文章

MySQL系统运行状态实时监控(shell版本)

开始接触MySQL,还是和Oracle有些不一样的地方,需要逐步积累和学习,其中有一点不同,就是Oracle有一些数据字典,可以显示系统运行状态,但需要使用SQL来检索,另外AWR会有一些运行状态信息,相比之下,MySQL提供了一些指令,直接执行就可以显示,看起来要更方便一些. MySQL要显示系统运行状态,可以有两种方法. 方法一:登陆数据库,执行命令show global status,如下所示, 方式二:不用登陆数据库,使用mysqladmin指令,如下所示, mysqladmin -ur

python实现实时监控文件的方法_python

在业务稳定性要求比较高的情况下,运维为能及时发现问题,有时需要对应用程序的日志进行实时分析,当符合某个条件时就立刻报警,而不是被动等待出问题后去解决,比如要监控nginx的$request_time和$upstream_response_time时间,分析出最耗时的请求,然后去改进代码,这时就要对日志进行实时分析了,发现时间长的语句就要报警出来,提醒开发人员要关注,当然这是其中一个应用场景,通过这种监控方式还可以应用到任何需要判断或分析文件的地方,所以今天我们就来看看如何用python实现实时监

运维经验分享:关于系统运维监控的几点建议

目前很多企业信息化系统都有自己的监控平台和监控手段,无论是采用哪种手段去实现对系统的实时监控和故障告警,大多采用的方式也只有两种:集中式监控和分布式监控.本文作者根据自身公司监控存在的问题,总结了一些经验并提出一些在监控平台的建议,以供大家参考学习,如有考虑不周的地方还希望大家多多批评指正. 为了更好.更有效的保障系统上线后的稳定的运行.对于服务器的硬件资源.性能.带宽.端口.进程.服务等都必须有一个可靠和可持续的监测机制,统计分析每天的各种数据,从而能及时反映出服务器哪里存在性能瓶颈.安全隐患

Linux更新Python版本及修改python默认版本的方法_linux shell

linux下更新Python版本并修改默认版本,有需要的朋友可以参考下. 很多情况下拿到的服务器python版本很低,需要自己动手更改默认python版本 1.从官网下载python安装包(这个版本可以是任意版本3.3 2.7 2.6等等) wget http://python.org/ftp/python/2.7/Python-2.7.tar.bz2   2.解压并安装 tar -jxvf Python-2.7.tar.bz2 cd Python-3.3.0 ./configure make

基于Storm的Nginx log实时监控系统

[编者按]Hadoop的缺点也和它的优点同样鲜明--延迟大,响应缓慢,运维复杂.被人广受诟病,但是 有需求就有创造,在Hadoop基本奠定了大数据霸主地位的时候,很多的开源项目都是以弥补Hadoop的实时性为目标而被创造出来,Storm正是在这个时候横空出世,Storm是一个免费开源.分布式.高容错的实时计算系统.Storm令持续不断的流计算变得容易,弥补了Hadoop批处理所不能满足的实时要求. 以下为原文: 背景UAE(UC App Engine)是一个UC内部的PaaS平台,总体架构有点类

网站实时监控系统的设计与实现

监控|设计 摘 要: 本文提出了基于操作系统内核服务和多线程技术的网站实时监控系统,解决了以往监控系统不能及时恢复异常网页的问题.重点介绍了系统的传送控制部分和监控部分 关键词: 实时监控:多线程:API 引言 对网页监控比较成熟的技术是定时监控,即由用户设定时间间隔,系统按时对需监控的网页文件轮询一遍,来判断文件是否被非法删除或篡改.若发现,立即用备份盘上的备份文件进行恢复.这样的监控存在一个缺陷:被非法删除或篡改的网页不能得到及时的恢复. 本文介绍的网站实时监控系统创造性地利用操作系统内核提

进程监控-关于windows下非子进程之间的运行状态实时监测

问题描述 关于windows下非子进程之间的运行状态实时监测 情况是这么回事 我在做个windows平台的东西,需要一个管理进程,管理着一堆服务进程,然后我需要在服务进程异常关闭的时候实时通知管理进程. 因为实时性要求的原因,所以心跳的方式直接被我无视了. 因为主要是想达到服务进程异常关闭直接宕掉的情况,因此我找来找去也没啥好办法. 唯一可以借鉴的方法是socket的方式,当一对socket连接中的服务器和客户端,服务器用recv阻塞住,当客户端异常关闭的时候服务器recv直接返回SOCKETE

Python实时监控文件3种方法

在业务稳定性要求比较高的情况下,运维为能及时发现问题,有时需要对应用程序的日志进行实时分析,当符合某个条件时就立刻报警,而不是被动等待出问题后去解决,比如要监控nginx的$request_time和$upstream_response_time时间,分析出最耗时的请求,然后去改进代码,这时就要对日志进行实时分析了,发现时间长的语句就要报警出来,提醒开发人员要关注,当然这是其中一个应用场景,通过这种监控方式还可以应用到任何需要判断或分析文件的地方,所以今天我们就来看看如何用python实现实时监

Google将对Android系统中已安装App带来实时监控功能

Google将对Android系统中已安装App带来 实时监控功能Google 一直都希望对你的 Android 智慧型装置带来更全面地保护,除了有效限制伤害的 Sandbox 环境外,他们还直接为 Google Play 加上了另一道名为 Verify Apps 的验证锁头,在使用者安装应用程式的时候可以有效地透过验证机制,阻绝恶意程式的被安装在装置之上.现在,他们打算将这个资安防护的层级更进一步,带来"全时"监控已安装 App 的加强功能 -- 并且将在近期之内加入 Android