监控Linux系统,Python已就位!

用 Python 脚本实现对 Linux 服务器的监控  目前 Linux 下有一些使用 Python 语言编写的 Linux 系统监控工具 比如 inotify-sync(文件系统安全监控软件)、glances(资源监控工具)在实际工作中,Linux 系统管理员可以根据自己使用的服务器的具体情况编写一下简单实用的脚本实现对 Linux 服务器的监控。 本文介绍一下使用 Python 脚本实现对 Linux 服务器 CPU 内存 网络的监控脚本的 阅读详情

Python的基础是非常重要的。基础是处理一切问题的基石。

 

-1-

负载情况

 

如果查看Linux操作系统的负载情况,我们用Python实现的原理是通过查看文件`/proc/loadavg` 的内容去实现。

 

我们先来看看这个文件的内容是什么:

 

$cat /proc/loadavg0.00 0.01 0.05 1/187 11193

 

具体代码实现如下:

 

​​​​​​​

#!/usr/bin/env python3loadavg = {}def load_stat():    f = open("/proc/loadavg")    con = f.read().split()    f.close()    loadavg['lavg_1']=con[0]  # 1分钟负载    loadavg['lavg_5']=con[1]  # 5分钟负载    loadavg['lavg_15']=con[2] #15分钟负载    return loadavgload_stat()print(loadavg)#输出load1的值print("load1:"+loadavg["lavg_1"])

 

解题思路:

 

 为了能够读取 `/proc/loadavg`  里的文件,我们可以定义一个函数 load_stat()函数 用来打开文件和关闭。然后读取里面的文件存到一个数据结构里,当然数据结构你可以采用List,也可以采用Dict,笔者用Dict去存放这些内容。

 

​​​​​​​

#!/usr/bin/env python3f = open("/proc/loadavg")con = f.read()#con = f.read().split()  # 调试代码print(con)f.close()

 

我们使用split函数用于对字符串数据进行切片然后放到一个列表里面去。最后我们把列表对应的索引的值又存放到一个新的字典里去。如果要存放在字典。所以我们必须在开头定义好一个空的字典结构。

最后执行的结果如下:

 

$ python3 load.py {'lavg_1': '0.00', 'lavg_5': '0.01', 'lavg_15': '0.05'}load1:0.00

 

最后我们输出的是一个字典,那么我们要取负载情况就方便多了

 

-2-

内存使用情况

 

计算内存的利用率原理是需要读取的是/proc/meminfo文件,该文件的结构比较清晰,不需要额外的介绍,需要知道的是内存的使用总量为used = total - free - buffers - cached。

with open("/proc/meminfo") as meminfo:    for i in meminfo:        if i.startswith("MemTotal"):            total_mem = i.split()            # print(total_mem)            total_mem = total_mem[1]            continue        elif i.startswith("MemAvailable"):            free_mem = i.split()            free_mem = free_mem[1]            continue        elif i.startswith("Buffers"):            buff_mem = i.split()            buff_mem= buff_mem[1]        elif i.startswith("Cached"):            cache_mem = i.split()            cache_mem = cache_mem[1]            break        else:            passprint("total_mem:"+total_mem)、# 输出可用内存# print("free_mem:"+free_mem)# 输出buffer内存# print("buff_mem:"+buff_mem)# print("cache_mem"+cache_mem)# print(type(free_mem))# used_mem = total_mem-free_mem-buff_mem-cache_memused_mem = float(total_mem)-float(free_mem)-float(buff_mem)-float(cache_mem)print(used_mem)# 使用内存print(used_mem)#计算内存使用率res = used_mem/float(total_mem)# 输出内存使用率值print(res)

 

思路解析:

 

上面的代码首先是去打开 文件`/proc/meminfo`,然后使用for循环遍历文件里的内容。使用的是字符串的`startswith` 方法。得到的内容使用字符串的`split` 方法切割形成一个列表。

 

Python startswith() 方法用于检查字符串是否是以指定子字符串开头,如果是则返回 True,否则返回 False。如果参数 beg 和 end 指定值,则在指定范围内检查。

 

其中的列表内容如下:

 

 

['MemTotal:', '1863224', 'kB']

 

从列表内容来看,索引为1的值1863224,就是MemTotal(总内存的数值)。

 

然后一系列的多条件的if else 语句来分别得到,total_mem,buff_mem,free_mem,cache_mem的值并赋值给变量。当把所有的值取到之后使用break 语句退出循环。

 

代码`used_mem = float(total_mem)-float(free_mem)-float(buff_mem)-float(cache_mem)`,因为我们得到的total_mem 等内存是字符串没办法进行数学运算,所以需要转成浮点数进行数学运算。

 

最后使用除法`res = used_mem/float(total_mem)` 来计算内存使用率。

 

-3-

获取网卡信息

为了能获取网卡的流量我们使用 `psutil`  会更加方便,官方文档:https://psutil.readthedocs.io/en/latest

 

psutil是个跨平台库,能够轻松实现获取系统运行的进程和系统利用率,包括CPU、内存、磁盘、网络等信息。之前的查看Linux系统的负载和内存使用情况实现都可以用`psutil`   库去实现。

#获取网卡eth0的IP地址>>> psutil.net_if_addrs()['eth0'][0].address'192.168.137.16'#子网掩码>>> psutil.net_if_addrs()['eth0'][0].netmask'255.255.255.0'#查看网卡是否开启>>> psutil.net_if_stats()['eth0'].isupTrue#查看网卡的速率,命令有ifconfig,ethtool>>> psutil.net_if_stats()['eth0'].speed #单位 Mb/s

 

-4-

CPU使用情况

 

查看cpu的使用情况我们使用`psutil` 更加方便。

#!/usr/bin/env python3# @Author : knightimport psutil#检测cpu的使用率#psutil获取系统cpu使用率的方法是cpu_percent(),其有两个参数,分别是interval和percpu,interval指定的是计算cpu使用率的时间间隔,percpu则指定是选择总的使用率还是每个cpu的使用率print(psutil.cpu_percent(interval=20,percpu=False))#查看物理cpu的个数print(psutil.cpu_count(logical=False))#查看cpu的总使用情况print(psutil.cpu_times_percent())# #每个cpu的使用情况print(psutil.cpu_times_percent(percpu=True))#cpu的使用率psutil.cpu_percent() ```我们执行上面的脚本,执行结果如下:```$python3  test.py 2.84scputimes(user=1.0, nice=0.0, system=1.8, idle=97.2, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)[scputimes(user=0.0, nice=0.0, system=1.0, idle=98.0, iowait=1.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0), scputimes(user=1.0, nice=0.0, system=2.0, idle=97.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0), scputimes(user=0.0, nice=0.0, system=2.0, idle=97.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0), scputimes(user=0.0, nice=0.0, system=2.0, idle=97.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0), scputimes(user=2.0, nice=0.0, system=1.0, idle=97.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0), scputimes(user=0.0, nice=0.0, system=2.0, idle=98.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0), scputimes(user=1.0, nice=0.0, system=1.0, idle=98.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0), scputimes(user=3.0, nice=0.0, system=3.0, idle=93.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)]

 

以上的代码能正常的去获取cpu的负载情况,cpu状态和信息,内存信息,网络信息和流量等。

 

(1)我们再拓展一下使用`psutil` 库去实现 之前的cpu是使用情况。具体的实现如下:

 

使用psutil获取物理内存和交换内存信息,分别使用:

 

  •  
  •  
  •  
  •  
>>> psutil.virtual_memory()svmem(total=8589934592, available=2866520064, percent=66.6, used=7201386496, free=216178688, active=3342192640, inactive=2650341376, wired=1208852480)>>> psutil.swap_memory()sswap(total=1073741824, used=150732800, free=923009024, percent=14.0, sin=10705981440, sout=40353792)

 

返回的是字节为单位的整数,可以看到,总内存大小是8589934592 = 8 GB,已用7201386496 = 6.7 GB,使用了66.6%。而交换区大小是1073741824 = 1 GB

 

(2)我们要获取系统的负载情况,我们还可以使用os模块去实现具体代码如下, 下面的代码我们是通过ipython进行交互的,在linux命令行交互式调试过程中。具体的Ipython的安装方法为`pip3 install ipython`。

 

  •  
  •  
  •  
In [12]: import os                                                                                                                                                 In [13]: os.getloadavg()                                                                                                                                           Out[13]: (0.09, 0.27, 0.29)
基于Python的Linux服务器监控系统实现与实战 服务器监控是保障系统稳定运行的核心手段,通过实时采集CPU、内存、磁盘、网络等资源使用数据,帮助运维人员及时发现潜在问题。Python凭借其简洁的语法、丰富的标准库和第三方库(如psutil),成为实现服务器监控的理想语言。它不仅支持跨平台运行,还具备良好的可扩展性与集成能力。本章将引导读者理解监控系统的基本组成模块,包括数据采集、分析、展示与告警机制,并介绍其在实际运维场景中的典型应用。 阅读详情

相关推荐

大模型推理常见采样策略:Top-k, Top-p, Temperature, Beam Search

大模型推理采样策略,举例通俗易懂汇总介绍

qq_43243579的博客 2万+

2023-2024-1 20232825《Linux内核原理与分析》第十三周作业

系统中的任何一个进程,在 proc 的子目录中都有一个同名的进程 ID,可以找到 cmdline、mem、root、stat、statm 以及 status。每一个单独含有现有进程信息的进程有一些可用的专门链接,系统中的任何一个进程都有一个单独的自链接指向进程信息,其用处就是从进程中获取命令行信息。Linux 系统任何时候都运行在一个指定的运行级上,并且不同的运行级的程序和服务都不同,所要完成的工作和要达到的目的都不同,系统可以在这些运行级之间进行切换,以完成不同的工作。与其他文件系统不同,

a674871089的博客 1034

将一维数据(序列)转化为二维数据(图像)的方法汇总GAFS, MTF, Recurrence plot,STFT

虽然深度学习方法(1D CNN, RNN, LSTM 等)可以直接处理一维数据,但是当前的深度学习方法主要还是处理二维结构数据的,特别是在计算机视觉CV以及自然语言处理NLP领域,各种各样的方法层出不穷。因此,如果能够将一维序列数据转化为二维(图像)数据, 则可以直接结合CV以及NLP领域的方法,是不是很有趣! GAF, GASF, GADF, MTF, Recurrence Plot, STFT, 短时傅里叶变换

MasterQKK 5万+

使用Python监控Linux系统

使用Python监控Linux系统 Linux下有许多使用Python语言编写的监控工具,如inotify-sync、dstat和glances。此外,如果要根据业务编写简单的监控脚本,很多工程师也会选择Python语言。Python语言是一门简单易学/语法清晰/表达能力强的编程语言,非常适合于编写监控程序的场景。使用Python语言编写监控程序具有以下几个优势: 1、Python语言开发效率高。Python语言有自己的优势与劣势,使用Python开发监控程序是一个充分发挥Python优势,避免Python

weixin_45636702的博客 2406

别再只盯着Text-VQA了!这4个主流VQA数据集(含中英双语)的保姆级下载与对比指南

本文深入解析了Text-VQA、ST-VQA、OCR-VQA和EST-VQA这4个主流视觉问答数据集的特性与应用场景,提供了详细的下载与预处理指南。通过对比分析,帮助开发者根据项目需求选择最适合的数据集,避免因选型不当导致的模型性能问题,特别适合需要处理中英双语或多模态文本理解的AI项目。

weixin_42524708的博客 362

告别配置烦恼!保姆级教程:在Windows 10/11上为QT5.14.2配置MSVC2017编译器(附VS2022组件避坑指南)

本文提供了一份详细的保姆级教程,指导如何在Windows 10/11上为QT5.14.2配置MSVC2017编译器,包括VS2022组件避坑指南。从环境准备到关键配置,再到调试工具验证和Qt Creator中的编译器设置,一步步解决常见问题,帮助开发者快速搭建稳定可靠的开发环境。

weixin_30615767的博客 502

ipmitool 对linux服务器进行IPMI管理

为什么80%的码农都做不了架构师?>>> ...

weixin_34114823的博客 1092

InSAR_ISCE软件数据处理流程之:利用哨兵数据获取2015年尼泊尔地震同震形变场

ISCE软件数据处理流程之:利用哨兵数据获取2015年尼泊尔地震同震形变场 ISCE软件做干涉只需要将数据准备好,并配置好insarApp.xml文件即可进行。 一、数据准备 1、SAR数据获取 本利中使用的数据为欧空局提供的sentinel-1A/B数据,可从阿拉斯加数据服务器上下载,具体下载方法可参考: 哨兵数据下载方法. 2、哨兵卫星轨道文件下载 哨兵数据处理除了需要SAR影像外,还需提供轨道参数文件,可从https://qc.sentinel1.eo.esa.int/aux_poeorb/下载。下载

weixin_42128764的博客 1万+

zabbix 4.0上使用ipmi的方式监控IBM X3650 M3服务器

客户有几台老式的IBM X3650 M3服务器,采购日期是2009年。现在这几台服务器拼拼凑凑拿来做存储服务器,安装开源的存储软件freesnas和nexenta,作为虚拟化的共享存储。最近存储老是故障,莫名死机,原因未知,所以我想着采用zabbix上的IPMI方式监控硬件状态。IPMI是计算机系统的远程“关闭”或“带外”管理的标准接口。它可以独立于操作系统直...

weixin_34367257的博客 2182

NC65实现Restful接口开发及调试

NC65实现Restful接口开发及调试

linzhongshu的专栏 2145

TDS水质检测传感器原理图设计,已量产(液体传感器)

最近调试了一款针对生活用水、水培系统的 TDS 水质检测模块 —— 毕竟 TDS(总溶解固体)值直接关联水的洁净程度,是这类场景里既实用又易获取的水质指标。下面拆解下这个电路的设计逻辑,说说每个部分是怎么配合实现精准检测的。

不脱发的程序猿 1541

ipmitool使用指南

因为开发在windows下,部署在Linux下,所以对两个系统进行不同的说明,在代码中区分不同的操作系统,然后进行不同的操作,具体为在windows下打包成ipmitool.exe,在Linux系统下用系统自带的ipmi工具。 Windows 安装的磁盘剩余容量不小于1GB;系统盘容量不小于1GB。文件配置ipmitool,(就是文件夹下另外一个文件夹)。 Linux 已安装IPMItoo...

weixin_41785851的博客 6625

基于Matlab的深度学习OFDM系统信号检测

在接收端,我们首先去除循环前缀,然后对接收到的信号进行FFT变换和QAM解调。在通信系统中,正交频分复用(Orthogonal Frequency Division Multiplexing,OFDM)是一种常用的调制技术,它可以将高速数据流分成若干个低速子载波进行传输,提高了信道利用率和抗干扰性能。接下来,我们使用训练好的神经网络对QAM调制后的数据进行检测,得到估计的FFT变换结果。深度学习方法可以通过大量的训练数据来学习信号的特征,并具有一定的适应能力,在某些情况下可能能够获得更好的检测性能。

2301_79325657的博客 296

python监控linux运行程序_python linux监控程序

Pyinotify – Linux中实时监控文件系统更改Pyinotify 是一个简单而实用的 Python 模块,它用于通过 inotify 实时监控Linux文件系统的更改。用于在Linux中实时监控文件系统的变化。作为系统管理员,您可以使用它来监视目标感兴趣的更改,如Web目录或应用程序数据存储目录及其他目录。这取决于inotify (包含在 ...文章行者武松2018-03-131266浏...

weixin_39661405的博客 1468

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Python Watchdog——监控文件系统事件

`Watchdog`是一款用于监控文件系统事件的Python库,对不同平台的事件进行了封装。`Watchdog`优先使用底层原生API,其次再通过轮询磁盘实现监控。

XerCis的博客 8770

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

阅读目录一、Python编写的监控工具一、多功能系统资源统计工具dstat1、dstat介绍dstat是一个用Python语言实现的多功能系统资源统计工具,用来取代Linux下的vmstat、iostat、netstat和ifstat等命令。并且,dstat克服了这些命令的限制,增加了额外的功能、以及更多的计数器与更好的灵活性。dstat可以在一个界面上展示非常全面的监控信息。dstat将以列表的...

weixin_39827036的博客 712

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

系统之眼!Linux系统性能监控工具Glances

「读者福利!2 TB 各类技术资源免费赠送」一、Glances介绍glances是一个基于python语言开发,可以为linux或者UNIX性能提供监视和分析性能数据的功能。glan...

民工哥的博客 1982

python监控linux运行程序怎么关闭_第6章:使用Python监控Linux系统

1.Python编写的监控工具1).多功能系统资源统计工具dstatdstat是一个用Python编写的多功能系统资源统计工具,用来取代Linux下的vmstat,iostat,netstat和ifstat等命令dstat可以在一个界面上展示非常全面的监控信息#yum install dstat#dstat 2 10dstat的强大之处不仅仅是因为它聚合了很多种工具的监控结果,还因为它能通过附带的...

weixin_39677106的博客 265

python网络监控程序_python linux监控程序

Pyinotify – Linux中实时监控文件系统更改Pyinotify 是一个简单而实用的 Python 模块,它用于通过 inotify 实时监控Linux文件系统的更改。用于在Linux中实时监控文件系统的变化。作为系统管理员,您可以使用它来监视目标感兴趣的更改,如Web目录或应用程序数据存储目录及其他目录。这取决于inotify (包含在 ...文章行者武松2018-03-131266浏...

weixin_40008033的博客 376

Python使用psutil模块监控Linux系统信息

最近在学习psutil模块,就写一个监控Linux系统信息的脚本来试试看… 1、创建监控Linux系统信息脚本 [root@kkk myPython]# cat monSystem.py #!/usr/bin/python3 import psutil """Monitor Memory""" def monMem(): memInfo = psutil.virtual_memory() ...

Lissen_Gan的博客 936

Linux 中 HTTP 远程系统监控

在浏览器中输入`http://nagios server ip/nagios/`(将`nagios server ip`替换为实际的Nagios服务器IP),就可以查看远程系统的监控状态,包括主机是否可达、HTTP服务是否正常等。当配置好HTTPS后,在访问远程系统监控接口时,需要使用`https://`协议,如`https://remote linux host ip/monitor interface`,这样可以保证数据传输的安全性。安装`nginx full`(包含SSL支持)。

chinansa的博客 1090

python监控某个linux文件关键字,用Python监控Linux系统

Python的基础是非常重要的。基础是处理一切问题的基石。1. 负载情况如果查看Linux操作系统的负载情况,我们用Python实现的原理是通过查看文件/proc/loadavg 的内容去实现。我们先来看看这个文件的内容是什么:$cat /proc/loadavg0.00 0.01 0.05 1/187 11193具体代码实现如下:#!/usr/bin/env python3loadavg = {...

weixin_32316643的博客 397

用Python脚本实现对Linux服务器的监控

本文介绍一下使用脚本实现对 Linux 服务器 CPU 、系统负载、内存和 网络使用情况的监控脚本的编写方法。

qq_48811377的博客 1603

Linux 监控 python进程

我整理的一些关于【Linux】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://edu.51cto.com/surl=QsXoR2Linux监控Python进程的全面指南 在Linux环境中,监控Python进程可以帮助开发者更好地了解程序的运行状态、性能瓶颈以及资源消耗情况。本文将详细介绍如何使用多...

weixin_40217326的博客 224
上一篇: 6个优秀可视化Python库
下一篇: 干货!一张图整理了 Python 所有内置异常
python588
博客等级 码龄7年 338粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值