Saudações à todos!
Bom! Resolvi escrever esta dica porque sempre tive muita dificuldade com
SNMP. A procura por tutoriais sobre ele quase me deixaram louco.
Fuçando pela net à fora encontrei um how-to e uns scripts de como implementar o tão conhecido MRTG sem usar SNMP, pode parecer loucura mas funciona, e muito bem. Trata-se de mais um jeitinho do mundo *NIX para se chegar ao mesmo resultado. :D
Primeiro, vamos instalar primeiro o
MRTG, para isso precisamos de seu pacote tgz, que pode ser baixado no link abaixo (ou se preferir no
linuxpackages).
OBS: Este pacote foi criado para a versão 10.0 do
Slackware, mas estou usando ele na versão 10.1 em um servidor em produção sem problemas.
Bom! Vamos instalar o tal pacote:
# installpkg mrtg-2.10.15-i486-1nec.tgz
Com o MRTG instalado, precisamos agora criar um arquivo de configuração, para padronizar a localização dos arquivos .conf iremos criar um diretório chamado MRTG em /etc:
# mkdir /etc/mrtg
# cd /etc/mrtg
Agora chegamos onde realmente interessa, o que nos faz não precisar usar SNMP. Trata-se de alguns shell scripts, que de uma maneira bem simples coletam informações de alguns "pontos chaves" do sistema:
1) Script - Coletor de informação de utilização do HD:
#!/bin/bash
#este script concorda com os termos da gpl
#(!c) Cesar Augusto Fresqui - boyhammer@yahoo.com
#copie para /etc/mrtg/mrtg-hd.sh
#chmod +x /etc/mrtg/mrtg-hd.sh
if [ -e $1 ]
then
printf "parametro ausente\n"
else
total=`df | grep $1 | awk '{print $2}' 2>> /dev/null`
livre=`df | grep $1 | awk '{print $3}' 2>> /dev/null`
ocupado=`df | grep $1 | awk '{print $4}' 2>> /dev/null`
percent_oc=$(($ocupado * 100 / $total))
percent_li=$((100 - $percent_oc))
#echo total: $total
#echo $ocupado
#echo $livre
echo "$percent_oc"
echo "$percent_li"
fi
2) Script - Coletor de informação da CPU:
#!/bin/sh
#este script concorda com os termos da gpl
#(!c) Cesar Augusto Fresqui - boyhammer@yahoo.com
#copie para /etc/mrtg/mrtg-cpu.sh
#chmod +x /etc/mrtg/mrtg-cpu.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]));
}'
3) Script - Coletor de informação da interface de rede:
#!/bin/sh
#este script concorda com os termos da gpl
#mrtgstats-net.sh - Augusto Campos 2004
#copie para /etc/mrtg/mrtgstats-net.sh
#chmod +x /etc/mrtg/mrtgstats-net.sh
awk '
/'$1':/ {
$0=substr($0,index($0,":")+1);
print $1;print $9
}
' /proc/net/dev
Até aqui beleza, mas só com isso o MRTG não fará nada, criaremos agora o mrtg.conf para se utilizar desses scripts, abaixo segue o exemplo:
WorkDir: /var/log/mrtg
Language: brazilian
RunAsDaemon: yes
Interval: 30
Target[hdboot]:`/etc/mrtg/mrtg-hd.sh sda2 2>> /dev/null`
Title[hdboot]:"Uso do HD de BOOT do Sistema"
PageTop[hdboot]:"Uso do HD de BOOT do Sistema"
Options[hdboot]: growright,noinfo,gauge
YLegend[hdboot]: Percentual
ShortLegend[hdboot]: %
MaxBytes[hdboot]: 100
Legend1[hdboot]: espaco livre
Legend2[hdboot]: espaco ocupado
LegendI[hdboot]: Livre
LegendO[hdboot]: Ocupado
Target[hdservidor]:`/etc/mrtg/mrtg-hd.sh sda3 2>> /dev/null`
Title[hdservidor]:"Uso do HD de Dados do Sistema"
PageTop[hdservidor]:"Uso do HD de Dados do Sistema"
Options[hdservidor]: growright,noinfo,gauge
YLegend[hdservidor]: Percentual
ShortLegend[hdservidor]: %
MaxBytes[hdservidor]: 100
Legend1[hdservidor]: espaco livre
Legend2[hdservidor]: espaco ocupado
LegendI[hdservidor]: Livre
LegendO[hdservidor]: Ocupado
Target[hdbkp]:`/etc/mrtg/mrtg-hd.sh uba1 2>> /dev/null`
Title[hdbkp]:"Uso do HD de Backup do Sistema"
PageTop[hdbkp]:"Uso do HD de Backup do Sistema"
Options[hdbkp]: growright,noinfo,gauge
YLegend[hdbkp]: Percentual
ShortLegend[hdbkp]: %
MaxBytes[hdbkp]: 100
Legend1[hdbkp]: espaco livre
Legend2[hdbkp]: espaco ocupado
LegendI[hdbkp]: Livre
LegendO[hdbkp]: Ocupado
Target[eth0]: `/etc/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]:`/etc/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
Neste exemplo de arquivo de configuração é possível notar como os scripts funcionam, basta passar como argumento, por exemplo: para o script de coleta informações do HD basta colocar o nome do dispositivo, no caso acima /dev/sda2, /dev/sda3 e /dev/uba1.
Complementando, no início deste arquivo, há uma variável "WorkDir:" que aponta onde o MRTG irá salvar seus relatórios.
Para quem não sabe o MRTG gera relatórios em HTML, que podem ser abertos com qualquer browser, isto possibilita uma integração com o apache, no caso de um servidor que terá seus logs vistos remotamente pelo administrador.
Os arquivos HTML que serão gerados, tem seus nomes situado entre colchetes. Por exemplo: a sessão abaixo irá gerar um HTML com o nome de hdservidor.html.
Target[hdservidor]:`/etc/mrtg/mrtg-hd.sh sda3 2>> /dev/null`
Title[hdservidor]:"Uso do HD de Dados do Sistema"
PageTop[hdservidor]:"Uso do HD de Dados do Sistema"
Options[hdservidor]: growright,noinfo,gauge
YLegend[hdservidor]: Percentual
ShortLegend[hdservidor]: %
MaxBytes[hdservidor]: 100
Legend1[hdservidor]: espaco livre
Legend2[hdservidor]: espaco ocupado
LegendI[hdservidor]: Livre
LegendO[hdservidor]: Ocupado
Simples não?
Para finalizar a instalação de uma maneira bem profissional, vamos editar alguns arquivos do Slackware para deixarmos o MRTG como um serviço que é iniciado junto ao sistema.
1) Vamos criar o /etc/rc.d/rc.mrtg
#!/bin/sh
# Start/stop/restart mrtg.
# Start mrtg:
mrtg_start() {
if [ -x /usr/bin/mrtg ]; then
echo "Starting mrtg daemon: /usr/bin/mrtg --daemon"
/usr/bin/mrtg /etc/mrtg/mrtg.conf --daemon
fi
}
# Stop mrtg:
mrtg_stop() {
echo "Ending mrtg daemon.."
killall mrtg
}
# Restart mrtg:
mrtg_restart() {
mrtg_stop
sleep 1
mrtg_start
}
case "$1" in
'start')
mrtg_start
;;
'stop')
mrtg_stop
;;
'restart')
mrtg_restart
;;
*)
echo "usage $0 start|stop|restart"
esac
Para que este script funcione, vc deve dar permissão de execução a ele:
# chmod +x /etc/rc.d/rc.mrtg
2) Vamos editar o arquivo /etc/rc.d/rc.M e adicionar ao final do mesmo as seguintes linhas:
# Start MRTG as daemon
if [ -x /etc/rc.d/rc.mrtg ]; then
. /etc/rc.d/rc.mrtg start
fi
Prontinho! Agora se quiser executar o MRTG, basta executar o comando abaixo:
# /etc/rc.d/rc.mrtg start
Confira o diretório especificado na variável Workdir, poderá visualizar os primeiros arquivos de relatórios gerados (ainda com os gráficos zerados), a cada 30 minutos os relatórios são feitos, espere algumas horas e confira os gráficos. Acredito que se você seguiu todos os passos tudo vai estar OK.
Acho que é só. Esta dica se baseia em diversas pesquisas na internet, agradeço a todos que compartilharam o seu conhecimento para que eu pudesse escrever esta dica.
t+