Python自动化运维 系统基础信息模块

1.系统信息的收集

        系统信息的收集,对于服务质量的把控,服务的监控等来说是非常重要的组成部分,甚至是核心的基础支撑部分。我们可以通过大量的核心指标数据,结合对应的检测体系,快速的发现异常现象的苗头,进行可控的措施。

        我们的运维就像是医生,如果我们在诊断之前对病人的信息以及症状都不了解的话,如何对症下药。

基础信息之psutil模块

要在Linux中下载和安装psutil库,可以按照以下步骤进行操作:

  1. 打开终端。
  2. 使用以下命令安装pip(如果已经安装了pip,请跳过此步骤):
    • 对于Debian/Ubuntu系统:sudo apt-get install python3-pip
    • 对于CentOS/RHEL系统:sudo yum install python3-pip
  3. 使用以下命令安装psutil库:
    • 对于Python 2.x:sudo pip install psutil
    • 对于Python 3.x:sudo pip3 install psutil

现在,您已经成功在Linux中安装了psutil库。您可以在Python脚本中导入它并开始使用它。例如:

psutil是一个跨平台库,我们主要去用它来获取两部分信息

        进程信息:

        系统利用率 - cpu、内存、磁盘、网络等。

它实现了提供同等命令行的一些相关功能,比如:ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap (感兴趣的可以去百度一下这些命令的具体作用以及原理,学到就是赚到)

通常我们获取操作系统信息往往采用编写shell来实现,如获取当前物理内存总大小以及使用大小、shell命令如下

物理内存total值: free -m | grep  Mem | awk '{print $2}'

物理内存used值:free -m | grep  Mem | awk '{print $3}'

这样长长的一段shell  往往我们编写起来会很麻烦 容易出错  同时也不容易记忆

相较而言使用psutil库实现则更加简单明了

安装完成之后我们就可以在python文件中使用啦

 当然也可以在终端中去使用

 psutil模块已经封装了这些方法,根据需要调用就可以

(1) CPU信息

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

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

WaitIO,由于IO等待而使CPU处于idle(空闲)状态的时间百分比

idle,CPU处于idle状态的时间百分比

import psutil
psutil.cpu_times()  # 使用cpu_time方法获取cpu完整信息,需要现实所有逻辑CPU信息
# 指定方法变量 percpu=True即可,如psutil.cpu_times(percpu=True)
print(psutil.cpu_times())
psutil.cpu_times().user
print(psutil.cpu_times().user)
psutil.cpu_count()  # 获取CPU的逻辑个数,默认logical=True4
print(psutil.cpu_count())
psutil.cpu_count(logical=False)  # 获取CPU的物理个数
print(psutil.cpu_count(logical=False) )

我们使用Python的psutil.cpu_times()方法可以非常简单的得到这些信息,同时也可以获取CPU的硬件相关的信息,比如CPU的物理个数逻辑个数

( 2)内存信息

linux系统的内存利用率信息涉及total(内存总数)、used(已使用的内存数)、free(空闲的内存数)、buffers(缓冲使用数)、cache(缓存使用数)、swap(交换分区使用数),分别使用psutil.virtual_memory()psutil.swap_memory()方法获取这些信息

import psutil
mem = psutil.virtual_memory() # 使用psutil.virtual_memory方法获取内存完整信息
print(mem)

mem.total  # 获取内存总数
print(mem.total)
mem.free # 获取空闲内存数
print(mem.free)

psutil.swap_memory()  # 获取swap分区信息
print(psutil.swap_memory())

(3)磁盘信息 

在系统的所有磁盘信息中,磁盘刘勇率使用psutil.disk_usage方法获取。磁盘io信息包括read_count(读io数)、write_count(写io数)、read_bytes(io读字节数)、warite_bytes(IO写字节数)、read_time(磁盘读时间)、write_time(磁盘写时间)。这些io信息可以使用psutil.disk_io_counters()获取

import psutil
psutil.disk_partitions()  # 使用psutil.disk_partitions方法获取磁盘完整信息
print(psutil.disk_partitions())

psutil.disk_usage('/')   # 使用psutil.disk_usage方法获取分区参数的使用情况
print(psutil.disk_usage('/')) 

 (4)网络信息

系统的网络信息和磁盘IO信息类似,涉及到几个关键点,包括bytes_sent(发送字节数)、bytes_recv(接受字节数)、packets_sent=200987(发送数据包数)、packets_recv(接受数据包数)等。这些信息都可以使用psutil.net_io_counters()获取

import psutil
psutil.net_io_counters() # 使用psutil.net_io_counters()获取网络总的IO信息,默认pernic = False
print(psutil.net_io_counters())

psutil.net_io_counters(pernic = True) # 输出每个网络接口的IO信息
print(psutil.net_io_counters(pernic = True))

(5)其他系统信息

除了上面介绍的几个获取系统基本信息的方法,psutil模块还支持获取用户登录,开机时间等信息

import psutil,datetime
psutil.users()  # 使用psutil.users方法返回当前登录系统的用户信息
print(psutil.users())
psutil.boot_time()   # 获取开机时间,以linux时间戳格式返回
print(psutil.boot_time())
# 使用psutil.boot_time方式获取开机时间,以Linux时间戳格式返回
datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d%H:%M:%S")
print(datetime.datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d%H:%M:%S"))

2.系统进程管理方法

(1)进程信息

获得当前系统的进程信息,可以让运维人员得知应用程序的运行状态,包括进程的启动时间、查看或者设置CPU亲和度、内存使用率、IO信息、socket链接、线程数等、这些信息可以呈现出指定进程是否存活、资源利用情况、问题定位提供很好的数据参考

import psutil
psutil.pids()   # 列出所有进程
p = psutil.Process(2424)  # 实例化一个Process对象,参考为一进程PID
p.name('java') # 进程名
p.exe('/usr/bin/java') # 进程bin路径
p.cwd('/usr/local/hadoop-1') # 进程工作目录绝对路径
p.status('sleeping')   # 进程状态
p.create_time()
p.uids()  # 进程信息
p.gids()   # 进程gid信息 
p.cpu_times()  # 进程CPU时间信息,包括user、system两个cpu时间
p.cpu_affinity()  # get进程CPU亲和度,如要设置进程CPU亲和度,将CPU号作为参数即可
p.memory_percent()  # 进程内存利用率
p.memory_info()    # 进程内存rss、vms信息
p.io_counters()  # 进程io信息,包括读写io数及字节数
p.connections()   # 返回打开进程socket的namedutples列表,包括fs、family、ladder等信息
p.num_threads()   # 进程开启的线程数

(2)popen类的使用

psutil提供的popen类的作用是获取用户启动的应用程序的进程信息,以便跟踪进程的运行状态

import psutil
from subprocess import PIPE
# 通过psutil的Popen方法启动应用程序,可以根据该程序运行的所有相关信息
p = psutil.Popen(["/usr/bin/python","-c","print('hello')"],stdout = PIPE)
p.name()
p.username()
p.communicate()
p.cpu_times()   # 得到进程运行的CPU时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值