스크립트 - grep "Used: X GB" > Y이면

스크립트 - grep "Used: X GB" > Y이면

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에서는 $66번째 필드가 선택됩니다(필드는 기본적으로 하나 이상의 공백이나 탭으로 구분됩니다).

답변2

저는 최고의 bash스크립터가 아니므로 누군가가 더 우아한 솔루션을 갖고 있을 수도 있지만 아래 솔루션이 효과적입니다. 변수 Ythreshold스크립트의 변수이며 제공한 데이터가 포함된 파일 이름은 다음과 같습니다 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

관련 정보