环境使用python3.6.2版本,linux使用centos7

这个程序主要使用paramiko模块实现。我们实现相关信息的获取,具体的监控系统和手段由于大家实现方式不一,就不举例了。

1、内存信息的读取。

通过远程执行‘cat /proc/meminfo’可以获取内存相关信息。这里我只读取MemTotal和MemFree的信息。需要读取其他信息可以利用正则表达式匹配获取其他数据。例子把这两个信息输出到标准输出中,实际应用可以通过crontab定时执行脚本,把结果写入文件,可以给传给监控系统,当超越一定阀值的时候进行相应的处理

import paramiko
import re#设置主机列表
host_list=({'ip':'192.168.98.130', 'port':22, 'username':'root', 'password':'123'},{'ip':'192.168.98.131', 'port':22, 'username':'root', 'password':'123'},)ssh = paramiko.SSHClient()
# 设置为接受不在known_hosts 列表的主机可以进行ssh连接
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())for host in host_list:ssh.connect(hostname=host['ip'], port=host['port'], username=host['username'], password=host['password'])print(host['ip'])stdin, stdout, stderr = ssh.exec_command('cat /proc/meminfo')str_out = stdout.read().decode()str_err = stderr.read().decode()if str_err != "":print(str_err)continuestr_total = re.search('MemTotal:.*?\n', str_out).group()print(str_total)totalmem = re.search('\d+',str_total).group()str_free = re.search('MemFree:.*?\n', str_out).group()print(str_free)freemem = re.search('\d+',str_free).group()use = round(float(freemem)/float(totalmem), 2)print('当前内存使用率为:'+ str(use))ssh.close()

2、CPU使用率的读取

这里使用cat /proc/stat命令读取实时的CPU使用率。这个命令可以获取到cpu的各种时间。具体的分析请自行百度。由于这个时间数值是从开机之后一直累加的,因此我们要取一次值之后,隔一小段时间再取一次值,前后两次的值相减,再计算这段时间的CPU利用率。具体公式是:

CPU利用率= 1-(CPU空闲时间2 - CPU空闲时间1) / (CPU总时间2 - CPU总时间1)

其中"CPU空闲时间1"为第一次取值时第4项的值,"CPU空闲时间2"为第二次取值时第4项的值,"CPU总时间1"为第一次取值时各项数值的总和,"CPU总时间2"为第二次取值时各项数值的总和

import paramiko
import re
import time
import sys#设置主机列表
host_list=({'ip':'192.168.98.130', 'port':22, 'username':'root', 'password':'123'},{'ip':'192.168.98.131', 'port':22, 'username':'root', 'password':'123'},)ssh = paramiko.SSHClient()
# 设置为接受不在known_hosts 列表的主机可以进行ssh连接
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())for host in host_list:ssh.connect(hostname=host['ip'], port=host['port'], username=host['username'], password=host['password'])print(host['ip'])stdin, stdout, stderr = ssh.exec_command('cat /proc/stat | grep "cpu "')str_out = stdout.read().decode()str_err = stderr.read().decode()if str_err != "":print(str_err)continueelse:cpu_time_list = re.findall('\d+', str_out)cpu_idle1 = cpu_time_list[3]total_cpu_time1 = 0for t in cpu_time_list:total_cpu_time1 = total_cpu_time1 + int(t)time.sleep(2)stdin, stdout, stderr = ssh.exec_command('cat /proc/stat | grep "cpu "')str_out = stdout.read().decode()str_err = stderr.read().decode()if str_err != "":print(str_err)continueelse:cpu_time_list = re.findall('\d+', str_out)cpu_idle2 = cpu_time_list[3]total_cpu_time2 = 0for t in cpu_time_list:total_cpu_time2 = total_cpu_time2 + int(t)cpu_usage = round(1 - (float(cpu_idle2) - float(cpu_idle1)) / (total_cpu_time2 - total_cpu_time1), 2)print('当前CPU使用率为:' + str(cpu_usage))ssh.close()

3、磁盘使用率

这里使用df命令获取磁盘使用情况。这个命令相当方便,既获取了磁盘的容量,也获取了使用率,可以根据需要进行后续的处理

import paramiko
import re#设置主机列表
host_list=({'ip':'192.168.98.130', 'port':22, 'username':'root', 'password':'123'},{'ip':'192.168.98.131', 'port':22, 'username':'root', 'password':'123'},)ssh = paramiko.SSHClient()
# 设置为接受不在known_hosts 列表的主机可以进行ssh连接
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())for host in host_list:ssh.connect(hostname=host['ip'], port=host['port'], username=host['username'], password=host['password'])print(host['ip'])stdin, stdout, stderr = ssh.exec_command('df -lm')str_out = stdout.read().decode()str_err = stderr.read().decode()if str_err != "":print(str_err)continueprint(str_out)ssh.close()

4、网络流量

网络流量可以使用cat /proc/net/dev查看,可以看到每个网络接口当前发送和接收的字节和包的数量,由于是一个累计的值,如果需要计算一定时间间隔内的流量,可以让程序sleep一定时间,然后再次获取,进行计算。个人建议每隔一段时间获取这个值,并且写入文件中,然后再使用其他程序去计算其速度和流量

import paramiko
import re#设置主机列表
host_list=({'ip':'192.168.98.130', 'port':22, 'username':'root', 'password':'123'},{'ip':'192.168.98.131', 'port':22, 'username':'root', 'password':'123'},)ssh = paramiko.SSHClient()
# 设置为接受不在known_hosts 列表的主机可以进行ssh连接
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())for host in host_list:ssh.connect(hostname=host['ip'], port=host['port'], username=host['username'], password=host['password'])print(host['ip'])stdin, stdout, stderr = ssh.exec_command('cat /proc/net/dev')str_out = stdout.read().decode()str_err = stderr.read().decode()if str_err != "":print(str_err)continueprint(str_out)ssh.close()

Python批量监控主机内存/CPU利用率/磁盘/网络等信息相关推荐

  1. 用python监控磁盘_使用python怎么对服务器cpu和磁盘空间进行监控

    使用python怎么对服务器cpu和磁盘空间进行监控 发布时间:2021-01-29 17:16:55 来源:亿速云 阅读:82 作者:Leah 这期内容当中小编将会给大家带来有关使用python怎么 ...

  2. python批量提取word指定内容_使用python批量读取word文档并整理关键信息到excel表格的实例...

    目标 最近实验室里成立了一个计算机兴趣小组 倡议大家多把自己解决问题的经验记录并分享 就像在CSDN写博客一样 虽然刚刚起步 但考虑到后面此类经验记录的资料会越来越多 所以一开始就要做好模板设计(如下 ...

  3. vc++6.0获取磁盘基本信息_分享一个实用脚本--一键获取linux内存、cpu、磁盘IO等信息...

    概述 今天主要分享一个shell脚本,用来获取linux系统CPU.内存.磁盘IO等信息. 脚本 #!/bin/bash # 获取要监控的本地服务器IP地址 IP=`ifconfig | grep i ...

  4. Shell - 监控某个进程的内存占用情况、主机CPU、磁盘空间等信息以及守护进程

    文章目录 脚本 启动的两种方式 方式一 注册到系统Cron 方式二 运行结果 linux内存.cpu.磁盘IO 脚本 #!/bin/sh ############################## ...

  5. 获取Linux内存、cpu、磁盘IO等信息

    #!/bin/bash # 获取要监控的本地服务器IP地址 IP=`ifconfig | grep inet | grep -vE 'inet6|127.0.0.1' | awk '{print $2 ...

  6. 一键获取linux内存、cpu、磁盘IO等信息脚本编写,及其原理详解

    一.脚本 今天主要分享一个shell脚本,用来获取linux系统CPU.内存.磁盘IO等信息. #!/bin/bash # 获取要监控的本地服务器IP地址 IP=`ifconfig | grep in ...

  7. python批量提取word指定内容到excel_(转)用python批量读取word文档并整理关键信息到excel表格...

    目标 最近实验室里成立了一个计算机兴趣小组 倡议大家多把自己解决问题的经验记录并分享 就像在CSDN写博客一样 虽然刚刚起步 但考虑到后面此类经验记录的资料会越来越多 所以一开始就要做好模板设计(如下 ...

  8. Zabbix探索:无法获取Windows主机CPU利用率、负载等问题处理

    2019独角兽企业重金招聘Python工程师标准>>> 今天随机查看服务器时,无意中发现某机器的CPU利用率和负载等信息出不来,远程测试也一直提示ZBX_NOTSUPPORTED. ...

  9. Linux常用命令及详细说明 — 结合工作(侧重性能监控,包括CPU、内存、IO、网络、磁盘等)...

    (一)Linux监控的几个常用命令(对于服务器后端程序猿很重要,必须掌握): 命令 功能 命令 功能 iostat 统计CPU及网络.设备和分区IO的数据 vmstat 展示给定时间服务器的状态值(包 ...

最新文章

  1. android中XMl文件的读取
  2. Python:通过远程监控用户输入来获取淘宝账号和密码的实验(一)
  3. Maven项目上总有一个小红叉问题
  4. Ubuntu 16.04 LTS下编译GPU版tensorflow
  5. 对于华为,英特尔与微软表示继续提供支持;亚马逊亲证云计算服务出现宕机;中国移动5G套餐曝光,每月都含200G流量……...
  6. python 数据库查询系统_python查询数据库操作系统
  7. php语言开始和结束分别为,0055 PHP语言简介和HelloWorld
  8. Android智能硬件开发心得总结(一)
  9. java多行注释_Java注释:单行、多行和文档注释
  10. 模拟器搭建之一:如何搭建MT6573 模拟器
  11. 视频剪辑技巧,视频旋转/翻转视频最简单的操作
  12. Android连接逍遥模拟器
  13. 评说于国富律师的“免费正版化”
  14. “青软杯”安徽科技学院第六届程序设计大赛_专业组
  15. 东偶已逝,桑榆非晚。
  16. CTF初体验:Web18秋名山车神
  17. 计算机二级最难的excel题,计算机二级什么最难?excel函数啊!
  18. Postgresql 1小时快速入门
  19. 【Git】手把手教你使用git管理代码 (上)
  20. 找不到msvcp140.dll无法继续执行代码,要怎么去解决?

热门文章

  1. PCAPNG下一代转储文件格式 PCAP-DumpFileFormat
  2. Java JDBC基本介绍
  3. odoo odoo.modules.module: Couldn‘t load module web
  4. 32位mips指令说明
  5. ES6中padStart()和padEnd()方法的使用
  6. Negative Sampling 负采样详解
  7. 云开发超多功能工具箱组合微信小程序源码/附带流量主功能介绍
  8. 15分钟入门蒙特卡洛 Monte Carlo
  9. JSON框架之阿里fastjson的介绍
  10. Python中如何将数据存储为json格式的文件