De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Gustavo Mendes de Carvalho
Data de Publicação: 11 de agosto de 2011
Há alguns meses atrás eu me lembro de ter visto uma dica muito interessante sobre a criação de gráficos de ocupação de espaço em disco, utilizando para isso a Google Chart Tools, porém a criação destes gráficos ficava sempre vinculada ao envio dos dados para o Google lhe devolver uma URL com o respectivo gráfico.
Porém como em alguns casos não é possível que uma máquina não tenha o acesso à Internet, fiz uma pesquisa sobre métodos de se criar gráficos em Linux, quando me deparei com uma ferramentra chamada GNUPlot.
Esta ferramenta é muito poderosa e bem simples de se usar. Basicamente, esta ferramenta gera diversos tipos de gráficos, tendo como informações de entrada apenas uma lista numérica, do tipo:
cat lista.dat
31/05/2010 33670 01/06/2010 23700 02/06/2010 23950 03/06/2010 22455 04/06/2010 10939 05/06/2010 5498 06/06/2010 23168 07/06/2010 23096 08/06/2010 23954 09/06/2010 24102 10/06/2010 22909 11/06/2010 11639 12/06/2010 6770 13/06/2010 26603 14/06/2010 25437 15/06/2010 25597 16/06/2010 24613 17/06/2010 23166 18/06/2010 11474 19/06/2010 6659 20/06/2010 26154 21/06/2010 26301
Com base nesta lista, eu decidi verificar em um gráfico estes valores. Inicialmente eu criei um arquivo texto simples, com as entradas necessárias necessárias ao GNUPlot para criar um gráfico de barras bem simples.
cat grafico.plot
reset set terminal png size 700,200 set output '/var/www/graf/grafico.png' set size 1,1 set boxwidth 0.7 relative set style fill solid 1.0 border lt -1 set grid set xdata time set format x "%d" set xrange ["31/05/2010":"21/06/2010"] set xlabel "Dias" set ylabel "Total" plot '/var/www/graf/lista.dat' using 1:2 with boxes t'' exit
Depois disso, basta executar o comando
root@linux:/var/www/graf# gnuplot grafico.plot
O resultado foi um gráfico bastante interessante. Copiem estes arquivos e executem os comandos.
Baseado nisso, eu então resolvi criar scripts em shell para monitorar a CPU de 1 servidor windows que eu tenho. Para isso, eu criei este script abaixo, que faz a coleta das informações de consumo de CPU no meu servidor, armazena o histórico das informações, gera o arquivo plot específico, e cria o gráfico:
#!/bin/bash #------------------------------------------------------------- # # Este script tem a funcao de coletar as informacoes de # consumo de CPU dos servidores fisicos, adicionando estes # valores em um arquivo de texto, para que possa ser # apresentado em uma pagina de monitoracao # # O formato do arquivo de saida segue o padrao # dd/mmm/yyyy hh:mm CPU1 CPU2 IPServidor # # data: 09/jul/2011 # por: Gustavo Mendes de Carvalho #------------------------------------------------------------- # Comandos usados BASEDIR="/var/www/cpuwin" ARQUIVOPLOT="$BASEDIR/plot.gnu" SNMPGET="/usr/bin/snmpget" AWK="/usr/bin/awk" TAIL="/usr/bin/tail" GREP="/bin/grep" ECHO="/bin/echo" RM="/bin/rm" GNUPLOT="/usr/bin/gnuplot" COMUNIDADE="comunidadesnmp" IP1="10.1.28.17" OID1CPU="1.3.6.1.2.1.25.3.3.1.2.2" OID2CPU="1.3.6.1.2.1.25.3.3.1.2.3" ARQDADOS="$BASEDIR/cpu-$IP1.dat" ARQ1CPU="$BASEDIR/cpu1.tmp" ARQ2CPU="$BASEDIR/cpu2.tmp" AGORA=`/bin/date "+%d/%h/%Y %H:%M"` # Obtencao dos valores de consumo de CPU PERCENT1=`$SNMPGET -v 2c -c $COMUNIDADE $IP1 $OID1CPU | $AWK '{print $4}'` PERCENT2=`$SNMPGET -v 2c -c $COMUNIDADE $IP1 $OID2CPU | $AWK '{print $4}'` $ECHO $AGORA" "$PERCENT1" "$PERCENT2" "$IP1 >> $ARQDADOS #Sequencia de comandos para a geracao dos graficos $TAIL -180 $ARQDADOS | $GREP $IP1 | $AWK '{print $3}'> $ARQ1CPU $TAIL -180 $ARQDADOS | $GREP $IP1 | $AWK '{print $4}'> $ARQ2CPU # Criacao do arquivo plot para a geracao do grafico $ECHO "reset" > $ARQUIVOPLOT $ECHO "set grid front linetype 0 linewidth 1.000, linetype 0 linewidth 1.000" >> $ARQUIVOPLOT $ECHO "set terminal png size 430,220" >> $ARQUIVOPLOT $ECHO -n "set output 'cpu-" >> $ARQUIVOPLOT $ECHO $IP1".png'" >> $ARQUIVOPLOT $ECHO "set size 1,1" >> $ARQUIVOPLOT $ECHO "set grid ytics" >> $ARQUIVOPLOT $ECHO -n 'set title "CPU Servidor ' >> $ARQUIVOPLOT $ECHO $IP1 '(2 cpus)"' >> $ARQUIVOPLOT $ECHO "show title" >> $ARQUIVOPLOT $ECHO "unset xtics" >> $ARQUIVOPLOT $ECHO 'set xlabel "3 2 horas 1 0' >> $ARQUIVOPLOT $ECHO "plot '$ARQ1CPU' with filledcurves x1 lt 2 lw 1 t'', \\" >> $ARQUIVOPLOT $ECHO " '$ARQ2CPU' with lines lt 1 lw 2 t''" >> $ARQUIVOPLOT $ECHO "exit" >> $ARQUIVOPLOT # Criacao do grafico cd $BASEDIR $GNUPLOT $ARQUIVOPLOT # Exclusao dos arquivos tempporarios $RM -fr $ARQ1CPU $ARQ2CPU $ARQUIVOPLOT
Feito isso, basta criar uma entrada no crontab de seu linux, para executar este script a cada alguns minutos. É claro que eu ainda estou melhorando este script para fazer a coleta de consumo de CPU em mais de 1 servidor, mas ainda não está terminado.
Para ver o arquivo plot final, basta comentar a última linha deste script, que remove este arquivo. Com isso, voces poderão ver como ficam as instruções neste arquivo.
Esta ferramenta também disponibiliza um excelente manual em seu site http://gnuplot.info/, além de vários exemplos de gráficos que podem ser gerados com ela.
Fiquem à vontade para entrar em contato, e aceito sugestões de melhoria :-)
Um abraço a todos
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários