python开发监控工具_监控开发之用python扩展dstat插件自定义实时监控

dstat是一个python开源的实时监控工具,一般是用来做系统性能监控的。咱们这里只是提他的自定义插件开发,用来打造自己的dstat。 有朋友可能还没清楚是什么意思, 咱们查看系统的状体状态有人喜欢用vmstat,也有人喜欢用dstat。

相比来说dstat的功能模块更全一点是,这里还只是说查看系统性能方面的 !   如果想一边查看,系统的各方面性能指标,还想看你应用的一些个负载相关,比如某个程序的负载,mongodb的锁lock百分比,mysql连接数...   懂了吧 !

下面是dstat的插件,这些组件基本是python开发。大家可以随便找个脚本看看。一开始在官网找相关的文档,就那几百行的文档,没看懂,这次真不是我英语不行,是他们真没说明白, 我还看到很多人提了issue,也是在问怎么搞扩展。 在官网没找到思路后,我直接看dstat的源码,然后找了个例子,原来是如此的简单。

你传递的参数,他会引入模块,引入的合适的格式 dstat_innodb_io.py ,他会匹配引入模块,然后调用模块  。

当然这类似dstat、vmstat的工具,我们自己也能做,但dstat的性能统计信息已经完整了,就没必要重新自己写一套了 。

原文:http://rfyiamcool.blog.51cto.com/1030776/1430966

[root@66 dstat]# pwd

/usr/share/dstat

[root@66 dstat]# ls

dstat_battery.py          dstat_innodb_io.py       dstat_nfs3_ops.pyo    dstat_sendmail.pyo         dstat_top_oom.pyo

dstat_battery.pyo         dstat_innodb_io.pyo      dstat_nfs3.py         dstat_snooze.py            dstat_utmp.py

dstat_battery_remain.py   dstat_innodb_ops.py      dstat_nfs3.pyo        dstat_snooze.pyo           dstat_utmp.pyo

dstat_battery_remain.pyo  dstat_innodb_ops.pyo     dstat_nfsd3_ops.py    dstat_thermal.py           dstat_vmk_hba.py

dstat_cpufreq.py          dstat_lustre.py          dstat_nfsd3_ops.pyo   dstat_thermal.pyo          dstat_vmk_hba.pyo

dstat_cpufreq.pyo         dstat_lustre.pyo         dstat_nfsd3.py        dstat_top_bio.py           dstat_vmk_int.py

dstat_dbus.py             dstat_memcache_hits.py   dstat_nfsd3.pyo       dstat_top_bio.pyo          dstat_vmk_int.pyo

dstat_dbus.pyo            dstat_memcache_hits.pyo  dstat_ntp.py          dstat_top_cpu.py           dstat_vmk_nic.py

dstat_disk_util.py        dstat_mysql5_cmds.py     dstat_ntp.pyo         dstat_top_cpu.pyo          dstat_vmk_nic.pyo

dstat_disk_util.pyo       dstat_mysql5_cmds.pyo    dstat_postfix.py      dstat_top_cputime_avg.py   dstat_vm_memctl.py

dstat_fan.py              dstat_mysql5_conn.py     dstat_postfix.pyo     dstat_top_cputime_avg.pyo  dstat_vm_memctl.pyo

dstat_fan.pyo             dstat_mysql5_io.py       dstat_power.py        dstat_top_cputime.py       dstat_vz_cpu.py

dstat_freespace.py        dstat_mysql5_io.pyo      dstat_power.pyo       dstat_top_cputime.pyo      dstat_vz_cpu.pyo

dstat_freespace.pyo       dstat_mysql5_keys.py     dstat_proc_count.py   dstat_top_io.py            dstat_vz_io.py

dstat_gpfs_ops.py         dstat_mysql5_keys.pyo    dstat_proc_count.pyo  dstat_top_io.pyo           dstat_vz_io.pyo

dstat_gpfs_ops.pyo        dstat_mysql_io.py        dstat.py              dstat_top_latency_avg.py   dstat_vz_ubc.py

dstat_gpfs.py             dstat_mysql_io.pyo       dstat.pyo             dstat_top_latency_avg.pyo  dstat_vz_ubc.pyo

dstat_gpfs.pyo            dstat_mysql_keys.py      dstat_rpcd.py         dstat_top_latency.py       dstat_wifi.py

dstat_helloworld.py       dstat_mysql_keys.pyo     dstat_rpcd.pyo        dstat_top_latency.pyo      dstat_wifi.pyo

dstat_helloworld.pyo      dstat_net_packets.py     dstat_rpc.py          dstat_top_mem.py           p-mem

dstat_innodb_buffer.py    dstat_net_packets.pyo    dstat_rpc.pyo         dstat_top_mem.pyo

dstat_innodb_buffer.pyo   dstat_nfs3_ops.py        dstat_sendmail.py     dstat_top_oom.py

首先来个简单的例子,我们想查看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 

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的邮件队列。

0cbffc0ee967e45eadbeb0940890fe0d.png

dstat   有个小小的缺点,他自己没有多线程或者多进程的实现。这样会导致采集多个信息的时候,会有些慢。

vmstat和dstat虽然很有优秀,但是咱们的要求更高,更全面,那就请自己扩展插件吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值