监控Hyper-V 宿主机上的虚拟机数量
Posted 史振宁
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了监控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
-
定时任务
每2h运行一次 - Zabbix中创建模板
之后将所有宿主机关联到该模板。
- 效果
如果选择在每台宿主机单独运行脚本,怎么高效的实现呢?
何为高效?
- 脚本写好后,高效复制到每台宿主机。(不能人工复制吧?)
- 高效批量创建定时任务。(不能人工逐台创建吧)
脚本
$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创建定时任务计划](https://blog.51cto.com/magic3/2607133)
[SaltStack创建WIN定时任务计划](https://blog.51cto.com/magic3/2583246)
以上是关于监控Hyper-V 宿主机上的虚拟机数量的主要内容,如果未能解决你的问题,请参考以下文章