dstat是一个python开源的实时监控工具,一般是用来做系统性能监控的。咱们这里只是提他的自定义插件开发,用来打造自己的dstat。 有朋友可能还没清楚是什么意思, 咱们查看系统的状体状态有人喜欢用vmstat,也有人喜欢用dstat。
相比来说dstat的功能模块更全一点是,这里还只是说查看系统性能方面的 ! 如果想一边查看,系统的各方面性能指标,还想看你应用的一些个负载相关,比如某个程序的负载,mongodb的锁lock百分比,mysql连接数... 懂了吧 !
下面是dstat的插件,这些组件基本是python开发。大家可以随便找个脚本看看。一开始在官网找相关的文档,就那几百行的文档,没看懂,这次真不是我英语不行,是他们真没说明白, 我还看到很多人提了issue,也是在问怎么搞扩展。 在官网没找到思路后,我直接看dstat的源码,然后找了个例子,原来是如此的简单。
你传递的参数,他会引入模块,引入的合适的格式 dstat_innodb_io.py ,他会匹配引入模块,然后调用模块 。
当然这类似dstat、vmstat的工具,我们自己也能做,但dstat的性能统计信息已经完整了,就没必要重新自己写一套了 。
首先来个简单的例子,我们想查看proc有多少个活动进程。
class dstat_plugin(dstat):
"""
Total Number of processes on this system.
"""
def __init__(self):
self.name = 'procs'
self.type = 'd'
self.width = 4
self.scale = 10
self.vars = ('total',)
def extract(self):
self.val['total'] = len(glob.glob('/proc/[0-9]*'))
vars是显示的内容,val['total']是相对于vars的值。
我们来看个dstat 对于memcached的实时监控,这个需要你安装python memcahced模块包的,不然报错。
### Author: Dean Wilson <dean.wilson@gmail.com>
class dstat_plugin(dstat):
"""
Memcache hit count plugin.
Displays the number of memcache get_hits and get_misses.
"""
def __init__(self):
self.name = 'Memcache Hits'
self.type = 'd'
self.width = 6
self.scale = 50
self.nick = ('Hit', 'Miss')
self.vars = ('get_hits', 'get_misses')
def check(self):
try:
global memcache
import memcache
self.mc = memcache.Client(['127.0.0.1:11211'], debug=0)
except:
raise Exception, 'Plugin needs the memcache module'
def extract(self):
stats = self.mc.get_stats()
for key in self.vars:
self.val[key] = long(stats[0][1][key])
~
其实主要是就两个点,一个是 vars是显示的名字,val[key]是值 。
再来一个mysql 连接数的例子,这个也是默认给的。系统首先会调用check函数,然后才会执行extract。这里的账号和密码,以及主机ip和端口都需要你自己变动的。
def __init__(self):
self.name = 'mysql5 conn'
self.type = 'f'
self.width = 4
self.scale = 1
self.nick = ('ThCon', '%Con')
self.vars = ('Threads_connected', 'Threads')
def check(self):
global MySQLdb
import MySQLdb
try:
self.db = MySQLdb.connect(user=mysql_user, passwd=mysql_pwd)
except Exception, e:
raise Exception, 'Cannot interface with MySQL server, %s' % e
def extract(self):
try:
c = self.db.cursor()
c.execute("""show global variables like 'max_connections';""")
max = c.fetchone()
c.execute("""show global status like 'Threads_connected';""")
thread = c.fetchone()
if thread[0] in self.vars:
self.set2[thread[0]] = float(thread[1])
self.set2['Threads'] = float(thread[1] / float(max[1]) 1.0 * 100)
for name in self.vars:
self.val[name] = self.set2[name] * 1.0 / elapsed
if step == op.delay:
self.set1.update(self.set2)
except Exception, e:
for name in self.vars:
self.val[name] = -1
下面是我为自己扩展了一个方便自己查看性能指标的面板。 可以查看网速,线程连接数,最大连接数,进程数,redis的邮件队列。
原文:http://rfyiamcool.blog.51cto.com/1030776/1430966
dstat 有个小小的缺点,他自己没有多线程或者多进程的实现。这样会导致采集多个信息的时候,会有些慢。
vmstat和dstat虽然很有优秀,但是咱们的要求更高,更全面,那就请自己扩展插件吧。