一个简单的统计 vcenter 存储空间的脚本
公司在多个分支建有 vcenter 服务器,挂载了些存储,主要以 nfs 和 san 为主。想做一个简单的统计,将目前各分支 vcenter 中存储容量情况进行统计,并进行汇总。在网上找了下,貌似没有现成的,所以就简单的弄了一个。
首先在某个 vcenter 下找台 esxi 服务器,并确保它已经挂载了所有的可用的存储,然后开通它的 ssh 服务。找个目录,如 /tmp 新增一个脚本:
cat /tmp/getAllStorageList.sh
#!/bin/sh # 用 df 获取挂载存储的列表,在这儿因为对存储进行了规则命名,因此列出存储命名中带“stor”的,并排除带“local”的,将结果放到 /tmp/df-list.txt 中。 df | grep stor | grep -v local > /tmp/df-list.txt # 把获取时间加上,指定东 8 区。 echo "current time:" $(TZ=UTC-8 date +%Y-%m-%d" "%H:%M:%S) > /usr/lib/vmware/hostd/docroot/ui/vcs1-stor-list.txt # 对 NFS 存储的总容量、已用、可用等进行统计。把结果放在 esxi 的管理页面的根下面 /usr/lib/vmware/hostd/docroot/ui/ 是为了方便后面调用。 # NFS awk '/NFS/ {sum +=$2};END {print "nfs total:" sum}' /tmp/df-list.txt >> /usr/lib/vmware/hostd/docroot/ui/vcs1-stor-list.txt awk '/NFS/ {sum +=$3};END {print "nfs used:" sum}' /tmp/df-list.txt >> /usr/lib/vmware/hostd/docroot/ui/vcs1-stor-list.txt awk '/NFS/ {sum +=$4};END {print "nfs available:" sum}' /tmp/df-list.txt >> /usr/lib/vmware/hostd/docroot/ui/vcs1-stor-list.txt # 对 SAN 存储的总容量、已用、可用等进行统计 # SAN awk '/san/ {sum +=$2};END {print "san total:" sum}' /tmp/df-list.txt >> /usr/lib/vmware/hostd/docroot/ui/vcs1-stor-list.txt awk '/san/ {sum +=$3};END {print "san used:" sum}' /tmp/df-list.txt >> /usr/lib/vmware/hostd/docroot/ui/vcs1-stor-list.txt awk '/san/ {sum +=$4};END {print "san available:" sum}' /tmp/df-list.txt >> /usr/lib/vmware/hostd/docroot/ui/vcs1-stor-list.txt
然后再把这个脚本加到 esxi 的 cron 里面去自动执行它。esxi 的 cron 调用跟 Linux 不太一样。
修改 /var/spool/cron/crontabs/root 这个文件,在下面加一行:
*/10 * * * * /bin/sh /tmp/getAllStorageList.sh
然后保存退出。在这儿要留意下, vi 会提示是只读文件,所以要用 wq! 才可以。
但它不会马上生效,需要重新启动 crond 的服务。我们先杀掉 crond,然后再重启它。
cat /var/run/crond.pid #获得一个 pid,如 4654669 之类的。kill 掉它: kill 4654669 #然后再启动 crond: /usr/lib/vmware/busybox/bin/busybox crond #再看下 pid 是不是更新了: cat /var/run/crond.pid
然后等一会儿,我们就可以从 https://esxi1.mydomain.com/ui/vcs1-stor-list.txt 页面中获取相关数据了。
至此,我们就实现了自动收集 vcenter 的存储容量统计结果了。如果要收集多台,就如法炮制就行。
后面的综合统计和展示就很简单了,弄一个页面,用脚本抓取 vcs1-stor-list.txt 之类的页面的内容,然后解析,然后做统计。当然还可以做成存储空间告警……