Esta é uma atualização do meu artigo original sobre o assunto, publicado em março de 2000 no br-linux.org. A idéia é mostrar como é fácil monitorar qualquer variável numérica do seu sistema (exemplos: uso de banda de rede, uso do disco, quantidade de usuários conectados a um servidor) usando o MRTG em conjunto com pequenos scripts de aquisição de dados - dispensando o protocolo SNMP e alterações de configuração. Claro que o SNMP tem seus usos, mas não há porque ativá-lo onde não há necessidade...
Augusto C. Campos - brain@matrix.com.br
Nota: esta é uma atualização feita no início de 2004 do meu artigo original sobre o assunto, publicado em março de 2000 no br-linux.org.
MRTG
O MRTG (www.mrtg.org) é um software livre que facilita enormemente a tarefa de acompanhar o funcionamento do seu sistema. Embora o seu foco seja o acompanhamento de componentes de rede através do protocolo SNMP, você pode muito bem utilizar este software para verificar o funcionamento do seu computador doméstico ou estação de trabalho mesmo sem instalar o suporte a SNMP - basta usar a sua interface com scripts shell.
A imagem que você vê ao lado é do conjunto de gráficos default gerados para uma interface de rede local (no exemplo, um modem - ppp0) mostrando a quantidade de bytes transmitida e recebida nas últimas 24 horas, na última semana, no último mês e no último ano.
O site do MRTG tem muitos exemplos de como monitorar roteadores e outros equipamentos de rede com suporte a SNMP, mas muita gente procura informações sobre a interface do MRTG com programas externos, sem precisar de protocolos especializados em monitoramento nem de alterações na configuração de seus equipamentos. E isso se explica pela simplicidade com que é possível construir um script de monitoramento de qualquer coisa (uso de banda de rede, uso do disco, quantidade de usuários conectados a um sistema, etc.) e integrá-lo ao MRTG.
Nesta dica demonstrarei como utilizar o MRTG para gerar um gráfico do uso de sua CPU, ocupação da memória e tráfego de dados em uma conexão PPP. As explicações sobre o funcionamento do software ficam para outra ocasião, ou para o site oficial do MRTG (www.mrtg.org). Se você tem alguma noção de programação shell, não terá dificuldade em extrapolar os exemplos e monitorar o que quiser e puder.
Para completar, montaremos uma página HTML bastante interessante, incluindo os gráficos gerados pelo MRTG, para deixar como abertura do seu navegador.
Mãos à obra
Em primeiro lugar, é preciso ter o pacote MRTG instalado (todas as distribuições comerciais de Linux o incluem), e o seu kernel deve ter suporte ao pseudo-filesystem /proc habilitado e em operação (todas as distribuições de Linux habilitam por default), pois iremos coletar dados diretamente de seus componentes.
Nossos arquivos de exemplo serão instalados no diretório /home/brain/mrtg, mude de acordo com a sua conveniência.
Os scripts de aquisição de dados
Os scripts para interface com o MRTG se caracterizam por sempre retornarem dois valores na saída padrão, um em cada linha, a cada vez que são executados. Estes valores correspondem às variáveis (sempre duas)
monitoradas pelo script.
O script abaixo, bastante simples, extrai dados sobre o tráfego na interface passada como parâmetro no momento de sua execução (exemplo: ppp0, eth0...). Grave-o com o nome de mrtgstats-net.sh, e torne-o executável com o comando chmod 755 /home/brain/mrtg/mrtgstats-net.sh
#!/bin/sh
# mrtgstats-net.sh - Augusto Campos 2004
awk '
/'$1':/ {
$0=substr($0,index($0,":")+1);
print $1;print $9
}
' /proc/net/dev
Este segundo script extrai informações sobre a carga da CPU e o uso da memória, transforma em percentual e repassa ao MRTG. Grave-o com o nome de mrtgstats-cpu.sh, e torne-o executável com o comando chmod 755 /home/brain/mrtg/mrtgstats-cpu.sh
#!/bin/sh
unset LANG
mem=$(/usr/bin/free|grep ^-)
load=$(cat /proc/loadavg)
/bin/awk -v load="$load" -v mem="$mem" '
BEGIN {
split(load,loadstats)
print int(100*loadstats[2])
split(mem,memstats);
print int(100*memstats[3]/(memstats[3]+\
memstats[4]));
}'
Agora, trate de criar um arquivo de configuração para o MRTG, e grave-o com o nome de mrtg.conf:
WorkDir: /home/brain/mrtg
Target[ppp0]: `/home/brain/mrtg/mrtgstats-net.sh ppp0`
Title[ppp0]:"Tráfego no modem - ppp0"
MaxBytes[ppp0]:75000
PageTop[ppp0]: <h1>Tráfego de dados no modem local</h1>
Options[ppp0]: growright,bits,noinfo
Target[eth0]: `/home/brain/mrtg/mrtgstats-net.sh eth0`
Title[eth0]:"Tráfego na placa de rede - eth0"
MaxBytes[eth0]:1400000
PageTop[eth0]: <h1>Tráfego de dados na placa de rede</h1>
Options[eth0]: growright,bits,noinfo
Target[perf]:`/home/brain/mrtg/mrtgstats-cpu.sh`
Title[perf]:"Carga da CPU e Uso da Memória"
PageTop[perf]:"<h1>Carga da CPU e Uso da Memória</h1>"
Options[perf]: growright,noinfo,gauge
YLegend[perf]: Percentual
ShortLegend[perf]: %
MaxBytes[perf]: 100
Legend1[perf]: Carga da CPU
Legend2[perf]: Uso da memória real
LegendI[perf]: Carga
LegendO[perf]: Mem
Para testar o MRTG manualmente, basta executá-lo passando como parâmetro o caminho completo do seu arquivo de configuração, assim: mrtg /home/brain/mrtg/mrtg.conf
Nos dois primeiros testes é normal a exibição de mensagens relativas ao fato de os arquivos de dados ainda estarem vazios. A partir da terceira execução o programa deve passar a ser "silencioso".
Tudo está pronto! Agora inclua na sua crontab a linha para executar o MRTG a cada 5 minutos, passando como parâmetro o nome do arquivo de configuração que você criou, conforme o exemplo:
*/5 * * * * /usr/bin/mrtg /home/brain/mrtg/mrtg.conf
Após 5 minutos você poderá ver o início dos seus gráficos se formando nos arquivos em formato html que serão criados no diretório /home/brain/mrtg. Antes de 5 minutos, os dados aparecerão zerados, mesmo que você execute várias vezes o mrtg manualmente - isto é uma consequência do modo como ele calcula suas estatísticas.
Usando em uma página de abertura do seu navegador
No ano 2000, quando escrevi a primeira versão deste tutorial, minha página de abertura do navegador web era
o arquivo HTML copiado abaixo (com o nome de abertura.html), contendo um formulário para pesquisa rápida no Google, link para os sites que eu visitava com mais frequência, e inclusão de duas imagens geradas automaticamente pelo MRTG. Para usar o meu arquivo, tudo o que você tem que fazer é colá-lo em um arquivo abertura.html no seu diretório do mrtg, e depois editá-lo até ficar a seu gosto.
Veja a listagem do abertura.html:
<head> <title>Augusto C. Campos</title> </head>
<body bgcolor=black text=yellow link=white
vlink=white>
<h1 align=center>Augusto César Campos</h1> <table
border=0 width=100%> <tr><td>
<form action=http://www.google.com/search
method=get name=f> <table><tr><td> <input
type=text value="" framewidth=4 name=q size=55
maxlength=256> <font size=-1
face=arial,sans-serif> <br><center><input
type=radio name=lr value="" checked>Pesquisar na
Web <input type=radio name=lr value=lang_pt
>Pesquisar páginas em Português</center> </font>
</td><td> <input name=btnG type=submit
value="Pesquisa Google"> <br><input name=btnI
type=submit value="Busca Direta"><input name=hl
type=hidden value=pt> </td></tr></table> </form>
</td><td> <a
href=http://br-linux.org/>br-linux.org</a> <br><a
href=http://forum.br-linux.org>Fórum</a>
href=http://slashdot.org/>Slashdot</a>
<br><a href=http://pontobr.org/>PontoBR</a>
<br><a href=http://linuxtoday.com/>LinuxToday</a>
<br><a href=http://freshmeat.net/>Freshmeat</a>
</td></tr>
<tr><td colspan=2><center> <p><h1>Uso da CPU e
memória nas últimas 24 horas</h1> <img
src=perf-day.png> <br>(em verde: CPU ocupada. Em
azul: memória ocupada) <h1>Uso do modem nas
últimas 24 horas</h1> <img src=ppp0-day.png>
<br>(em verde: tráfego recebido. Em azul: tráfego
enviado) </center></td></tr> </table>
</body>
Conclusão
Com estes exemplos você poderá monitorar alguns aspectos importantes do seu sistema, e quem sabe se inspirar para criar scripts que monitorem outros itens. Para saber mais detalhes sobre o MRTG, não deixe de vistar o site oficial da ferramenta.
Postado por brain em janeiro 10, 2004 10:18 PM
» Postado por: Carlos Alan Peres em janeiro 16, 2004 03:20 PM, 200.165.187:
Olá,
Usei este seu script para monitorar a eth0 de meu servidor. Só que nada está sendo plotado. O arquivo de logs está sendo gerado. O que poderia estar acontecendo?
[]s
Alan
» Postado por: Nelson em janeiro 23, 2004 10:30 AM, 200.225.77.:
eu sei o que está acontecendo, voce é burro. se fosse inteligente o script estaria funcionando.
» Postado por: Fabio Silva em fevereiro 7, 2004 02:13 PM, 200.175.25.:
Cara, parabéns.
Fiz soh os ajustes necessários para as minhas interfaces e funcionou.
Bem mais prático.
Valeu.
» Postado por: Daniel em fevereiro 11, 2004 12:58 AM, 200.180.119:
Ola...
estou tentado monitorar o meu cpu mas quando eu vejo o uso pelo top, esta em 97,9% idle, mas quando eu vejo pelo grafico gerado polo mrtg esta em 55%, quando au uso de memoria esta ok, mas o uso do processador esta muito fora do que deveria ser.
att
Daniel
» Postado por: Marcel em fevereiro 20, 2004 05:01 PM, 200.232.197:
Muito bom este artigo. Instalei o mrtg no meu slack e funcionou numa boa. No comecou eu achei q nao tinha dado certo, pois ele nao mostrou nenhum relatorio. Depois vi que ele armazena em log as estatitiscas por periodo e ele vai mostrando... : )
Soh uma duvida: o que muda o mrtg com SNMP ? pq complica tanto a vida assim ?
Lembro-me de ter tentado levantar o servico em um conectiva a 5 anos atras e levei um pau danado por causa disso
Grato
» Postado por: edson em fevereiro 20, 2004 06:56 PM, 200.102.54.:
achei a matéria excelente, ela é simples, pratica e útil. No entanto o resultado dos log´s estão zerados... alguém sabe o que pode estar errado ?
» Postado por: Gilson em fevereiro 23, 2004 10:36 PM, 200.164.14.:
caro amigos como posso usar o MRTG para monitorar tràfego em determinados IPs de minha rede
» Postado por: edson em fevereiro 25, 2004 02:45 PM, 200.102.54.:
Agora meu MRTG, esta funcionando perfeitamente. Augusto, Obrigado pelo retorno. :)
» Postado por: Romulo em março 9, 2004 08:18 PM, 200.144.123:
Como posso configurar o MRTG com o SNMP?
» Postado por: André em março 10, 2004 02:06 PM, 200.206.212:
Olá eu fiz todo procedimento, mas na hora de fazer o teste, o mrtg me retorna alguns erros:
WARHING: Running ´/home/mrtg/mrtgstats-net.sh eth0´: Arquivo ou diretório não encontrado
WARNING: Could not get any data from external command ´/home/mrtg/mrtgstats-net.sh eth0´
Maybe the external command did not even start. Arquivo ou diretorio não encontrado
Obs: isso ocorre com todos as opções, seja eth1, perf e etc..... o que pode estar ocorrendo
» Postado por: Antenor em março 12, 2004 01:33 PM, 200.170.199:
Olá. Gostaria de pedir para o Edson ou o Augusto, se possível, registrar a ajuda sobre o MRTG estar com os logs zerados, pois estou enfrentando o mesmo problema.
Postado por: edson em fevereiro 25, 2004 02:45 PM, 200.102.54.:
Agora meu MRTG, esta funcionando perfeitamente. Augusto, Obrigado pelo retorno. :)
» Postado por: Daniel Freire em abril 8, 2004 09:53 AM, 200.167.251:
Caríssimos,
estranhamente os valores dos meus gráficos gerados ficam examente os mesmos, sempre!!
O uso da CPU em 100% (?!?) e de memória RAM 50%...
o consumo da banda tb parece ser sempre o mesmo...
Alguém tem alguma idéia?
» Postado por: Daniel Freire em abril 8, 2004 09:56 AM, 200.167.251:
Ah, esqueci de dizer:
Poxa, galera... ninguém aqui é burro... senão estaríamos implementando nas empresas produtos M$, com uma imensa preguiça de colocar a mão na massa...
Olha o respeito com os outros, neh... me ajuda ai, ô tal Nelson...
» Postado por: Wagner Quedi em abril 26, 2004 10:26 PM, 200.163.120:
Amigo, queria verificar o consumo de banda de cada maquina da minha rede, como poderia fazer isso usando o mrtg?
» Postado por: cesar augusto fresqui em abril 28, 2004 09:46 AM, 200.144.29.:
monitorar o uso do hd
meus 2 centavos ao artigo
#!/bin/bash
#este script concorda com os termos da gpl
#(!c) Cesar Augusto Fresqui - boyhammer@yahoo.com
#copie para /usr/local/bin/mrtg-hd.sh
#chmod +x /usr/local/bin/mrtg-hd.sh
if [ -e $1 ]
then
printf "parametro ausente\n"
else
total=`df | grep $1 | awk '{print $2}'`
livre=`df | grep $1 | awk '{print $3}'`
ocupado=`df | grep $1 | awk '{print $4}'`
percent_oc=$(($ocupado * 100 / $total))
percent_li=$((100 - $percent_oc))
#echo total: $total
#echo $ocupado
#echo $livre
echo "$percent_oc"
echo "$percent_li"
fi
# --cut here --
no mrtg.cfg
Target[hd]:`/usr/local/bin/mrtg-hd.sh hda2`
Title[hd]:"uso do hd"
PageTop[hd]:"uso do hd"
Options[hd]: growright,noinfo,gauge
YLegend[hd]: Percentual
ShortLegend[hd]: %
MaxBytes[hd]: 100
Legend1[hd]: espaco livre
Legend2[hd]: espaco ocupado
LegendI[hd]: Livre
LegendO[hd]: Ocupado
eh isso!![]'s
» Postado por: cesar augusto fresqui em abril 28, 2004 09:50 AM, 200.144.29.:
wagner, acho que para monitorar o consumo de banda de cada maquina voce poderia usar o bandwidthd
http://bandwidthd.sourceforge.net/
alem de monitorar o uso da banda de cada maquina, ele tbem mostra como foi usada a banda
eh isso!
[]'s
» Postado por: Anailson em maio 20, 2004 10:45 PM, 201.2.75.19:
Olá, como faço esse procedimento no Freebsd 4.7, onde fica o /proc/dev/net no freebsd?
Aguardo..
» Postado por: celio em junho 5, 2004 12:02 PM, 200.141.137:
quais os parametros do postfix que posso usar no mrtg (total de e-mail enviados e recebidos)
grato
» Postado por: Adriano R Guerreiro Laranjeira em junho 5, 2004 07:14 PM, 200.162.198:
Realmente,
parabéns ao editor deste artigo. Minha dúvida era exatamente sobre a necessidade (ou não) do SNMP pelo MRTG. Peguei o script acima e deu tudo certo.
Tive uma dificuldade devido o KWrite (ou o KDE, não sei) usar o caractere apóstrofo diferente do que está aqui. Depois de alguns erros ao iniciar o MRTG, troquei os apóstrofos do mrtg.cfg pelos daqui da página (copy & paste) e tudo rolou perfeito!
Parabéns pelo artigo, brain! E os "dois centavos" do Cézar Augusto são na verdade de valia muito maior, parabéns também! :)
[]s
Adriano!
O Arquivo Histórico do BR-Linux.org mantém no ar (sem alteração, exceto quanto à formatação) notícias, artigos e outros textos publicados originalmente no site na segunda metade da década de 1990 e na primeira década do século XXI, que contam parte considerável a história do Linux e do Open Source no Brasil. Exceto quando indicado em contrário, a autoria dos textos é de Augusto Campos, e os termos de uso podem ser consultados na capa do BR-Linux.org. Considerando seu caráter histórico, é provável que boa parte dos links estejam quebrados, e que as informações deste texto estejam desatualizadas.