一直以來我都以每個月至少一篇原創技術文章來要求自己,不過有的時候真的太懶了,在這裡鄙視一下自己。
今天已經是這個月的最後一天了,其實近期的工作,有很多東西都是可以總結成文章分享給大家的。
有一些用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 |