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