当前位置: 首页 > news >正文

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时间

相关文章:

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

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

如何安装和配置Monit

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 关于 Monit Monit 是一个有用的程序,可以自动监控和管理服务器程序,以确保它们不仅保持在线,而且文…...

【redis】redis分片集群基础知识

1、基本概念 1.1定义 分片:数据按照某种规则(比如哈希)被分割成多个片段(或分片),每个片段被称为一个槽(slot)。槽是Redis分片集群中数据的基本单元。节点:Redis分片集…...

Python 面试【★★★★】

欢迎莅临我的博客 💝💝💝,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…...

Knife4j 2.2.X 版本 swagger彻底禁用

官方文档配置权限:https://doc.xiaominfo.com/v2/documentation/accessControl.html#_3-5-1-%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%E5%B1%8F%E8%94%BD%E8%B5%84%E6%BA%90 通常有时候我们碰到的问题如下: 在开发Knife4j功能时,同很多开发者经常讨论的问…...

linux下mysql的定时备份

备份是容灾的基础,是指为了防止系统出现操作或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其他的存储介质的过程为什么备份 硬件故障软件故障误操作病毒入侵保留历史记录灾难性事件 存储介质 光盘磁带硬盘磁盘阵列DAS:直接…...

【13】地址-比特币区块链的地址

1. 比特币区块链的地址 这就是一个真实的比特币地址:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa。这是史上第一个比特币地址,据说属于中本聪。 比特币地址是完全公开的,如果你想要给某个人发送币,只需要知道他的地址就可以了。实际上,所谓的地址,只不过是将公钥表示成人类可读…...

【数据结构】数据结构前置知识

这里写目录标题 基本概念与术语数据数据元素数据项数据对象数据结构 逻辑结构和物理结构物理结构顺序存储结构链式存储结构 逻辑结构集合结构线性结构树形结构图形结构 算法时间复杂度和空间复杂度大O的渐进表示法时间复杂度常数阶线性阶对数阶平方阶常见时间复杂度 空间复杂度…...

企业数据挖掘平台产品特色及合作案例介绍

泰迪企业数据挖掘平台是一款通用的、企业级、智能化的数据分析模型构建与数据应用场景设计工具,能够一体化地完成数据集成、模型构建、模型发布,为数据分析、探索、服务流程提供支撑,提供完整的数据探索、多数据源接入、特征处理、模型搭建、…...

C++初学者指南-3.自定义类型(第一部分)-基本自定义类型/类

C初学者指南-3.自定义类型(第一部分)-基本自定义类型/类 文章目录 C初学者指南-3.自定义类型(第一部分)-基本自定义类型/类1.类型种类(简化)2.为什么选择自定义类型?单向计数器提升序列 3.限制成员访问成员函数公共(public) vs. 私有(private…...

iOS之如何创建.framework静态库

番外:想要查看如何创建.a静态库可前往看我iOS之如何创建.a静态库-CSDN博客这篇文章。 一、创建framework项目 创建framework工程要选择iOS --> Cocoa Touch Framework输入项目名称PrintFramework也是编译生成的framework的名称。framework的名称也可以以后在项目…...

C程序设计谭浩强第五版

程序习题 第一章1、第5题2、第6题 第三章1、第2题2、第2题3、第3题4、第4题Tips 第一章 1、第5题 编写一个C程序,运行时输出以下图形: #include <stdio.h> int main() {for (int i 0; i < 4; i) // 输出4行循环控制{for (int j 0; j < i; j) //第几行就输出几…...

石油化工厂为什么要用专业防爆手机?

防爆手机之所以必须使用专业设计的产品&#xff0c;主要是出于安全考虑&#xff0c;以防止在易燃易爆环境中因手机使用不当引发爆炸事故。以下几点详细解释了使用专业化工防爆手机的必要性&#xff1a; 本质安全设计&#xff1a;顶坚专业防爆手机采用了本质安全&#xff08;本安…...

文本生成sql模型(PipableAI/pip-sql-1.3b)

安装环境 pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 pip install transformers 代码 question "What are the email address, town and county of the customers who are of the least common gender?"sc…...

机器学习中的数学底蕴与设计模式

在说机器学习设计模式之前&#xff0c;想多说几句&#xff0c;在进入软件行业最初的10年&#xff0c;那时候耳熟能详的基本就是多线程编程&#xff0c;互斥同步锁&#xff0c;设计模式&#xff0c;OOA&#xff0c;OOP&#xff0c;常规数组&#xff0c;tree&#xff0c;图的数据…...

【Android面试八股文】性能优化相关面试题:如何查找CPU占用?

文章目录 一、 如何查找CPU的占用问题二、TraceView的使用关于TraceView和Android Studio的Profiler第一步、通过Android studio 打开`Android profiler`第二步、使用步骤第三步、技术说明第四步、CPU占用相关指标说明扩展阅读一、 如何查找CPU的占用问题 在Android开发中,如…...

面试框架一些小结

springcloud的⼯作原理 springcloud由以下⼏个核⼼组件构成&#xff1a; Eureka&#xff1a;各个服务启动时&#xff0c;Eureka Client都会将服务注册到Eureka Server&#xff0c;并且Eureka Client还可以反过来从Eureka Server拉取注册表&#xff0c; 从⽽知道其他服务在哪⾥ …...

c# 往window注册表写入数据后,未写入指定的路径

c# 往window注册表写入数据后&#xff0c;未写入指定的路径 最近在用c#开发一个往注册表写入数据的一个项目&#xff0c;发现将输入写入 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CommandStore\shell这个路径时&#xff0c;数据并没写入到这个…...

树莓派4B_OpenCv学习笔记13:OpenCv颜色追踪_程序手动调试HSV色彩空间_检测圆

今日继续学习树莓派4B 4G&#xff1a;&#xff08;Raspberry Pi&#xff0c;简称RPi或RasPi&#xff09; 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1&#xff1a; OpenCv颜色追踪_程序手动调试HSV色彩空间_检测灰度图中的…...

Golang | Leetcode Golang题解之第198题打家劫舍

题目&#xff1a; 题解&#xff1a; func rob(nums []int) int {if len(nums) 0 {return 0}if len(nums) 1 {return nums[0]}first : nums[0]second : max(nums[0], nums[1])for i : 2; i < len(nums); i {first, second second, max(first nums[i], second)}return se…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端&#xff08;即页面 JS / Web UI&#xff09;与客户端&#xff08;C 后端&#xff09;的交互机制&#xff0c;是 Chromium 架构中非常核心的一环。下面我将按常见场景&#xff0c;从通道、流程、技术栈几个角度做一套完整的分析&#xff0c;特别适合你这种在分析和改…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...