
2.2 系统信息监控
运维离不开对系统信息的监控,如CPU的使用率、内存的占用情况、网络、进程等相关信息都需要被监控,虽然我们可以通过操作系统提供的任务管理器或命令查看相关信息,但仍不能简化这些日常的运维任务。如果我们通过编写程序获取以上信息,那么系统信息监控就是一件轻松而简单的工作。
在Python中获取系统信息最便捷的模块是psutil(process and system utilities)。通过简短的几行代码就可以获取系统相关信息,而且还是跨平台库。psutil不属于标准库,需要手动安装。安装psutil非常简单,执行以下命令即可。
pip install psutil
如果生产环境没有联网则可以先在外网使用pip下载,再移动至生产环境安装。为了方便显示语句运行结果,下面使用IPython解释器。在此啰嗦一下,IPython是学习Python的利器,是让Python显得友好十倍的外套,强烈建议读者使用IPython,可通过pip install ipython安装IPython。
下面一一列举使用方法。
【示例2-13】监控CPU信息。

【示例2-14】监控内存信息。
In[11]:psutil.virtual_memory() Out[11]: svmem(total=4196921344, available=644300800, percent=84.6, used=3552620544, free=644300800)
这里的数值是以字节为单位显示的,如需要转成MB、GB自行转换一下即可。
【示例2-15】监控磁盘信息。
In[12]:psutil.disk_partitions() Out[12]: [sdiskpart(device='C:\\', mountpoint='C:\\', fstype='NTFS', opts='rw,fixed'), sdiskpart(device='D:\\', mountpoint='D:\\', fstype='NTFS', opts='rw,fixed'), sdiskpart(device='E:\\', mountpoint='E:\\', fstype='NTFS', opts='rw,fixed'), sdiskpart(device='F:\\', mountpoint='F:\\', fstype='NTFS', opts='rw,fixed'), sdiskpart(device='G:\\', mountpoint='G:\\', fstype='', opts='cdrom'), sdiskpart(device='J:\\', mountpoint='J:\\', fstype='', opts='removable')] In[13]:psutil.disk_usage('/') # 磁盘使用情况 Out[13]: sdiskusage(total=192703098880, used=124325285888, free=68377812992, percent=64.5) In[14]:psutil.disk_io_counters() Out[14]: sdiskio(read_count=1374834, write_count=618746, read_bytes=57800820224, write_bytes=32607985152, read_time=22674, write_time=3128)
【示例2-16】监控网络信息。



【示例2-17】获取进程信息。

前面使用psutil.process_iter获取了进程相关的信息,返回结果是一个可迭代对象,每个元素的info是一个字典,通过字典可以获取我们关心的信息。获取进程的其他信息如CPU占用、内存占用、进程的线程数等,还可以使用如下方式:

【示例2-18】下面是几种常见的实用方法。



小结:本节主要介绍了如何通过psutil库获取常见的系统信息和进程信息,系统信息和进程相关的指标非常多,具体使用时我们只关心自己需要监控的指标即可,深入了解psutil模块请查阅psutil的官方文档。