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

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介:

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

     

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


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

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


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


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
原文: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有多少个活动进程。

1
2
3
4
5
6
7
8
9
10
11
12
13
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模块包的,不然报错。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
### 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和端口都需要你自己变动的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
     
     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 :
             =  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


wKioL1OpWVvSOUleAASig1qml_Q357.jpg


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



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







 本文转自 rfyiamcool 51CTO博客,原文链接:http://blog.51cto.com/rfyiamcool/1430966 ,如需转载请自行联系原作者

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
3月前
|
存储 监控 算法
监控电脑屏幕的帧数据检索 Python 语言算法
针对监控电脑屏幕场景,本文提出基于哈希表的帧数据高效检索方案。利用时间戳作键,实现O(1)级查询与去重,结合链式地址法支持多条件检索,并通过Python实现插入、查询、删除操作。测试表明,相较传统列表,检索速度提升80%以上,存储减少15%,具备高实时性与可扩展性,适用于大规模屏幕监控系统。
157 5
|
4月前
|
设计模式 人工智能 API
AI智能体开发实战:17种核心架构模式详解与Python代码实现
本文系统解析17种智能体架构设计模式,涵盖多智能体协作、思维树、反思优化与工具调用等核心范式,结合LangChain与LangGraph实现代码工作流,并通过真实案例验证效果,助力构建高效AI系统。
615 7
|
4月前
|
缓存 监控 供应链
唯品会自定义 API 自定义操作深度分析及 Python 实现
唯品会开放平台提供丰富API,支持商品查询、订单管理、促销活动等电商全流程操作。基于OAuth 2.0认证机制,具备安全稳定的特点。通过组合调用基础接口,可实现数据聚合、流程自动化、监控预警及跨平台集成,广泛应用于供应链管理、数据分析和智能采购等领域。结合Python实现方案,可高效完成商品搜索、订单分析、库存监控等功能,提升电商运营效率。
|
4月前
|
缓存 监控 供应链
京东自定义 API 操作深度分析及 Python 实现
京东开放平台提供丰富API接口,支持商品、订单、库存等电商全链路场景。通过自定义API组合调用,可实现店铺管理、数据分析、竞品监控等功能,提升运营效率。本文详解其架构、Python实现与应用策略。
缓存 监控 供应链
108 0
缓存 监控 数据挖掘
95 0
|
5月前
|
算法 程序员 API
电商程序猿开发实录:淘宝商品python(2)
本文分享了开发者在对接淘宝商品详情API过程中的真实经历,涵盖权限申请、签名验证、限流控制、数据解析及消息订阅等关键环节,提供了实用的Python代码示例,帮助开发者高效调用API,提升系统稳定性与数据处理能力。
|
5月前
|
存储 监控 算法
淘宝买家秀 API开发实录Python(2025)
本文讲述了作者在电商开发领域,尤其是对接淘宝买家秀 API 接口过程中所经历的挑战与收获。从申请接入、签名验证、频率限制到数据处理和实时监控,作者分享了多个实战经验与代码示例,帮助开发者更高效地获取和处理买家秀数据,提升开发效率。
|
6月前
|
存储 运维 监控
基于跳表数据结构的局域网上网记录监控时序查询优化算法研究与 Python 实现
本文探讨跳表(Skip List)在局域网上网记录监控中的应用,分析其在快速范围查询、去重与异常检测中的优势,并提供 Python 实现示例,为高效处理海量时序数据提供参考。
121 0
|
6月前
|
机器学习/深度学习 数据安全/隐私保护 计算机视觉
过三色刷脸技术,过三色刷脸技术教程,插件过人脸python分享学习
三色刷脸技术是基于RGB三通道分离的人脸特征提取方法,通过分析人脸在不同颜色通道的特征差异

推荐镜像

更多