【www.bbyears.com--心得体会】
一直以来我都以每个月至少一篇原创技术文章来要求自己,不过有的时候真的太懒了,在这里鄙视一下自己。
今天已经是这个月的最后一天了,其实近期的工作,有很多东西都是可以总结成文章分享给大家的。
有一些用Python和Shell写的脚本,我都放到了GitHub上,其中一个就是XCP/XenServer资源监控的脚本。
XCP/XenServer的XenCenter只有Windows下的客户端,命令行要获取可用的CPU,内存以及磁盘,并没有那么方便,需要通过各个命令行去获取。有的命令还必须在host主机本身运行才可以,比如 xl,因此我在各个XCP/XenServer的宿主OS之间都配置了ssh-key的信任。
我们的环境是由10多台物理服务器装上XCP构成的一个Pool,Pool的Manager是第一个XCP,然后存储是用的每台服务器本身的硬盘。
脚本的输出结果如下:
[root@xen1 ~]# vm_monitor
Host xen1: vm-pdb1a vm-rdb1b
Available: Mem=13/95G Disk=6/1108G CPU=18/24Cores
Host xen2: vm-pdb1b vm-rdb1a
Available: Mem=13/95G Disk=6/1108G CPU=18/24Cores
Host xen3: vm-ads10 vm-ads3 vm-api3 vm-cp3 vm-m1 vm-relay1
Available: Mem=13/63G Disk=151/549G CPU=8/24Cores
Host xen4: vm-ads4 vm-c1 vm-log2 vm-mc2
Available: Mem=22/63G Disk=11/549G CPU=12/24Cores
...
具体的脚本内容如下:
#!/bin/bash
host_list=$(xe vm-list params | grep "Control domain on host: " | awk -F ": " "{print $3}"| cut -d . -f 1 | sort -n)
for host in $host_list
do
guest_vm=$(ssh $host "xl list-vm |awk "{print $3}"| grep -vw name | sort -n")
t_mem_m=$(ssh $host "xl info | grep total_memory | cut -d : -f 2")
f_mem_m=$(ssh $host "xl info | grep free_memory | cut -d : -f 2")
t_mem_g=$(($t_mem_m/1024))
f_mem_g=$(($f_mem_m/1024))
disk_uuid=$(xe sr-list | grep -A 2 -B 1 "Local storage" | grep -B 3 -w "$host" | grep uuid | awk -F ": " "{print $2}")
t_disk_b=$(xe sr-param-list uuid=$disk_uuid | grep physical-size | cut -d : -f 2)
u_disk_b=$(xe sr-param-list uuid=$disk_uuid | grep physical-utilisation | cut -d : -f 2)
f_disk_b=$(($t_disk_b-$u_disk_b))
t_disk_g=$(($t_disk_b/1024/1024/1024))
f_disk_g=$(($f_disk_b/1024/1024/1024))
t_cpu_num=$(ssh $host "xe host-cpu-info | grep -w cpu_count | awk -F ": " "{print $2}"")
v_cpu_sum=0
for vm in $guest_vm
do
vm_uuid=$(xe vm-list | grep -B 1 -w $vm | head -n 1 | awk -F ": " "{print $2}")
v_cpu_num=$(xe vm-list params=VCPUs-number uuid=${vm_uuid} | grep -w VCPUs | awk -F ": " "{print $2}")
v_cpu_sum=$(($v_cpu_sum+$v_cpu_num))
done
f_cpu_num=$(($t_cpu_num-$v_cpu_sum))
echo ""
echo Host $host: $guest_vm
echo "Available: Mem=${f_mem_g}/${t_mem_g}G Disk=${f_disk_g}/${t_disk_g}G CPU=${f_cpu_num}/${t_cpu_num}Cores"
done