MRTG sem SNMP: monitoramento simplificado
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.
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 irei mostrar em 2 passos como instalar e configurar o mrtg no slackware.
Primeiro va até www.linuxpackages.net e procure por mrtg e baixe-o.
Feito isso instale com o comando installpkg
# installpkg mrtg-2.15.2-i486-1gds.tgz
Agora crie uma pasta no seu home ou em qualquer outro local de preferencia com o nome mrtg pois lá é onde vão ficar as confs do mrtg
# mkdir /home/mrtg
Feito isso crie agora uma pasta onde iram ficar os gráficos gerados pelo mrtg e as paginas em html
#mkdir /home/mrtg/relatorios
Feito isso agora vamos crias os scrips de monitoramento do mrtg
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
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.
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.
Cara, eu segui seu tutorial porém dá erro ao startar:
awk: ‘
awk: ^ invalid char ‘�’ in expression
/home/marcossousa/mrtgstats-net.sh: 4: /$1:/: not found
/home/marcossousa/mrtgstats-net.sh: 5: Syntax error: word unexpected (expecting “)”)
2008-11-26 02:23:00: WARNING: Could not get any data from external command ‘/home/marcossousa/mrtgstats-net.sh eth1′
Maybe the external command did not even start. (Illegal seek)
2008-11-26 02:23:00: WARNING: Problem with External get ‘/home/marcossousa/mrtgstats-net.sh eth1′:
Expected a Number for ‘in’ but nothing’
2008-11-26 02:23:00: WARNING: Problem with External get ‘/home/marcossousa/mrtgstats-net.sh eth1′:
Expected a Number for ‘out’ but nothing’
/home/marcossousa/mrtgstats-cpu.sh: 5: /bin/awk: not found
/home/marcossousa/mrtgstats-cpu.sh: 6: BEGIN: not found
/home/marcossousa/mrtgstats-cpu.sh: 7: Syntax error: word unexpected (expecting “)”)
2008-11-26 02:23:00: WARNING: Could not get any data from external command ‘/home/marcossousa/mrtgstats-cpu.sh’
Maybe the external command did not even start. (Illegal seek)
2008-11-26 02:23:00: WARNING: Problem with External get ‘/home/marcossousa/mrtgstats-cpu.sh’:
Expected a Number for ‘in’ but nothing’
2008-11-26 02:23:00: WARNING: Problem with External get ‘/home/marcossousa/mrtgstats-cpu.sh’:
Expected a Number for ‘out’ but nothing’
2008-11-26 02:23:00: ERROR: Target[eth1][_IN_] ‘ $target->[0]{$mode} ‘ did not eval into defined data
2008-11-26 02:23:00: ERROR: Target[eth1][_OUT_] ‘ $target->[0]{$mode} ‘ did not eval into defined data
2008-11-26 02:23:00, Rateup WARNING: /usr/bin/rateup Can’t remove eth1.old updating log file
2008-11-26 02:23:00: ERROR: Target[perf][_IN_] ‘ $target->[1]{$mode} ‘ did not eval into defined data
2008-11-26 02:23:00: ERROR: Target[perf][_OUT_] ‘ $target->[1]{$mode} ‘ did not eval into defined data
2008-11-26 02:23:01, Rateup WARNING: /usr/bin/rateup Can’t remove perf.old updating log file
você pode mandar os arquivos para o meu e-mail falecomigo at marcossousa dot com?
Meu velho se vc copiou a configuração aqui do BLOG então preste atenção nas ASPAS que elas vão erradas, não sei porque isso, é bug do proprio WordPress mesmo…