运维Python自动化之路:基础信息模块之psutil模块

简介: 运维Python自动化之路:基础信息模块之psutil模块

一、前言:


系统信息的收集,对于服务质量的把控、服务的监控等来说是非常重要的组成部分,甚至是核心的基础支持部分。

我们可以通过大量的核心指标数据,结合对应的检测体系,快速的发现异常现象苗头,进行可控的措施。


二、 psutil模块简介:


psutil是一个跨平台库,主要获取两部分信息:

进程信息和系统利用率(包括cpu、内存、磁盘、网络等)信息。主要应用于系统监控,分享和限制系统资源及进程的管理。

它实现等同命令行攻击提供的功能,常见等同命令如下:


进程相关:
    ps 、top、lsof、kill、nice、pidof、taskset
网络相关:
   netstat、ifconfig
用户相关:
who
磁盘相关:
 df
内存相关:
  free
io相关:
  ionice、iostat、iotop
运行时相关:
  uptime
终端相关:
   tty

1.信息获取的具体方式:


命令操作  |  grep  过滤关键字  | awk 筛选具体数据值  | 其他的数据处理


2.命令实践:获取网卡的ip地址


ifconfig方式:


640.png

ip address方式:


640.png

3.命令实践:获取所有网卡的ip地址


ifconfig方式:

640.png

ip address 方式:


640.png

4.命令实践:获取所有运行端口的信息--以TCP为例:


640.png

5.psutil模块安装:

640.png

6.模块使用:


在python解释器环境中


# 1.导包  import psutil#2.使用包功能  psutil.virtual_memory()

640.png

ipython方式

安装:


yum  install ipython* -ypip3  install ipython

640.png


三、cpu信息获取:目标:


通过psutil获取cpu相关信息


基础信息:

  • User Time:执行用户进程的时间百分比

  • System Time:执行内核进程和中断的时间百分比

  • Wait IO :由于IO等待而使CPU处于idle(空闲)状态的时间百分比
  • Idel :cpu处于idel状态的时间百分比



我们使用psutil.cpu_time()方法可以非常简单的获取这些信息。操作方法:


基本信息    cpu_times()注意:  我们可以为该方法添加percup=True获取逻辑cpu信息cpu核信息   cpu_count()注意:  我们可以为该方法添加logical=True获取逻辑cpu信息


简单实践:

1.获取cpu的总体信息:


cpu_info = psutil.cpu_times()print("cpu基本信息:{}".format(cpu_info))print("cpu基本信息格式:{}".format(type(cpu_info)))

640.png


2.获取cpu的部分信息


cpu_info= psutil.cpu_times()cpu_user = cpu_info.userprint("cpu的用户进程占比:{}".format(cpu_user))cpu_system=cpu_info.systemprint("cpu的系统进程占比:{}".format(cpu_system))cpu_iowait=cpu_info.iowaitprint("cpu的io等待占比:{}".format(cpu_iowait))


3.获取cpu核基本信息


cpu_count = psutil.cpu_count()print("cpu的核信息:{}".format(cpu_count))


640.png

4.获取cpu核逻辑信息


cpu_count = psutil.cpu_count(logical=True)print("cpu的核信息(包含逻辑):{}".format(cpu_count))


640.png

5.获取所有用户的cpu信息


print(psutil.users())

640.png


四、内存信息获取:

目标:

通过psutil获取内存相关信息数据


基本介绍:

640.png

 Linux系统的内存利用率信息涉及total(内存总数)、used(已使用的内存数)、free(空闲内存数)、buffers(缓冲使用数)、cache(缓存使用数)、swap(交换分区使用数)等

使用方法:


获取内存基本信息  psutil.virtual_memory()获取交换内存基本信息  psutil.swap_memory()


简单实践:1.获取全部内存信息


mem_info = psutil.virtual_memory()print("内存的基本信息:{}".format(mem_info))

640.png


2.获取部分内存信息


mem_total = mem_info.totalprint("内存的总量:{}".format(mem_total))mem_used = mem_info.usedprint("内存的总量:{}".format(mem_used))mem_free = mem_info.freeprint("内存的总量:{}".format(mem_free))mem_buffers = mem_info.buffersprint("内存的总量:{}".format(mem_buffers))


3.获取交换内存分区的详细信息

640.png

mem_swap = psutil.swap_memory()print("内存的交换信息:{}".format(mem_swap))


4.获取交换内存分区的部分信息


swap_total = mem_swap.totalprint("交换内存总量:{}".format(swap_total))

640.png

五、磁盘信息:目标:通过 psutil获取磁盘相关信息数据基本信息:


640.png

640.png


在系统的所有磁盘信息中,我们更加关注磁盘的利用率及IO信息,其中磁盘利用率使用psutil.disk_usage方法获取。基本使用:


磁盘的分区信息获取:  disk_partitions磁盘的挂载点信息获取  disk_usage('挂载点')磁盘io相关操作信息  disk_io_counters() 可以通过perdisk = True 获取具体的分区详情


简单实践:

1.获取磁盘分区的详情信息


disk_info = psutil.disk_partitions()print("所有的分区详情:{}".format(disk_info))

640.png


2.获取磁盘分区的挂载点基本信息


disk_root = psutil.disk_usage('/')print("根分区详情:{}".format(disk_root))


640.png

3.获取磁盘分区的部分信息


root_total = disk_root.totalprint("根分区挂载容量详情:{}".format(root_total))


640.png

4.获取io基本信息


disk_count = psutil.disk_io_counters()print("分区io信息:{}".format(disk_count))


640.png


5.获取io部分信息


disk_writer_count = disk_count.write_countprint("分区io写数量信息:{}".format(disk_writer_count))

640.png


6.获取每个分区io的详情信息


disk_per = psutil.disk_io_counters(perdisk=True)print("每个分区的io信息:{}".format(disk_per))

640.png

六、网络信息:目标:通过 psutil获取网络相关信息数据基本信息:

640.png

系统的网络信息与IO类似,涉及几个关键点,包括bytes_sent(发送字节数)、bytes_rev=28220199(接收字节数)、packets_sent=200978(发送数据包数)、packets_recv=212672(介绍数据包数)等


使用方式:


获取网络的数据传输信息  net_io_counters()


简单实践:

1.获取网络的详情信息


network_info = psutil.net_io_counters()print("网卡的数据传输信息:{}".format(network_info))

640.png


2.获取部分信息


network_recv = network_info.bytes_recvprint("网卡的接收数据信息: {}".format(network_recv))network_sent = network_info.bytes_sentprint("网卡的发送数据信息:{}".format(network_sent))network_packet_sent = network_info.packets_sentprint("网卡的发送数据包信息:{}".format(network_packet_sent))

640.png

3.获取网络的其他信息


network_addrs = psutil.net_if_addrs()print("网卡的地址信息:{}".format(network_addrs))network_stats = psutil.net_if_stats()print("网卡的状态信息:{}".format(network_stats))network_conn = psutil.net_connections()print("网卡的连接信息:{}".format(network_conn))

640.png


七、其他信息:目标:

通过 putil获取其他相关信息数据基本语法:


获取连接的用户信息  users()获取启动时间  boot_time()

1.获取有连接的用户信息


user_info = psutil.users()print("连接的用户信息:{}".format(user_info))

640.png

2.获取启动时间


import datetimedate_time = psutil.boot_time()print("系统启动的时间信息:{}".format(date_time))
#转换时间格式(时间戳定位)date_time_format = datetime.datetime.fromtimestamp(date_time).strftime("%Y-%m-%d  %H:%M:%S")print("转化格式后的时间信息:{}".format(date_time_format))这类用的格式等同于命令:date  +%Y-%m-%d%H:%M:%S

640.png


八、进程信息:目标:通过 psutil获取系统进程相关的信息数据基本语法:


获取进程相关的信息    pids()获取指定进程的相关信息    process()获取进程信息的常见方法    name()/exe()/cwd(),status(),create_time(),    uids(),gids(),cpu_times(),cpu_affinity(),    memory_percent(),memory_info(),io_counters(),    connections*()


简单实践:

1.获取进程所有相关信息


process_id_list = psutil.pids()print("当前所有系统运行的进程号:{}".format(process_id_list))

640.png

2.判断指定进程id是否存在


pid_num = 658result = psutil.pid_exists(pid_num)print("{} 进程是否是运行状态:{}".format(pid_num,result))


640.png

3.获取指定进程相关信息


pid_info = psutil.Process(pid_num)print("{} 进程是否是运行状态:{}".format(pid_num,pid_info))


640.png

4.传统方式获取指定进程的属性信息


pid_info = psutil.Process(pid_num)print("{} 进程是否是运行状态:{}".format(pid_num,pid_info.name)) 注意:  进程的属性信息,需要借助于专用的方法来进行获取,通用的属性不管用

640.png

5.进程详情信息获取


pid_info = psutil.Process(pid_num)print("{} 进程的名称是:{}".format(pid_num,pid_info.name()))pid_info = psutil.Process(pid_num)print("{} 进程的执行命令路径:{}".format(pid_num,pid_info.exe()))pid_info = psutil.Process(pid_num)print("{} 进程的工作目录:{}".format(pid_num,pid_info.cwd()))pid_info = psutil.Process(pid_num)print("{} 进程的状态是:{}".format(pid_num,pid_info.status()))

640.png

九、popen类:


目标:通过 psutil获取用户启动的应用进程相关的信息数据


基本语法:


基本语法:  psutil.Popen('执行命令','参数','内容'],stdout=信息接收器)属性解析:exec模式:['执行命令','参数','内容']shell模式:执行命令  参数  内容


简单实践:

#导包
   import psutil
   from subprocess import PIPE
#指定用户执行程序
#1.1创建用户程序
   my_process = psutil.Popen(['/usr/bin/python3','-c','print("hello world")'], stdout = PIPE)
#1.2 用户程序的信息获取
  print("用户进程的名称:{}".format(my_process.name()))
  print("用户进程的启动用户:{}".format(my_process.username()))
  print("用户进程的输出信息:{}".format(my_process.communicate()))

640.png


相关文章
|
7天前
|
测试技术 Python
手动解决Python模块和包依赖冲突的具体步骤是什么?
需要注意的是,手动解决依赖冲突可能需要一定的时间和经验,并且需要谨慎操作,避免引入新的问题。在实际操作中,还可以结合使用其他方法,如虚拟环境等,来更好地管理和解决依赖冲突😉。
|
18天前
|
Python
在Python中,可以使用内置的`re`模块来处理正则表达式
在Python中,可以使用内置的`re`模块来处理正则表达式
40 5
|
19天前
|
运维 监控 Python
自动化运维:使用Python脚本简化日常任务
【10月更文挑战第36天】在数字化时代,运维工作的效率和准确性成为企业竞争力的关键。本文将介绍如何通过编写Python脚本来自动化日常的运维任务,不仅提高工作效率,还能降低人为错误的风险。从基础的文件操作到进阶的网络管理,我们将一步步展示Python在自动化运维中的应用,并分享实用的代码示例,帮助读者快速掌握自动化运维的核心技能。
34 3
|
25天前
|
运维 监控 应用服务中间件
自动化运维:如何利用Python脚本提升工作效率
【10月更文挑战第30天】在快节奏的IT行业中,自动化运维已成为提升工作效率和减少人为错误的关键技术。本文将介绍如何使用Python编写简单的自动化脚本,以实现日常运维任务的自动化。通过实际案例,我们将展示如何用Python脚本简化服务器管理、批量配置更新以及监控系统性能等任务。文章不仅提供代码示例,还将深入探讨自动化运维背后的理念,帮助读者理解并应用这一技术来优化他们的工作流程。
|
26天前
|
运维 监控 Linux
自动化运维:如何利用Python脚本优化日常任务##
【10月更文挑战第29天】在现代IT运维中,自动化已成为提升效率、减少人为错误的关键技术。本文将介绍如何通过Python脚本来简化和自动化日常的运维任务,从而让运维人员能够专注于更高层次的工作。从备份管理到系统监控,再到日志分析,我们将一步步展示如何编写实用的Python脚本来处理这些任务。 ##
|
28天前
|
存储 数据采集 数据库
用 Python 爬取淘宝商品价格信息时需要注意什么?
使用 Python 爬取淘宝商品价格信息时,需注意法律和道德规范,遵守法律法规和平台规定,避免非法用途。技术上,可选择 Selenium 和 Requests 库,处理反爬措施如 IP 限制、验证码识别和请求频率控制。解析页面数据时,确定数据位置并清洗格式。数据存储可选择 CSV、Excel、JSON 或数据库,定期更新并去重。还需进行错误处理和日志记录,确保爬虫稳定运行。
|
28天前
|
Java 程序员 开发者
Python的gc模块
Python的gc模块
|
28天前
|
数据采集 Web App开发 iOS开发
如何利用 Python 的爬虫技术获取淘宝天猫商品的价格信息?
本文介绍了使用 Python 爬虫技术获取淘宝天猫商品价格信息的两种方法。方法一使用 Selenium 模拟浏览器操作,通过定位页面元素获取价格;方法二使用 Requests 和正则表达式直接请求页面内容并提取价格。每种方法都有详细步骤和代码示例,但需注意反爬措施和法律法规。
|
1月前
|
Python
SciPy 教程 之 SciPy 模块列表 16
SciPy教程之SciPy模块列表16 - 单位类型。常量模块包含多种单位,如公制、质量、角度、时间、长度、压强、体积、速度、温度、能量、功率和力学单位。示例代码展示了力学单位的使用,如牛顿、磅力和千克力等。
18 0
|
2月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
58 4