![Python自动化运维快速入门](https://wfqqreader-1252317822.image.myqcloud.com/cover/815/26846815/b_26846815.jpg)
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信息。
![](https://epubservercos.yuewen.com/C3ED30/15289822304506406/epubprivate/OEBPS/Images/Figure-P88_46800.jpg?sign=1739207948-vKhni6GfM7XS2EZsfzX6Jnr0fNKKXySH-0-fa43addf8348fefda1b9727c1671a857)
【示例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】监控网络信息。
![](https://epubservercos.yuewen.com/C3ED30/15289822304506406/epubprivate/OEBPS/Images/Figure-P89_46804.jpg?sign=1739207948-dfYunFADgOASlGxv4eoF5TBhszvxItst-0-f1dd3f433236b773540802a2a747fb4b)
![](https://epubservercos.yuewen.com/C3ED30/15289822304506406/epubprivate/OEBPS/Images/Figure-P90_46805.jpg?sign=1739207948-npgAcY1b7YN8JiApfUSJw2pDMxtCsPuN-0-9978445fe6875340b1856236b87b3509)
![](https://epubservercos.yuewen.com/C3ED30/15289822304506406/epubprivate/OEBPS/Images/Figure-P91_46806.jpg?sign=1739207948-HSAcIjQWwTlRE40SwyXFxqoYvYdlz3BX-0-2e26af83a4ac551d93a9caaa7e5ca20b)
【示例2-17】获取进程信息。
![](https://epubservercos.yuewen.com/C3ED30/15289822304506406/epubprivate/OEBPS/Images/Figure-P91_46807.jpg?sign=1739207948-lfVn52sqhDOE9gKp3Z37OHZi9o2jctES-0-68371030318310b27816ec94c6459582)
前面使用psutil.process_iter获取了进程相关的信息,返回结果是一个可迭代对象,每个元素的info是一个字典,通过字典可以获取我们关心的信息。获取进程的其他信息如CPU占用、内存占用、进程的线程数等,还可以使用如下方式:
![](https://epubservercos.yuewen.com/C3ED30/15289822304506406/epubprivate/OEBPS/Images/Figure-P91_46808.jpg?sign=1739207948-RLqe3k8mS7tRqG699bSaM3FVJ6Mdx7pw-0-5a4a09dc6ef41ff6ebdf69cc3d5bbc8f)
【示例2-18】下面是几种常见的实用方法。
![](https://epubservercos.yuewen.com/C3ED30/15289822304506406/epubprivate/OEBPS/Images/Figure-P91_46809.jpg?sign=1739207948-KEcVAPFSrChlG1b7osszH5R3PzWTVHNa-0-de0eca1d3d18c06469b1d7037ed300f5)
![](https://epubservercos.yuewen.com/C3ED30/15289822304506406/epubprivate/OEBPS/Images/Figure-P92_46810.jpg?sign=1739207948-15ppF49J4oWkHdlTrtivPReHhqspuYj2-0-678fdf1f16f972d7f2588e96b1361965)
![](https://epubservercos.yuewen.com/C3ED30/15289822304506406/epubprivate/OEBPS/Images/Figure-P93_46811.jpg?sign=1739207948-dciSHQvDwD5C8oLl7axzPIj66buF1YvH-0-7bf4fc696fea9158df7988147d8774ef)
小结:本节主要介绍了如何通过psutil库获取常见的系统信息和进程信息,系统信息和进程相关的指标非常多,具体使用时我们只关心自己需要监控的指标即可,深入了解psutil模块请查阅psutil的官方文档。