一 点睛
系统基础信息采集模块作为监控模块的重要组成部分,能够帮助运维人员了解当前系统的健康程度,同时也是衡量业务的服务质量的依 据,比如系统资源吃紧,会直接影响业务的服务质量及用户体验,另外获取设备的流量信息,也可以让运维人员更好地评估带宽、设备资源是否应该扩容。通过运用Python第三方系统基础模块,可以轻松获取服务关键运营指标数据,包括Linux基本性能、块设备、网卡接口、系统信息、网络地址库等信息。在采集到这些数据后,我们就可以全方位了解系统服务的状态,再结合告警机制,可以在第一时间响应,将异常出现在苗头时就得以处理。
psutil是一个跨平台库,能够轻松实现获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。它主要应用于系统监控,分析和限制系统资源及进程的管理。它实现了同等命令行工具提供的功能,如ps、top、lsof、netstat、 ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、 pidof、tty、taskset、pmap等。目前支持32位和64位的Linux、 Windows、OS X、FreeBSD和Sun Solaris等操作系统,支持2.4以上的Python版版本。通常我们获取操作系统信息往往采用编写shell来实现,如获取当前物理内存总大小及已使用大小,shell命令如下:
物理内存total值获取方法:
[root@centos ~]# free -m | grep Mem | awk '{print $2}'
1838
物理内存used值获取方法:
[root@centos ~]# free -m | grep Mem | awk '{print $3}'
220
相比较而言,使用psutil库实现则更加简单明了。psutil大小单位一 般都采用字节。
[root@localhost ~]# python
Python 2.7.5 (default, Aug 4 2017, 00:39:18)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import psutil
>>> mem = psutil.virtual_memory()
>>> mem.total,mem.used
(5015011328, 4745338880)
二 安装方法
[root@localhost ~]# pip install psutil
三 获取系统性能信息
1 点睛
采集系统的基本性能信息包括CPU、内存、磁盘、网络等,可以完整描述当前系统的运行状态及质量。psutil模块已经封装了这些方法,用户可以根据自身的应用场景,调用相应的方法来满足需求,非常简单实用。
2 CPU信息
-
Linux操作系统的CPU利用率有以下几个部分:
-
User Time:执行用户进程的时间百分比
-
System Time:执行内核进程和中断的时间百分比
-
Wait IO:由于IO等待而使CPU处于idle(空闲)状态的时间百分比
-
Idle:CPU处于idle状态的时间百分比。
我们使用Python的psutil.cpu_times()方法可以非常简单地得到这些信息,同时也可以获取CPU的硬件相关信息,比如CPU的物理个数与逻辑个数。
3 实战
>>> import psutil
>>> psutil.cpu_times() #使用cpu_times方法获取CPU完整信息
scputimes(user=431.75, nice=0.0, system=54.94, idle=826.88, iowait=175.3, irq=0.0, softirq=18.23, steal=0.0, guest=0.0, guest_nice=0.0)
>>> psutil.cpu_times(percpu=True) #需要显示所有逻辑CPU信息,指定方法变量percpu=True即可
[scputimes(user=215.55, nice=0.0, system=27.75, idle=454.92, iowait=88.43, irq=0.0, softirq=12.79, steal=0.0, guest=0.0, guest_nice=0.0), scputimes(user=226.97, nice=0.0, system=28.88, idle=451.16, iowait=93.97, irq=0.0, softirq=6.27, steal=0.0, guest=0.0, guest_nice=0.0)]
>>> psutil.cpu_times().user #获取单项数据信息,如用户user的CPU时间比
452.08
>>> psutil.cpu_count() #获取CPU的逻辑个数
2
>>> psutil.cpu_count(logical=False) #获取CPU的物理个数
2