【小吃培训】XCP/XenServer资源监控脚本程序代码

更新时间:2018-11-01    来源:心得体会    手机版     字体:

【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

本文来源:http://www.bbyears.com/fanwenwang/45498.html

热门标签

更多>>

本类排行