Scripting Help - se grep “Used: X GB” Y então

0

Eu procurei na internet por uma maneira de consultar uma RAM usada pelos hosts do ESXi, e encontrei uma que até incluía o Mhz usado para inicializar, em uma boa saída. Meu objetivo final real é obter um script XYMon para monitorar a saída. Eu posso fazer o script XYMon, mas não tenho idéia de como fazer com que a instrução IF THEN funcione.

Aqui está a saída da minha consulta:

[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

Eu preciso de uma instrução IF THAN que basicamente diz que IF (usado # de RAM) é maior que (Y), ENTÃO.

Se for possível tornar o script portátil, eu gostaria que houvesse um IF (usado número de RAM) > (% Total de RAM) ENTÃO . Dessa forma, posso publicar o script e as pessoas podem usá-lo sem modificar o parâmetro Y .

    
por FreeSoftwareServers 16.09.2016 / 05:27

3 respostas

0
#/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
    
por 16.09.2016 / 08:04
2
A porcentagem de

pode ser encontrada dessa maneira:

CMD > /tmp/esxihealth
percent=$(awk '/Memory Usage/ { printf "%d\n",100*$6/$9+.5 ;}' /tmp/esxihealth)

não há necessidade de tantos cachimbos.

no awk $6 selecionará o 6º campo (por padrão, o campo é separado por um ou mais espaços ou tabulação).

    
por 16.09.2016 / 06:53
1

Eu não sou o maior bash scripter, então alguém pode ter uma solução mais elegante, mas a solução abaixo funciona. Sua variável Y é a variável threshold no script e o nome do arquivo que contém os dados que você forneceu é chamado de 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
    
por 16.09.2016 / 06:32