本文通过实例代码给大家介绍了Python实现Linux监控的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下。

工作原理:基于/proc 文件系统

Linux 系统为管理员提供了非常好的方法,使其可以在系统运行时更改内核,而不需要重新引导内核系统,这是通过/proc 虚拟文件系统实现的。/proc 文件虚拟系统是一种内核和内核模块用来向进程(process)发送信息的机制(所以叫做“/proc”),这个伪文件系统允许与内核内部数据结构交互,获取有关进程的有用信息,在运行中(on the fly)改变设置(通过改变内核参数)。与其他文件系统不同,/proc 存在于内存而不是硬盘中。proc 文件系统提供的信息如下:

进程信息:系统中的任何一个进程,在 proc 的子目录中都有一个同名的进程 ID,可以找到 cmdline、mem、root、stat、statm,以及 status。某些信息只有超级用户可见,例如进程根目录。每一个单独含有现有进程信息的进程有一些可用的专门链接,系统中的任何一个进程都有一个单独的自链接指向进程信息,其用处就是从进程中获取命令行信息。

系统信息:如果需要了解整个系统信息中也可以从/proc/stat 中获得,其中包括 CPU 占用情况、磁盘空间、内存对换、中断等。

CPU 信息:利用/proc/CPUinfo 文件可以获得中央处理器的当前准确信息。

负载信息:/proc/loadavg 文件包含系统负载信息。

系统内存信息:/proc/meminfo 文件包含系统内存的详细信息,其中显示物理内存的数量、可用交换空间的数量,以及空闲内存的数量等。

/proc 目录中的主要文件的说明

- apm 高级电源管理信息

- cmdline 这个文件给出了内核启动的命令行

- CPUinfo 中央处理器信息

- devices 可以用到的设备(块设备/字符设备)

- dma 显示当前使用的 DMA 通道

- filesystems 核心配置的文件系统

- ioports 当前使用的 I/O 端口

- interrupts 这个文件的每一行都有一个保留的中断

- kcore 系统物理内存映像

- kmsg 核心输出的消息,被送到日志文件

- mdstat 这个文件包含了由 md 设备驱动程序控制的 RAID 设备信息

- loadavg 系统平均负载均衡

- meminfo 存储器使用信息,包括物理内存和交换内存

- modules 这个文件给出可加载内核模块的信息。lsmod 程序用这些信息显示有关模块的名称,大小,使用数目方面的信息

- net 网络协议状态信息

- partitions 系统识别的分区表

- pci pci 设备信息

- scsi scsi 设备信息

- self 到查看/proc 程序进程目录的符号连接

- stat 这个文件包含的信息有 CPU 利用率,磁盘,内存页,内存对换,全部中断,接触开关以及赏赐自举时间

- swaps 显示的是交换分区的使用情况

- uptime 这个文件给出自从上次系统自举以来的秒数,以及其中有多少秒处于空闲

- version 这个文件只有一行内容,说明正在运行的内核版本。可以用标准的编程方法进行分析获得所需的系统信息

获取 CPU 的信息

#!/usr/bin/env Python
from __future__ import print_function
from collections import OrderedDict
import pprint
def CPUinfo():
''' Return the information in /proc/CPUinfo
as a dictionary in the following format:
CPU_info['proc0']={...}
CPU_info['proc1']={...}
'''
CPUinfo=OrderedDict()
procinfo=OrderedDict()
nprocs = 0
with open('/proc/CPUinfo') as f:
for line in f:
if not line.strip():
# end of one processor
CPUinfo['proc%s' % nprocs] = procinfo
nprocs=nprocs+1
# Reset
procinfo=OrderedDict()
else:
if len(line.split(':')) == 2:
procinfo[line.split(':')[0].strip()] = line.split(':')[1].strip()
else:
procinfo[line.split(':')[0].strip()] = ''
return CPUinfo
if __name__=='__main__':
CPUinfo = CPUinfo()
for processor in CPUinfo.keys():
print(CPUinfo[processor]['model name'])

简单说明一下清单 1,读取/proc/CPUinfo 中的信息,返回 list,每核心一个 dict。其中 list 是一个使用方括号括起来的有序元素集合。List 可以作为以 0 下标开始的数组。Dict 是 Python 的内置数据类型之一, 它定义了键和值之间一对一的关系。OrderedDict 是一个字典子类,可以记住其内容增加的顺序。常规 dict 并不跟踪插入顺序,迭代处理时会根据键在散列表中存储的顺序来生成值。在 OrderedDict 中则相反,它会记住元素插入的顺序,并在创建迭代器时使用这个顺序。

获取系统的负载信息

#!/usr/bin/env Python
import os
def load_stat():
loadavg = {}
f = open("/proc/loadavg")
con = f.read().split()
f.close()
loadavg['lavg_1']=con[0]
loadavg['lavg_5']=con[1]
loadavg['lavg_15']=con[2]
loadavg['nr']=con[3]
loadavg['last_pid']=con[4]
return loadavg
print "loadavg",load_stat()['lavg_15']

简单说明一下清单 2:清单 2 读取/proc/loadavg 中的信息,import os :Python 中 import 用于导入不同的模块,包括系统提供和自定义的模块。其基本形式为:import 模块名 [as 别名],如果只需要导入模块中的部分或全部内容可以用形式:from 模块名 import *来导入相应的模块。OS 模块 os 模块提供了一个统一的操作系统接口函数,os 模块能在不同操作系统平台如 nt,posix 中的特定函数间自动切换,从而实现跨平台操作。

获取内存使用情况

!/usr/bin/env Python
from __future__ import print_function
from collections import OrderedDict
def meminfo():
''' Return the information in /proc/meminfo
as a dictionary '''
meminfo=OrderedDict()
with open('/proc/meminfo') as f:
for line in f:
meminfo[line.split(':')[0]] = line.split(':')[1].strip()
return meminfo
if __name__=='__main__':
#print(meminfo())
meminfo = meminfo()
print('Total memory: {0}'.format(meminfo['MemTotal']))
print('Free memory: {0}'.format(meminfo['MemFree']))

net.py 获取网络接口的输入和输出

#!/usr/bin/env Pythonimport timeimport sysif len(sys.argv) > 1:INTERFACE = sys.argv[1]else:INTERFACE = 'eth0'STATS = []print 'Interface:',INTERFACEdef rx():ifstat = open('/proc/net/dev').readlines()for interface in ifstat:if INTERFACE in interface:stat = float(interface.split()[1])STATS[0:] = [stat]def tx():ifstat = open('/proc/net/dev').readlines()for interface in ifstat:if INTERFACE in interface:stat = float(interface.split()[9])STATS[1:] = [stat]print  'In     Out'rx()tx()while  True:time.sleep(1)rxstat_o = list(STATS)rx()tx()RX = float(STATS[0])RX_O = rxstat_o[0]TX = float(STATS[1])TX_O = rxstat_o[1]RX_RATE = round((RX - RX_O)/1024/1024,3)TX_RATE = round((TX - TX_O)/1024/1024,3)print RX_RATE ,'MB   ',TX_RATE ,'MB'

crtrl.py 监控 Apache 服务器进程的 Python 脚本

#!/usr/bin/env Python
import os, sys, time
while True:
time.sleep(4)
try:
ret = os.popen('ps -C apache -o pid,cmd').readlines()
if len(ret) < 2:
print "apache 进程异常退出, 4 秒后重新启动"
time.sleep(3)
os.system("service apache2 restart")
except:
print "Error", sys.exc_info()[1]

总结

以上所述是小编给大家介绍的Python实现Linux监控的方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

实例代码分享Python实现Linux监控相关推荐

  1. java str2date,java date类与string类实例代码分享

    Date类用来指定日期和时间,其构造函数及常用方法如下: publicDate() 从当前时间构造日期时间对象. publicStringtoString() 转换成字符串. publiclongge ...

  2. 数据代码分享|PYTHON用NLP自然语言处理LSTM神经网络TWITTER推特灾难文本数据、词云可视化...

    全文下载链接:http://tecdat.cn/?p=28877 作者:Yunfan Zhang Twitter是一家美国社交网络及微博客服务的网站,致力于服务公众对话.迄今为止,Twitter的日活 ...

  3. python扫雷游戏实验分析_用python写扫雷游戏实例代码分享

    扫雷是一个非常经典的WIN游戏,我们教给大家用python语言来写出这个游戏,以下是全部实例代码: #!/usr/bin/python #coding:utf-8 #python 写的扫雷游戏 imp ...

  4. 在哪里能收到python实例代码-用python做一个搜索引擎(Pylucene)的实例代码

    1.什么是搜索引擎? 搜索引擎是"对网络信息资源进行搜集整理并提供信息查询服务的系统,包括信息搜集.信息整理和用户查询三部分".如图1是搜索引擎的一般结构,信息搜集模块从网络采集信 ...

  5. ajax 上传文件实例,Ajax异步上传文件实例代码分享

    非常不多说,直接给大家上干货,写的不好还请见谅. 具体代码如下所示: Index $(function() { $(':button').click(function () { var formDat ...

  6. html切换搜索引擎,关于JavaScript如何切换搜索引擎的导航网页搜索框的实例代码分享...

    这篇文章主要介绍了javascript切换搜索引擎的导航网页搜索框的实例代码,非常不错,具有参考借鉴价值 ,需要的朋友可以参考下 废话不多说了,直接给大家贴代码了,具体代码如下所述: #search ...

  7. ajax简单实例代码,分享Ajax创建简单实例代码

    XmlHttp是一套可以在Javascript.VbScript.Jscript等脚本语言中通过http协议传送或从接收XML及其他数据的一套API.XmlHttp最大的用处是可以更新网页的部分内容而 ...

  8. 教你用html+js制作一个自己的点名系统,实例代码分享

    简介 教你用html+js制作一个自己的点名系统,实例代码如下. 效果 代码 HTML <div class="wrapper"><h1 align=" ...

  9. 案例驱动python编程入门-python ddt数据驱动实例代码分享

    python ddt数据驱动最简实例 在接口自动化测试中,往往一个接口的用例需要考虑 正确的.错误的.异常的.边界值等诸多情况,然后你需要写很多个同样代码,参数不同的用例.如果测试接口很多,不但需要写 ...

最新文章

  1. 文巾解题 523. 连续的子数组和
  2. php mysql 白屏_apache+php+mysql的白屏问题
  3. Centos7 install firefox-china
  4. 【Spring】Spring 自定义scope
  5. MFC中CString,int,string,char * ,char[] 之间互转
  6. Hadoop源码分析:Hadoop编程思想
  7. proteus元件图片_Proteus模型,元件库
  8. 《Android MVPArms 使用butterknife遇到的坑》
  9. 2012、2014、2016、2020年最全数据合集产学研专题2.0
  10. OA考勤打卡系统功能点
  11. pspice计算机仿真实验,基于OrCAD_PSpice二阶动态电路的计算机仿真分析
  12. 这个“单”到底应该谁来买?
  13. linux下计算时间,linux 日期时间计算
  14. 像Swing这种已经不太用的技术,大学还在教,到底要不要学?
  15. 业务常识:线上充值与掉单
  16. 举头望明月打计算机术语,呐,你们要的灯谜来了!
  17. Java JVM:垃圾回收(GC 在什么时候,对什么东西,做了什么事情)
  18. XMD:使用Eclipse创建maven项目
  19. 网页大作业——街机游戏拳皇(KOF)系列的介绍及试玩。
  20. linux cron 进程查询,Linux下通过配置Crontab实现进程守护

热门文章

  1. 新年总结:2018年,是我妈最快乐的一年
  2. 规格选项表管理之更新规格选项表数据
  3. Scrapy框架items数据建模、翻页请求、requests对象请求、meta参数的使用
  4. MySQL数据库介绍、安装(服务端软件安装、客户端软件安装(图形化界面客户端和命令行客户端))
  5. 利用python将数据写入CSV文件中
  6. JSP第二次作业_4小题
  7. 干货|简单理解逻辑回归基础
  8. 非常实用的 Python 技巧
  9. 面试官(7): 聊一聊 Babel?
  10. JAVA基础 (二)反射 深入解析反射机制