Em hospedagem, é muito comum você ver as pessoas falando sobre Load de um servidor. O load, nas plataformas Unix, é um modo de se saber quantos processos estão na fila, ou seja, esperando sua vez de usar o processador. O ideal, é, sempre ter o load 1 para 1.
O 1 para um, seria do seguinte modo. Em máquinas com somente um processador, o load ideal, é, sempre, abaixo de 1. Quando ele estiver acima, você deve observar a máquina e ver se ela cai o rendimento com o load muito alto.
Em alguns casos, as máquinas aguentam load intensos, como 120, 130, mas isto não é legal. O enfileiramente de processos caracteriza, realmente, que algo está errado e gerando muitas requisições ao processador, gerando uma queda geral de rendimento, desde queda no rendimento de acesso ao disco a coisas bem piores.
Assim, tendo em vista isto, na última semana procurei algumas "formas" de monitorar isto na DREAMHOST , local onde meu site atualmente é hospedado. Como tenho acesso shell a minha conta, foi com isto que eu consegui fazer a maioria das coisas ( ah, se você ainda utiliza os servidores com CPANEL , terá que ver se seu host fornece a possibilidade de rodar estes scripts. Lembrando, este artigo não é voltado para quem tem servidores em hosts deste tipo, pois não irá explicar como configurar isto nas telas do CPANEL ).
Bom, como tudo em SL a primeira coisa que temos que fazer, é procurar se não há algo do tipo que você queira, já pronto. Literalmente, achei uma suite de monitoramente, usando o rrdtool, em um fórum dentro do site LinuxBSD , que foi muito útil. Na realidade, ele cobria várias coisas que eu precisava, que era uso de CPU, uso de Memória e número de processos rodando na minha conta. Com ele eu teria uma base do uso da CPU, que é um dos grandes problemas em queda de rendimento da máquina, uso da memória, que pode ter alguns picos gerando problemas no rendimento de um servidor e ainda, o número de processos que rodam na minha conta. Assim, eu poderia saber se minha conta está gerando problemas a DREAMHOST como um todo, ou é outra pessoa.
Ajuda para caramba.
Assim, o que deve ser feito é baixar estes arquivos aqui e modificá-los para rodar na DREAMHOST. Como fazê-lo ? Em todos os arquivos procure a variável $path e mude-a para o diretório onde você quer gravar as estatísticas.
$path = "/path/to/estatisticas";
E pimba, você já tem criados os arquivos de estatísticas.
Lembre-se de criar também os indexes, com os comandos, constantes no pacote :
$ php gera_indexes.php cpu/memoria/processos
$ php gera_index_principal.php
E, pronto, está tudo ok :-) Coloque os scripts para rodar de cinco em cinco minutos no server e você terá uma base do que está acontecendo. Criei um pequeno wrapper para rodar os comandos todos de uma vez só :-)
——— corte aqui —————-
#!/bin/sh
PATH=/bin:/usr/bin:/usr/local/bin
DATA=$(date)
php /pathto/cpu.php
php /pathto/memoria.php
php /pathto/processos.php
———- corte aqui —————
Mas, mesmo assim, ainda faltava para mim, um que medisse realmente a fila de processo, o load avg. Estava afim de testar o python_rrd, mas ele não está disponível na DREAMHOST . Aí, também, fiquei sem paciência de mexer com o php, porque no fim, ele simplesmente gerava uma chamada system ou exec para o sistema operacional, como se fosse um shell script comum.
Portanto, sentei na cadeira e pensei em criar um shell script. Consegui, fazendo aquela famosa pesquisa generalizada na internet e na documentação do rrdtool :-)
O comando abaixo, cria da base rrd, da um update na mesma e ainda, plota os gráficos. Todo em shell script, para alegria do servidor, que não vai ter seu load aumentado por causa deste pequeno processo :-)
———- corte aqui —————-
#/bin/sh
PATH=/bin:/usr/bin:/usr/local/bin
path="/pathto/estatisticas"
mkgraph()
{
tempo=$1
hoje=$(date -d now +'%s')
tstamp=$(date)
case $tempo in
"day")
tit="Diario";
;;
"week")
tit="Semanal";
;;
"month")
tit="Mensal";
;;
"year")
tit="Anual";
;;
esac
rrdtool graph
$path/loadavg-$tempo.png
-s -1$tempo -t "Processos na fila - $tit" -h 100 -w 600 -l 0
-a PNG -v 'Processos na Fila ' –lazy VRULE:$hoje#FF0000 HRULE:100#FF0000
DEF:1minavg=$path/loadavg.rrd:1min:AVERAGE
AREA:1minavg#0000dd:"1-min load avgs"
GPRINT:1minavg:LAST:"Atual:%3.2lf"
GPRINT:1minavg:MIN:"Min:%3.2lf"
GPRINT:1minavg:AVERAGE:"Med:%3.2lf"
GPRINT:1minavg:MAX:"Max:%3.2lfn"
DEF:5minavg=$path/loadavg.rrd:5min:AVERAGE
AREA:5minavg#00B700:"5-min load avgs"
GPRINT:5minavg:LAST:"Atual:%3.2lf"
GPRINT:5minavg:MIN:"Min:%3.2lf"
GPRINT:5minavg:AVERAGE:"Med:%3.2lf"
GPRINT:5minavg:MAX:"Max:%3.2lfn"
DEF:15minavg=$path/loadavg.rrd:15min:AVERAGE
AREA:15minavg#FFFF00:"15-min load avgs"
GPRINT:15minavg:LAST:"Atual:%3.2lf"
GPRINT:15minavg:MIN:"Min:%3.2lf"
GPRINT:15minavg:AVERAGE:"Med:%3.2lf"
GPRINT:15minavg:MAX:"Max:%3.2lfn"
COMMENT:"$tstampr"
}
case $1 in
"c")
rrdtool create $path/loadavg.rrd
DS:1min:GAUGE:600:U:U
DS:5min:GAUGE:600:U:U
DS:15min:GAUGE:600:U:U
RRA:AVERAGE:0.5:1:576
RRA:AVERAGE:0.5:6:672
RRA:AVERAGE:0.5:24:744
RRA:AVERAGE:0.5:288:732
RRA:MAX:0.5:1:576
RRA:MAX:0.5:6:672
RRA:MAX:0.5:24:744
RRA:MAX:0.5:288:732
;;
"u")
echo $(uptime | sed -e 's/^.load average.: //' -e 's/ //g' |
awk -F, "{ printf("update $path/loadavg.rrd N:%f:%f:%f",$1, $2, $3)}")
| rrdtool -
;;
"g")
mkgraph day
mkgraph week
mkgraph month
mkgraph year
;;
esac
—————– corte aqui —————————-
Você deve executar assim. Primeiramente, no seu prompt digite a opção c , para criar a base do rrdtool. Depois coloque no cron um job para rodar este comando de cinco em cinco minutos, para pegar os valores e atualizar a base ( opção u ).
Também, é legal gerar de cinco em cinco minutos, os gráficos ( opção g ).
Abaixo, como deve ser feito :-)
$ sh sysload.sh c
$ sh sysload.sh u
$ sh sysload.sh g
E, no crontab :
*/5 * * * * /bin/sh /pathto/sysload.sh u & /bin/sh /pathto/sysload.sh g
E, finalmente, você vai ter em mãos os gráficos da sua conta na DREAMHOST . Ah, um detalhe, para gerar a página inicial, com o seu gráfico do loadavg, utilize esta versão do código do gera_indexes.php :-)