当前位置: 首页 > 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…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

Vite中定义@软链接

在webpack中可以直接通过符号表示src路径&#xff0c;但是vite中默认不可以。 如何实现&#xff1a; vite中提供了resolve.alias&#xff1a;通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...

Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合

作者&#xff1a;来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布&#xff0c;Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明&#xff0c;Elastic 作为 …...

云原生安全实战:API网关Envoy的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口&#xff0c;负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...

stm32进入Infinite_Loop原因(因为有系统中断函数未自定义实现)

这是系统中断服务程序的默认处理汇编函数&#xff0c;如果我们没有定义实现某个中断函数&#xff0c;那么当stm32产生了该中断时&#xff0c;就会默认跑这里来了&#xff0c;所以我们打开了什么中断&#xff0c;一定要记得实现对应的系统中断函数&#xff0c;否则会进来一直循环…...