第二章 python系统监控

用Python来编写脚本简化日常的运维工作是Python的一个重要用途。在Linux下,有许多系统命令可以让我们时刻监控系统运行的状态,如ps,top,free等等。要获取这些系统信息,Python可以通过subprocess模块调用并获取结果。但这样做显得很麻烦,尤其是要写很多解析代码。

在Python中获取系统信息的另一个好办法是使用psutil这个第三方 模块。顾名思义,psutil = process and system utilities,它不仅可以通过一两行代码实现系统监控,还可以跨平台使用,支持Linux/UNIX/OSX/Windows等,是系统管理员和运维小伙伴不可或缺的必备模块。

安装方法如下:

pip3 install psutil

如果生产环境没有联网则可以先在外网使用pip下载,再移动至生产环境安装。为了方便显示语句运行结果,下面使用IPython解释器。在此啰嗦一下,IPython是学习Python的利器,是让Python显得友好十倍的外套,强烈建议读者使用IPython, 可通过以下命令安装IPython

 pip3 install ipython。

下面一一列举使用方法。

2.1 获取CPU信息

2.1.1 获取CPU个数

在我自己的系统里面,cpu的个数是1.我们写命令之前,先启动python:

python3

>>> import psutil
>>> psutil.cpu_count()
1
>>> psutil.cpu_count(logical=False)
1

2.1.2 统计CPU的用户/系统/空闲时间

psutil.cpu_times()
scputimes(user=221.47, nice=0.0, system=65.89, idle=3585.53, iowait=11.51, irq=0.0, softirq=1.61, steal=0.0, guest=0.0, guest_nice=0.0)
>>> psutil.cpu_times(percpu=True)
[scputimes(user=221.47, nice=0.0, system=65.93, idle=3629.96, iowait=11.51, irq=0.0, softirq=1.61, steal=0.0, guest=0.0, guest_nice=0.0)]

2.1.3 获取CPU占用率

>>> psutil.cpu_percent(percpu=True)
[0.1]
>>> psutil.cpu_percent()
0.1

实例:

import psutil
for x in range(10):s=psutil.cpu_percent(interval=1)print("当前cput占比为:",s)

2.2 监控内存信息

2.2.1 查看物理内存

>>> psutil.virtual_memory()
svmem(total=8278306816, available=954941440, percent=88.5, used=7323365376, free=954941440)

2.2.2 查看交换内存

>>> psutil.swap_memory()
sswap(total=20787396608, used=17976201216, free=2811195392, percent=86.5, sin=0, sout=0)

实例:

>>> mem = psutil.virtual_memory()
>>> mem.total
8278306816
>>> mem.used
7043653632
>>> mem.free
1234653184
>>> type(mem.free)
<class 'int'>
>>> if mem.used/mem.total >0.8 :print("内存占用过高!")
else:print("内存占比正常。")

思考:内存的利用率应该怎样计算?

2.3 监控磁盘信息

2.3.1 查看磁盘分区

>>> psutil.disk_partitions()
[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='exFAT', opts='rw,fixed')]

2.3.2 磁盘利用率

磁盘利用率 要在参数上指定路径:

>>> psutil.disk_usage('C:\\')
sdiskusage(total=107374178304, used=62052282368, free=45321895936, percent=57.8)
>>> psutil.disk_usage('D:\\')
sdiskusage(total=403391377408, used=8059502592, free=395331874816, percent=2.0)

2.3.3 磁盘IO数

查看总IO数:

>>> psutil.disk_io_counters()
sdiskio(read_count=12433626, write_count=19244946, read_bytes=606192376832, write_bytes=564326417920, read_time=5281, write_time=4576)
>>> psutil.disk_io_counters().read_count
12441178

查看每个磁盘IO数:

>>> psutil.disk_io_counters(perdisk=True)
{'PhysicalDrive0': sdiskio(read_count=12432860, write_count=19245033, read_bytes=606186330112, write_bytes=564327729664, read_time=5216, write_time=4576), 'PhysicalDrive1': sdiskio(read_count=797, write_count=28, read_bytes=6743040, write_bytes=638976, read_time=65, write_time=0)}>>> s=psutil.disk_io_counters(perdisk=True)
>>> s['PhysicalDrive0']
sdiskio(read_count=12440387, write_count=19248016, read_bytes=606235895808, write_bytes=564359970816, read_time=5216, write_time=4578)
>>> s['PhysicalDrive0'].read_count
12440387

2.4 监控网络信息

2.4.1 获得本机IP

>>> import socket
>>> hostname = socket.gethostname()
>>> hostname
'LAPTOP-28C3GCM7'
>>> socket.gethostbyname(hostname)
'192.168.1.104'

2.4.2 获取网络读写字节个数

psutil.net_io_counters()#获取网络读写字节的个数
snetio(bytes_sent=8445215479, bytes_recv=7761730094, packets_sent=5203357, packets_recv=10378093, errin=0, errout=0, dropin=0, dropout=0)

思考:从中能获得什么信息 ?

2.4.3 获取网络接口信息

>>> psutil.net_if_addrs()
{'本地连接* 1': [snicaddr(family=<AddressFamily.AF_LINK: -1>, address='E8-6F-38-26-0F-C9', netmask=None, broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_INET: 2>, address='169.254.77.128', netmask='255.255.0.0', broadcast=None, ptp=None), snicaddr(family=<AddressFamily.AF_INET6: 23>, address='fe80::f05e:828a:d017:4d80', netmask=None, broadcast=None, ptp=None)],

2.4.4 获取网络接口状态

>>> psutil.net_if_stats()
{'蓝牙网络连接': snicstats(isup=False, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=3, mtu=1500), '以太网': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=100, mtu=1500), 'Loopback Pseudo-Interface 1': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=1073, mtu=1500), 'WLAN': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=300, mtu=1500), '本地连接* 1': snicstats(isup=False, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=0, mtu=1500), '本地连接* 2': snicstats(isup=False, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=0, mtu=1500)}
>>> s=psutil.net_if_stats()
>>> s['以太网'].isup
True

思考:编写程序,查看本机哪个网络接口是开启的 ?

2.4.5 获取当前网络连接信息

psutil.net_connections()
Out[14]:
[sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_STREAM: 1>, laddr=addr(ip='127.0.0.1', port=10000), raddr=(), status='LISTEN', pid=9532),sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_STREAM: 1>, laddr=addr(ip='192.168.1.104', port=58020), raddr=addr(ip='206.189.32.61', port=443), status='ESTABLISHED', pid=10916),sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_STREAM: 1>, laddr=addr(ip='192.168.1.104', port=50557), raddr=addr(ip='40.90.189.152', port=443), status='ESTABLISHED', pid=4676),sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketKind.SOCK_STREAM: 1>, laddr=addr(ip='127.0.0.1', port=52856), raddr=addr(ip='127.0.0.1', port=52857), status='ESTABLISHED', pid=9228),sconn(fd=-1, family=<AddressFamily.AF_INET6: 23>, type=<SocketKind.SOCK_DGRAM: 2>, laddr=addr(ip='::', port=5353), raddr=(), status='NONE', pid=2324),
。。。

2.5 应用:用python编写系统运行报告

import psutil
print("CPU的个数:",psutil.cpu_count())
print("CPU的物理总数是:",psutil.cpu_count(logical=False))
print("CPU的空闲时间是:",psutil.cpu_times())
print("CPU的全系统空闲时间是:",psutil.cpu_times(percpu=True))
print("CPU的占用率是:",psutil.cpu_percent())
print("CPU的所有占用率是:",psutil.cpu_percent(percpu=True))
for x in range(10):s=psutil.cpu_percent(interval=1)print("当前cput占比为:",s)
print("物理内存是:",psutil.virtual_memory())
print("交换内存是:",psutil.swap_memory())
print("查看磁盘分区:",psutil.disk_partitions())
print("查看磁盘利用率:",psutil.disk_usage('c:\\'))
print("查看磁盘io总数:",psutil.disk_io_counters())
print(psutil.disk_io_counters().read_count)
print("查看每个磁盘的io数",psutil.disk_io_counters(perdisk=True))#获取本机ip
import socket
hostname = socket.gethostname()
print("你的主机名是",hostname)
print("你的主机ip是",socket.gethostbyname(hostname))
print("网络独写字节个数",psutil.net_io_counters())
print("网络接口信息",psutil.net_if_addrs())
print("网络接口状态",psutil.net_if_stats())

第二章 python系统监控相关推荐

  1. 【python第一章 基础捋顺,第二章 python基础语法】

    第一章 基础捋顺,第二章 python基础语法 第一章 基础捋顺 第二章 python基础语法 2.1输入输出 2.2代码注释 2.3代码缩进 2.4命名规范 2.5变量 2.6基本数据类型 2.7数 ...

  2. 【项目开发实战】第二章——在线商城系统

    系列文章目录 第一章--AI人机对战版五子棋游戏 第二章--在线商城系统 文章目录 系列文章目录 前言 1.项目介绍 2.项目规划分析 2.1 电子商务的简要介绍 2.2 在线博客+商城系统构成模块 ...

  3. Python面试宝典(第二章 Python基础)

    Python面试宝典(第二章 Python基础) Python面试宝典(第二章 Python基础) 基础语法 输入输出 问题:代码中要修改不可变数据会出现什么问题? 抛出什么异常? 问题:a=1,b= ...

  4. python语言中、用来表示赋值的符号是_第二章Python语言基础知识

    第二章Python语言基础知识 2.1 Python语言基础知识 2.1.1标识符与关键字 在Python语言中,对程序中各个元素命名加以区分,这种用来标识变量.函数.类等元素的符号称为标识符. Py ...

  5. 2的10次方-1的python表达式_第二章PythonⅠ的基本语法,python,I

    第二章 python基本语法 I 整数 交换两个变量的值 num1 = 10 num2 = 15 ##常规蛇形变换 tmp = num1 num1 = num2 num2 = tmp ##python ...

  6. 信号与系统_第二章 连续系统的时域分析

    第二章 连续系统的时域分析 ( 连续系统在时域上进行分析 ) 2.1 引言 2.2 LTI系统的微分方程表示及响应 2.3 零输入响应与零状态响应 2.4 单位冲激响应 2.5 卷积积分 2.6 卷积 ...

  7. 传感器检测技术及仪表笔记02第二章 检测系统的基本特性

    第二章 检测系统的基本特性 2.1 传感器的基本特征 2.1.1常用概念 测量范围 上下限 量程 满量程输出 2.2传感器的静态特性 ==线性度== ==灵敏度== ==分辨率==(分辨力) ==阈值 ...

  8. 第二章 机器人系统与控制需求简介

    第二章 机器人系统与控制需求简介 2.1 工业机器人的系统组成 机械本体:精密减速机.伺服电机.伺服驱动器.控制系统(核心零部件) 控制柜 示教盒 2.2 机器人本体结构与传动方式简介 四大家族:AB ...

  9. python系统监控_使用Python监控Linux系统

    阅读目录 一.Python编写的监控工具 一.多功能系统资源统计工具dstat 1.dstat介绍 dstat是一个用Python语言实现的多功能系统资源统计工具,用来取代Linux下的vmstat. ...

最新文章

  1. 之江汇空间如何加音乐背景_从脚本到成品,教你如何快速制作出创意又浪漫的婚礼视频...
  2. 知乎进化:对抗内容“熵增”胜算几何?
  3. 巴菲特:人生赢家,都是稳中求生,稳中求胜
  4. mysql io_MySQL服务器 IO 100%的分析与优化方案
  5. java线程池参数含义
  6. iOS开发ARC入门和使用
  7. 手把手带你入门Python爬虫(四、ORM与peewee)
  8. 设计模式18_责任链
  9. 201421123042 《Java程序设计》第14周学习总结
  10. AI独角兽商汤科技的内部服务容器化历程
  11. 使用srvany.exe把程序安装成windows服务的方法
  12. C4D模型工具—恢复平滑着色(Phong)
  13. xp系统搭建iscsi服务器,配置Microsoft Windows XP对MDS/IPS-8的iSCSI主机
  14. 【MicroPython ESP32】超低功耗协处理器(ULP):睡眠模式示例详解
  15. php excel加密,excel工作表加密怎么设置?
  16. reset master和reset slave解析
  17. 计算机网络(自顶向下)笔记
  18. H263,H264简介
  19. opencv图像处理之图像平移
  20. 【翻新重写】WWDC 后苹果最新 App Store 审核条款!「内附最新开发者指南」

热门文章

  1. android模拟器32位下载,【天天安卓模拟器和Internet Explorer 10(32位)哪个好用】天天安卓模拟器和Internet Explorer 10(32位)对比-ZOL下载...
  2. 转载了一个斗图深神器的爬虫
  3. gRPC android 监听server报错ProviderNotFoundException: No functional server found. Try adding a dependen
  4. 【Unity 3D】VR飞机起飞喷火游戏案例实战(附源码和演示视频 超详细)
  5. Linux内核学习:EXT4文件JBD日志系统(Journaling Block Device)
  6. vue中使用数据可视化
  7. 1、使用colorui制作小程序滚动广告栏
  8. 杭州预约挂号辅助软件 源代码开源
  9. 实验:MBR扇区故障
  10. 机器学习硬件设施差?免费使用谷歌的GPU云计算平台