Python管理PVE(Proxmox VE)云平台--节点资源统计

一、前言

  写本脚本的初衷是因手动查看统计已分配的PVE资源过于耗时,因此写一个脚本一劳永逸,具体实现方法:利用Python的paramiko模块进行远程命令查看、统计PVE平台各节点已分配的cpu、内存、磁盘空间。

二、步骤

1.构建shell脚本

1.1 统计对象取值(cpu、mem、disk)

获取虚拟机ID

qm list | awk -F" " '{print $1}'|grep -v VMID > VMID

获取cpu核数

# 总核 = 插槽数量 * 核心数量
qm config VMID | grep cores | awk -F" " '{print $2}'

获取mem数据

qm config VMID | grep memory | awk -F" " '{print $2}'

获取disk数据

# 存在多块磁盘现象
qm config VMID | grep -e ^scsi* | grep -v scsihw | awk -F'[,=G]'  '{print $3 }'
1.2 sum_cpu.sh
#bin/bash
#计算单节点已分配cpu核数
qm list | awk -F" " '{print $1}'|grep -v VMID > VMIDi=0
vmids=`cat VMID` 
for vmid in $vmidsdoc_number=`qm config $vmid | grep cores | awk -F" " '{print $2}'`socket=`qm config $vmid | grep sockets | awk -F" " '{print $2}'`sum=`echo "$c_number * $socket"| bc`i=`echo "$i + $sum" | bc`
done
echo "$(hostname)节点Cpu已分配:$i 核"
1.3 sum_mem.sh
#bin/bash
#计算单节点已分配mem
qm list | awk -F" " '{print $1}'|grep -v VMID > VMIDi=0
vmids=`cat VMID` 
for vmid in $vmidsdom_number=`qm config $vmid | grep memory | awk -F" " '{print $2}'`sum=`echo "$m_number / 1024 "| bc`i=`echo "$i + $sum" | bc`
done
echo "$(hostname)节点内存已分配:$i G"
rm -rf VMID
1.4 sum_disk.sh
#bin/bash
#计算单节点已分配disk
qm list | awk -F" " '{print $1}'|grep -v VMID > VMIDi=0vmids=`cat VMID` 
for vmid in $vmidsdob=0qm config $vmid | grep -e ^scsi* | grep -v scsihw | awk -F'[,=G]'  '{print $3 }' > DISKqm config $vmid | grep -e ^ide* | grep -v ide2 | awk -F'[,=G]'  '{print $3 }' >> DISKdisks=`cat DISK`for disk in $disksdob=`echo "$b + $disk" | bc`donei=`echo "$i + $b" | bc`
done
echo "$(hostname)节点磁盘已分配:$i G"

2.构建python脚本

2.1 Cpu_Query.py
# -*- coding: utf-8 -*-
import paramiko# 连接信息:
# host = '192.168.100.103'
port = 22  # 默认的SSH端口
userName = 'root'
password = '******'def SafeCheck():for i in range(105, 109):try:# 创建SSHClient 实例对象ssh = paramiko.SSHClient()# 调用方法,表示没有存储远程机器的公钥,允许访问ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 连接远程机器ssh.connect(hostname=f"192.168.100.{i}", port=port, username=userName, password=password)# 组合bash命令为一个字符串bash_cmd = """qm list | awk -F" " '{print $1}' | grep -v VMID > VMID &&i=0 &&vmids=$(cat VMID) &&for vmid in $vmids; doc_number=$(qm config $vmid | grep cores | awk -F" " '{print $2}') &&socket=$(qm config $vmid | grep sockets | awk -F" " '{print $2}') &&sum=$(echo "$c_number * $socket" | bc) &&i=$(echo "$i + $sum" | bc);done &&echo "$(hostname)节点Cpu已分配:$i 核""""# 执行bash命令stdin, stdout, stderr = ssh.exec_command(bash_cmd)# 读取并打印结果result = stdout.read().decode('utf-8')err_result = stderr.read().decode('utf-8')print("执行结果:", result, "执行ip:", i)# 关闭SSH连接ssh.close()except paramiko.SSHException as sshException:print("SSH异常:", sshException)except TimeoutError:print("执行结果: b'Failed\\n'", "超时端口:", i)except KeyboardInterrupt:print("Ctrl + c 中断运行!")breakif __name__ == '__main__':SafeCheck()

执行结果:
在这里插入图片描述

2.2 Disk_Query.py
# -*- coding: utf-8 -*-
import paramiko# 连接信息:
# host = '192.168.100.103'
port = 22  # 默认的SSH端口
userName = 'root'
password = 'adfmaoijo1869#!@%'def SafeCheck():for i in range(105, 109):try:# 创建SSHClient 实例对象ssh = paramiko.SSHClient()# 调用方法,表示没有存储远程机器的公钥,允许访问ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 连接远程机器ssh.connect(hostname=f"192.168.100.{i}", port=port, username=userName, password=password)# 组合bash命令为一个字符串bash_cmd = """qm list | awk -F" " '{print $1}'|grep -v VMID > VMIDi=0vmids=`cat VMID` for vmid in $vmidsdob=0qm config $vmid | grep -e ^scsi* | grep -v scsihw | awk -F'[,=G]'  '{print $3 }' > DISKqm config $vmid | grep -e ^ide* | grep -v ide2 | awk -F'[,=G]'  '{print $3 }' >> DISKdisks=`cat DISK`for disk in $disksdob=`echo "$b + $disk" | bc`donei=`echo "$i + $b" | bc`doneecho "$(hostname)节点磁盘已分配:$i G""""# 执行bash命令stdin, stdout, stderr = ssh.exec_command(bash_cmd)# 读取并打印结果result = stdout.read().decode('utf-8')err_result = stderr.read().decode('utf-8')print("执行结果:", result, "执行ip:", i)# 关闭SSH连接ssh.close()except paramiko.SSHException as sshException:print("SSH异常:", sshException)except TimeoutError:print("执行结果: b'Failed\\n'", "超时端口:", i)except KeyboardInterrupt:print("Ctrl + c 中断运行!")breakif __name__ == '__main__':SafeCheck()

执行结果:
在这里插入图片描述

2.3 Mem_Query.py
# -*- coding: utf-8 -*-
import paramiko# 连接信息:
# host = '192.168.100.103'
port = 22  # 默认的SSH端口
userName = 'root'
password = 'adfmaoijo1869#!@%'def SafeCheck():for i in range(105, 109):try:# 创建SSHClient 实例对象ssh = paramiko.SSHClient()# 调用方法,表示没有存储远程机器的公钥,允许访问ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 连接远程机器ssh.connect(hostname=f"192.168.100.{i}", port=port, username=userName, password=password)# 组合bash命令为一个字符串bash_cmd = """qm list | awk -F" " '{print $1}'|grep -v VMID > VMID &&i=0 &&vmids=`cat VMID` &&for vmid in $vmidsdom_number=`qm config $vmid | grep memory | awk -F" " '{print $2}'`sum=`echo "$m_number / 1024 "| bc`i=`echo "$i + $sum" | bc`doneecho "$(hostname)节点内存已分配:$i G"rm -rf VMID"""# 执行bash命令stdin, stdout, stderr = ssh.exec_command(bash_cmd)# 读取并打印结果result = stdout.read().decode('utf-8')err_result = stderr.read().decode('utf-8')print("执行结果:", result, "执行ip:", i)# 关闭SSH连接ssh.close()except paramiko.SSHException as sshException:print("SSH异常:", sshException)except TimeoutError:print("执行结果: b'Failed\\n'", "超时端口:", i)except KeyboardInterrupt:print("Ctrl + c 中断运行!")breakif __name__ == '__main__':SafeCheck()

执行结果:

在这里插入图片描述

三、结束语

  到此Python统计PVE(Proxmox VE)云平台节点资源讲解就完毕啦,如果有其它问题欢迎大家评论留言,如果觉得还可以,那么给作者点赞、收藏、关注吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3029270.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

基于SpringBoot的全国风景区WebGIS按省展示实践

目录 前言 一、全国风景区信息介绍 1、全国范围内数据分布 2、全国风景区分布 3、PostGIS空间关联查询 二、后台查询的设计与实现 1、Model和Mapper层 2、业务层和控制层设计 三、WebGIS可视化 1、省份范围可视化 2、省级风景区可视化展示 3、成果展示 总结 前…

EMAP的简单开发(单表)

注意框架版本选择SPA_v1 一个数据源代表一个业务,选择一个就会产生对应的应用 index.jsp是展示的页面 conifg.js是index.jsp引用渲染的一个js文件 index.jsp中的全局变量中有一个pageMeta和contaextPath: pageMeta:是一个对象,…

办公技巧之合集文档 拆分_word

问题 如何将文档合集拆分为单独文档。 操作步骤 软件 word 365 原理简述: 在 word 大纲视图下,通过一级标题确定子文档范围,然后导出即可。 文档结构 从下图可见,文档结构为已建立大纲级别的文档,如果没有建立&a…

初探 JUC 并发编程:读写锁 ReentrantReadWriteLock 原理(8000 字源码详解)

本文中会涉及到一些前面 ReentrantLock 中学到的内容,先去阅读一下我关于独占锁 ReentrantLock 的源码解析阅读起来会更加清晰。 初探 JUC 并发编程:独占锁 ReentrantLock 底层源码解析 6.4)读写锁 ReentrantReadWriteLock 原理 前面提到的 R…

Java入门——类和对象(上)

经读者反映与笔者考虑,近期以及往后内容更新将主要以java为主,望读者周知、见谅。 类与对象是什么? C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 JAVA是基于面向对…

C++常用库函数——strcmp、strchr

1、strcmp:比较两个字符串的值是否相等 例如 char a1[6] "AbDeG",*s1 a1;char a2[6] "AbdEg",* s2 a2;s1 2;s2 2;printf("%d \n", strcmp(s1, s2));return(0); s1指向a1,s2指向a2,strcmp表示比较s1和s…

万物生长大会 | 创邻科技再登杭州准独角兽榜单

近日,由民建中央、中国科协指导,民建浙江省委会、中国投资发展促进会联合办的第八届万物生长大会在杭州举办。 在这场创新创业领域一年一度的盛会上,杭州市创业投资协会联合微链共同发布《2024杭州独角兽&准独角兽企业榜单》。榜单显示&…

数据库被攻击后出现1044 - access denied for user ‘root‘@‘% ‘ to database table

MySQL数据库被攻击后,数据库全部被删除,并且加一个一个勒索的数据,向我索要btc, 出现这个问题就是我的数据库密码太简单了,弱密码,被破解了,并且把我权限也给修改了 导致我操作数据库时&#…

vs2019 里 C++ 20规范的 string 类的源码注释

(1)读源码,可以让我们更好的使用这个类,掌握这个类,知道咱们使用了库代码以后,程序大致具体是怎么执行的。而不用担心程序出不知名的意外的问题。也便于随后的代码调试。 string 类实际是 库中 basic_strin…

国产开源物联网操作系统

软件介绍 RT-Thread是一个开源、中立、社区化发展的物联网操作系统,采用C语言编写,具有易移植的特性。该项目提供完整版和Nano版以满足不同设备的资源需求。 功能特点 1.内核层 RT-Thread内核包括多线程调度、信号量、邮箱、消息队列、内存管理、定时器…

Bokeh实战高级教程:用滑块控件打造动态数据可视化

在数据可视化的世界里,Bokeh无疑是一颗璀璨的明星。它不仅提供了丰富的图表类型,还支持强大的交互功能。今天,我们就来深入探讨如何使用Bokeh的滑块控件,轻松实现数据的动态展示。 首先,让我们从创建ColumnDataSource开…

纯血鸿蒙APP实战开发——阅读翻页方式案例

介绍 本示例展示手机阅读时左右翻页,上下翻页,覆盖翻页的功能。 效果图预览 使用说明 进入模块即是左右翻页模式。点击屏幕中间区域弹出上下菜单。点击设置按钮,弹出翻页方式切换按钮,点击可切换翻页方式。左右翻页方式可点击翻…

C++:多态-重写和重载

重写(Override)和重载(Overload)是面向对象编程中常用的两个概念,它们虽然都涉及到方法的定义,但是在实现和使用上有着不同的特点。 重写(Override): 重写是指在子类中重…

Python图形复刻——绘制母亲节花束

各位小伙伴,好久不见,今天学习用Python绘制花束。 有一种爱,不求回报,有一种情,无私奉献,这就是母爱。祝天下妈妈节日快乐,幸福永远! 图形展示: 代码展示: …

论文解读--------FedMut: Generalized Federated Learning via Stochastic Mutation

动机 Many previous works observed that the well-generalized solutions are located in flat areas rather than sharp areas of the loss landscapes. 通常,由于每个本地模型的任务是相同的,因此每个客户端的损失情况仍然相似。直观上,…

洗地机挑选有哪些要点?附618热门洗地机推荐

随着科技的不断发展,洗地机已经成为了人们家庭里必备的清洁家电了,它可以让我们高效的完成深度清洁的工作,让我们从繁重的家务劳动中解放出来,享受更轻松舒适的生活。那么我们如何在众多洗地机品牌中找到适合自己的产品呢&#xf…

2023盘古石杯晋级赛 apk分析 WP

1. 涉案应用刷刷樂的签名序列号是[答案:123ca12a] 2. 涉案应用刷刷樂是否包含读取短信权限 无 3. 涉案应用刷刷樂打包封装的调证ID值是[答案:123ca12a] 4. 涉案应用刷刷樂服务器地址域名是[答案:axa.baidun.com] 代理模式抓个包 5. 涉案应用…

Android项目转为鸿蒙,真就这么简单?

最近做了一个有关Android转换成鸿蒙的项目。经不少开发者的反馈;许多公司的业务都增加了鸿蒙板块。 对此想分享一下这个项目转换的流程结构,希望能够给大家在工作中带来一些帮助。转换流程示意图如下: 下面我就给大家介绍,Android…

Spring框架学习笔记(一):Spring基本介绍(包含IOC容器底层结构)

1 官方资料 1.1 官网 https://spring.io/ 1.2 进入 Spring5 下拉 projects, 进入 Spring Framework 进入 Spring5 的 github 1.3 在maven项目中导入依赖 <dependencies><!--加入spring开发的基本包--><dependency><groupId>org.springframework<…

多址通信方式的抗噪声性能和系统容量对比

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…