监控Hyper-V 宿主机上的虚拟机数量

网友投稿 734 2022-09-12

监控Hyper-V 宿主机上的虚拟机数量

监控Hyper-V 宿主机上的虚拟机数量

目的

可以监控每台Hyper-V宿主机上虚拟机总数、Running状态的数量、off状态的数量。

思路

powershell脚本获取每台相关数据,zabbix_sender到zabbix server。设置为定时任务。 zabbix server 创建对应模板,宿主机关联到模板。

问题

脚本集中在某台服务器上运行,由这台服务器搜集所有宿主机数据。定时任务只在这台服务器上设置即可。 脚本分散在每台宿主机上,各自搜集各自的数据。 每台宿主机都要跑一个定时任务。

考虑到分散运行脚本的话,定时任务维护量大。 所以选择通过将脚本集中在某台服务器上运行,在最后也会提供分散运行如何实现。

实现

PS脚本

$computers = "Hyper-V01", "Hyper-V02", "Hyper-V03", "Hyper-V04", "Hyper-V05", "Hyper-V06", "Hyper-V07" foreach ($h in $computers) { $zabbix_host = $h + "-PM" #构造主机名对应到zabbix中的host name字段。 $vmcount = (Get-VM -ComputerName $h | Measure-Object).Count $vm_on_count = (Get-VM -ComputerName $h | Where-Object {$_.State -eq "Running"}|Measure-Object).Count $vm_off_count = (Get-VM -ComputerName $h | Where-Object {$_.State -ne "Running"}|Measure-Object).Count C:\zabbix\bin\zabbix_sender.exe -z ZABBIX_SERVER_IP -s $zabbix_host -k vm.count -o $vmcount C:\zabbix\bin\zabbix_sender.exe -z ZABBIX_SERVER_IP -s $zabbix_host -k vm.oncount -o $vm_on_count C:\zabbix\bin\zabbix_sender.exe -z ZABBIX_SERVER_IP -s $zabbix_host -k vm.offcount -o $vm_off_count }

之后将所有宿主机关联到该模板。

效果

如果选择在每台宿主机单独运行脚本,怎么高效的实现呢?

何为高效?

脚本写好后,高效复制到每台宿主机。(不能人工复制吧?) 高效批量创建定时任务。(不能人工逐台创建吧)

脚本

$h = hostname $zabbix_host = $h.ToString() + "-PM" $vmcount = (Get-VM | Measure-Object).Count $vm_on_count = (Get-VM | Where-Object {$_.State -eq "Running"}|Measure-Object).Count $vm_off_count = (Get-VM | Where-Object {$_.State -ne "Running"}|Measure-Object).Count C:\zabbix\bin\zabbix_sender.exe -z ZABBIX_SERVER_IP -s $zabbix_host -k vm.count -o $vmcount C:\zabbix\bin\zabbix_sender.exe -z ZABBIX_SERVER_IP -s $zabbix_host -k vm.oncount -o $vm_on_count C:\zabbix\bin\zabbix_sender.exe -z ZABBIX_SERVER_IP -s $zabbix_host -k vm.offcount -o $vm_off_count

将脚本批量拷贝到目标机器

方式一:powershell脚本拷贝

Script_name:copy.ps1

$PC = Get-Content("C:\computer_list.txt") # hyper-v宿主机列表,一行一个。 $PATH_script = "C:\zabbix\scripts\count_vm.ps1" $i = 0 foreach ($h in $PC){ $i++ Copy-Item -Path $PATH_script -Destination \\$h\C$\zabbix\scripts\ -Recurse -Force if ($h -eq $PC[-1]){ Write-Progress -Activity "进度显示" -status "正在处理最后一台主机 $h !" Write-Output "总计处理 $i 台主机,传输完毕!" #Start-Sleep -Seconds 20 pause } else{ Write-Progress -Activity "进度显示" -status "正在处理 第 $i 台主机 $h ,请耐心等待!" -PercentComplete ($i/$PC.count*100) } }

方式二: salt拷贝脚本到目标机器 [root@BJ-SaltStack-Node1 sync_file]# salt *Hyper-v* cp.get_file salt://sync_file/count_vm.ps1 c:\\zabbix\\scripts

### 在目标机器批量创建定时任务 该部分可以详见以下博文,分别对应了两种创建定时任务的方法。 [PowerShell创建定时任务计划]( [SaltStack创建WIN定时任务计划](https://blog./magic3/2583246)

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:模块二之序列化模块以及collections模块
下一篇:BAT脚本批量修改XML文件内容
相关文章

 发表评论

暂时没有评论,来抢沙发吧~