我在互联网上搜索了一种查询 ESXi 主机使用 RAM 的方法,我发现了一种方法,其中甚至包含了启动时使用的 Mhz,并且输出结果不错。我真正的最终目标是获得 XYMon 脚本来监视输出。我可以制作 XYMon 脚本,但我不知道如何让该IF THEN
语句发挥作用。
这是我的查询的输出:
[Host] Name : esxi.domain.com
[Host] CPU Detail : Processor Sockets: 1, Cores per Socket 4
[Host] CPU Type : Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz
[Host] CPU Usage : Used: 836 Mhz, Total: 16028 Mhz
[Host] Memory Usage : Used: 59 GB, Total: 64 GB
我需要一份IF THAN
声明,基本上说如果(已使用的 RAM 数量)大于 (Y),则。
如果可以使脚本可移植,我希望有一个IF(已用 RAM 数量)>(RAM 总量百分比)THEN。这样我就可以发布脚本,人们可以使用它而无需修改参数Y
。
答案1
百分比可以这样找到:
CMD > /tmp/esxihealth
percent=$(awk '/Memory Usage/ { printf "%d\n",100*$6/$9+.5 ;}' /tmp/esxihealth)
不需要那么多管道。
在 awk 中将$6
选择第 6 个字段(默认情况下字段由一个或多个空格或制表符分隔)。
答案2
我不是最伟大的bash
脚本编写者,所以有人可能有更优雅的解决方案,但下面的解决方案有效。您的Y
变量是threshold
脚本中的变量,包含您给出的数据的文件的名称称为memstats
:
#!/bin/bash
memory=$(grep "Memory Usage" memstats | grep -o '[0-9]*' | tr '\n' ' ')
used=$(echo $memory | cut -d' ' -f1)
total=$(echo $memory | cut -d' ' -f2)
threshhold=50
if (($used > $threshhold)); then
echo "do this (used is greater than threshold)"
else
echo "do this else (used is less than threshold)"
fi
答案3
#/bin/bash
memory=$(grep "Memory Usage" /tmp/esxihealth | grep -o '[0-9]*' | tr '\n' ' ')
ramused=$(echo $memory | cut -d' ' -f1)
ramtotal=$(echo $memory | cut -d' ' -f2)
rampercent=$((200*$ramused/$ramtotal % 2 + 100*$ramused/$ramtotal))
ramthreshold=95
if (( rampercent > ramthreshold )); then
ramhigh=true
fi
cpu=$(grep "CPU Usage" /tmp/esxihealth | grep -o '[0-9]*' | tr '\n' ' ')
cpuused=$(echo $cpu | cut -d' ' -f1)
cputotal=$(echo $cpu | cut -d' ' -f2)
cpupercent=$((200*$cpuused/$cputotal % 2 + 100*$cpuused/$cputotal))
cputhreshold=90
if (( cpupercent > cputhreshold )); then
cpuhigh=true
fi
if [ ! -z "$ramhigh" ] || [ ! -z "$cpuhigh" ]; then
...
else
...
fi