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 > VMID

i=0
vmids=`cat VMID` 
for vmid in $vmids
  do
    c_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 > VMID

i=0
vmids=`cat VMID` 
for vmid in $vmids
  do
    m_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 > VMID

i=0

vmids=`cat VMID` 
for vmid in $vmids
  do
    b=0
    qm config $vmid | grep -e ^scsi* | grep -v scsihw | awk -F'[,=G]'  '{print $3 }' > DISK
	qm config $vmid | grep -e ^ide* | grep -v ide2 | awk -F'[,=G]'  '{print $3 }' >> DISK
	disks=`cat DISK`
	for disk in $disks
	  do
	    b=`echo "$b + $disk" | bc`
	done
    i=`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; do
                c_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 中断运行!")
            break


if __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 > VMID
            i=0
            vmids=`cat VMID` 
            for vmid in $vmids
              do
                b=0
                qm config $vmid | grep -e ^scsi* | grep -v scsihw | awk -F'[,=G]'  '{print $3 }' > DISK
                qm config $vmid | grep -e ^ide* | grep -v ide2 | awk -F'[,=G]'  '{print $3 }' >> DISK
                disks=`cat DISK`
                for disk in $disks
                  do
                    b=`echo "$b + $disk" | bc`
                done
                i=`echo "$i + $b" | bc`
            done
            echo "$(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 中断运行!")
            break


if __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 $vmids
              do
                m_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
            """
            # 执行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 中断运行!")
            break


if __name__ == '__main__':
    SafeCheck()

执行结果:

在这里插入图片描述

三、结束语

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

每日一题 城市群的数量

题目解析 城市群数量_牛客题霸_牛客网 当解决这个问题时,首先需要理解题目要求。题目中给出了一个城市之间的邻接矩阵,矩阵中的元素表示城市之间是否直接相连。如果两个城市直接相连,或者通过其他城市间接相连,它们就属于同一个城…

进程间的IPC通信机制

一、介绍 进程与进程间的用户空间相互独立,内核空间共享。 1.传统的进程间通信机制 a.无名管道 pipe b.有名管道 fifo c.信号 signal 2.system V中的IPC对象 a.消息队列 message queue b.共享内存 shared memory c.信号灯集 semaphoare 3.可用于跨主机传输…

Weblogic 任意文件上传漏洞(CVE-2018-2894)

1 漏洞描述 CVE-2018-2894漏洞存在于Oracle WebLogic Server的Web服务测试页面(Web Service Test Page)中。这个页面允许用户测试Web服务的功能,但在某些版本中,它包含了一个未经授权的文件上传功能。攻击者可以利用这个漏洞&…

变频器通过Modbus转Profinet网关接电机与PLC通讯在自动化的应用

Modbus转Profinet网关(XD-MDPN100/300/600)的作用是将Modbus协议转换为Profinet协议,支持Modbus RTU主站/从站,并且Modbus转Profinet网关设备自带网口和串口,既可以实现协议转换的同时,也可以实现接口的转换…

ARM架构安全特性之隔离技术

安全之安全(security)博客目录导读 目录 一、保护代码和数据 二、TrustZone 三、安全世界之间的隔离 四、Secure-EL2扩展 五、保护主流计算工作负载 六、领域管理扩展(RME) 七、内存密集型可信应用程序 八、Arm动态TrustZone技术 强制执行明确定义的安全边界是安全工程…

变现 5w+,一个被严重低估的 AI 蓝海赛道,居然用这个免费国产AI工具就能做!

大家好,我是程序员X小鹿,前互联网大厂程序员,自由职业2年,也一名 AIGC 爱好者,持续分享更多前沿的「AI 工具」和「AI副业玩法」,欢迎一起交流~ 文章首发于公众号:X小鹿AI副业 之前X小鹿一直在各…

HTML与cgi程序的数据交互

1. Html通过ajax获取cgi返回的数据 function HtmlGetCgiData() {$.ajax({type: POST, //提交方法url: cgi-bin/wg67_key_in/wg67_key_in_reflush.cgi, //调用到的cgi程序data: "ajax", //发送的数据,不可缺失该项,不能为空(空&…

从“金事通”带给我意想不到的来说--“数据是架构的中心”

背景 上周一个保险的销售人员来找我完成一定的售后流程。其中有一项是请我下载一个叫 金事通的 APP。说实在的我根本没听过。她说这是政治任务。我想不是有你们保险公司的APP了嘛。为什么还要我安装。没办法先安装吧。 经历了注册、人脸识别的步骤后。可以登录了。注册短信发…

AR系列路由器配置本地同一网段互通

A R 路由器是华为公司推出的企业级路由器产品系列,具有高可靠性、高性能和易管理等特点。AR 系列路由器提供的功能包括路由转发、安全接入、语音、视频、无线等多种业务,支持各种接入方式和协议,并且可以方便地进行扩展和升级。 实验拓扑图&…

Spring:@Async注解使用注意事项及九大失效场景

前言 原文作者:微信公众号:苏三说技术 场景举例 代码案例 点击此处可观看:Async注解使用注意事项及九大失效场景

浪潮信息联合SAP助力玉柴集团实现数字化转型的飞跃

数字化时代下,企业面临着前所未有的机遇和挑战。为顺应这一趋势,众多企业纷纷踏上了数字化转型的征程,其中就包括玉柴集团。值得一提的是,在玉柴集团转型过程中,SAP、浪潮信息等国际一流厂商予以了强大的算力支持&…

SSH远程管理 远程访问及控制

SSH远程管理 SSH(Secure Shell) 是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功 能。SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令。与早 期的 Telent (远程登录)、RSH(Remote Shell, 远程执行命…

蓝桥青少一月 STEMA-Python 测评第一题

第一题(难度系数 2,18 个计分点) (注.input()输入函数的括号中不允许添加任何信息) 编程实现: 给定一个正整数 N,输出 N 除以 3 的商。 输入描述:输入一个正整数 N 输出描述:输出 N 除以 3 的商…

快团团新人怎么找供货团长?免费教程一学就会!

作为快团团的新手,想要寻找供货团长,可以按照以下步骤进行: 打开微信:首先,在您的手机上打开微信应用。 搜索快团团:在微信顶部的搜索框中输入“团长运营之家”,选择出现的“团长运营之家”公号…

纯血鸿蒙APP第三方库——MpChart运动健康场景实践案例

介绍 MpChart是一个包含各种类型图表的图表库,主要用于业务数据汇总,例如销售数据走势图,股价走势图等场景中使用,方便开发者快速实现图表UI,MpChart主要包括线形图、柱状图、饼状图、蜡烛图、气泡图、雷达图、瀑布图…

【JAVA进阶篇教学】第十五篇:Java中AQS讲解

博主打算从0-1讲解下java进阶篇教学,今天教学第十五篇:Java中AQS讲解。 在Java并发编程中,AQS(AbstractQueuedSynchronizer)是一个重要的框架,用于实现同步器和锁的基础。它提供了一种灵活的方式来实现各种…

SpringSecurity6实现动态权限,rememberMe、OAuth2.0授权登录,退出登录等功能

本文章对应视频可在B站查看SpringSecurity6对应视频教程,记得三连哦,这对我很重要呢! 温馨提示:视频与文章相辅相成,结合学习效果更强哦! 系列文章链接 1、初识SpringSecurity,认识主流Java权限…

2005-2022年各省共同富裕指数数据(含原始数据+结果)

2005-2022年各省共同富裕指数数据(含原始数据结果) 1、时间:2005-2022年 2、来源:统计年鉴、各省年鉴 3、范围:31省 4、指标:年份、行政区划代码、地区、人均可支配收入_元、人均消费支出_元、恩格尔系…

ASP.NET Web Api 如何使用 Swagger 管理 API

前言 Swagger 是一个开源的框架,支持 OpenAPI 规范,可以根据 API 规范自动生成美观的、易于浏览的 API 文档页面,包括请求参数、响应示例等信息,并且,Swagger UI 提供了一个交互式的界面,可以帮助我们快速…

STK12 RPO模块学习(2)

一、Coast RPO Sequence 这个序列运行卫星直到它达到了下面三个条件之一。 1)截至时间。2)圈数到达了限制。3)其他条件,比如近地点。 默认情况下,Astrogator使用“Earth HPOP Default v10”预报器。你能够修改呈其他修改器。下…