Ola tod[ao]s,
Especialmente para Marcelo Gomes e Bruno Almeida,
Estou enviar para lista porque pode interessar a outras pessoas.
> Ola amigo, voce pode mandar pra mim tbm alguns scripts de rrdtools que voce
> tiver ai pra eu dar uma estudada?
> nao conheço aferramenta mais to interessado em utiliza-la no meu provedor
Este script que estou enviando, utilizo para criar gráficos, minuto a
minuto, do meu link de internet, coletando as informações do SNMP do
roteador.
A informação você pode coletar como bem desejar, por SNMP, informações
direto da interface ethX por awk ou até mesmo através de regras no
iptables.
Vou comentar todo o script para poderem entender.
Ah, nao vou mostrar aqui como instalar o bendito RRDTOOL, isso é um
detalhe tão básico, fica por conta de vocês.
Vamos aos que interessa:
1 passo - criar o script
################################### inicio do script
#!/bin/bash
# o nome da variavel é IP apenas porque utilizei a mesma estrutura
# do script que uso para criar o grafico de meus clientes
# aqui você coloca o nome que quer que fique na estrutura de
diretorios do apache
# se quiser a placa de rede coloque eth0 ou eth1
# se quiser denominacoes coloque link1 ou link2
# ou entao coloque a designacao real do seu circuito - se quiser criar
graficos de
# mais de um circuito, devera criar um copia do script ou tratar na
parte de coleta
# de dados
# no meu script de coleta dos clientes consigo usar o mesmo script pois
# coleto os dados pelo iptables ai fica facil
ip="RJO-IP-00100"
# caminho do binario do rrdtool
cmd=/usr/bin/rrdtool
# destino da base de dados e dos graficos
# aqui será a pasta do seu servidor web
dir=/srv/www/default/html/graficos/circuitos
# funcao para gerar o grafico - inicio
function gerar_grafico {
# parametros
# $1 - circuito - ip
# $2 - arquivo
# $3 - tempo
# $4 - titulo
$cmd graph $dir/$1/$1-$2.png \
-t "$3" \
--start end-$4 \
DEF:in0=$dir/$1/$1.rrd:IN:AVERAGE \
DEF:out0=$dir/$1/$1.rrd:OUT:AVERAGE \
CDEF:in=in0,8,* \
CDEF:out=out0,8,* \
CDEF:out1=out,-1,* \
VDEF:inmax=in,MAXIMUM \
VDEF:inmed=in,AVERAGE \
VDEF:incur=in,LAST \
VDEF:outmax=out,MAXIMUM \
VDEF:outmed=out,AVERAGE \
VDEF:outcur=out,LAST \
'AREA:in#00FF00:Download' \
'GPRINT:inmax: Máximo\: %6.2lf %Sbps' \
'GPRINT:inmed: Média\: %6.2lf %Sbps' \
'GPRINT:incur: Atual\: %6.2lf %Sbps\l' \
'AREA:out1#0000FF:Upload ' \
'GPRINT:outmax: Máximo\: %6.2lf %Sbps' \
'GPRINT:outmed: Média\: %6.2lf %Sbps' \
'GPRINT:outcur: Atual\: %6.2lf %Sbps' \
-w 600 -h 100
}
# funcao para gerar o grafico - fim
# se existir o diretorio
if [ -e $dir/$ip ]; then
# se existir a base de dados
if [ -e $dir/$ip/$ip.rrd ]; then
# pegar valores do trafego
# aqui que você pode coletar as informacoes da placa ou mesmo por iptables
# quando vou coletar dos clientes - ip a ip coleto com iptables
# IN=`iptables -t mangle -L POSTROUTING -nvx | grep -w \$ip |
awk '{print $2}'`
# OUT=`iptables -t mangle -L PREROUTING -nvx | grep -w \$ip |
awk '{print $2}'`
# mas como o escopo aqui é circuito, vamos coletar por SNMP
IN=`snmpget -c public -v 1 ip-do-roteador IF-MIB::ifInOctets.2 |
awk '{print $4}'`
OUT=`snmpget -c public -v 1 ip-do-roteador IF-MIB::ifOutOctets.2
| awk '{print $4}'`
echo "$ip $IN $OUT"
# atualizar dados do circuito
$cmd update $dir/$ip/$ip.rrd "N:${IN}:${OUT}"
# gerar grafico da ultima hora
gerar_grafico $ip hora "Circuito $ip - Ultima Hora" 1h
# gerar grafico diario
gerar_grafico $ip dia "Circuito $ip - Diario" 1d
# gerar grafico semanal
gerar_grafico $ip semana "Circuito $ip - Semanal" 1w
# gerar grafico mensal
gerar_grafico $ip mes "Circuito $ip - Mensal" 1m
# gerar grafico anual
gerar_grafico $ip ano "Circuito $ip - Anual" 1y
else # se a base de dados nao existir
# se base de dados nao existir - cria-la
# como eu populo a base de minuto a minuto, e desejo ter informações de
# pelo menos 1 ano. meu último parametro 525600 equivale a:
# 365 dias x 24 horas x 60 segundos = 525600 minutos (capacidade da
# base RRD)
$cmd create $dir/$ip/$ip.rrd --step 60 DS:IN:DERIVE:200:0:U
DS:OUT:DERIVE:200:0:U RRA:AVERAGE:0.5:1:525600
fi
# como é ruim ter q ficar abrindo os arquivos dos graficos um a um
# aqui crio o index dentro da pasta dos graficos
# ah, se vc nao tiver php, mude a extensão do index.php para index.html
if [ ! -e $dir/$ip/index.php ]; then
touch $dir/$ip/index.php
echo "<html>" > $dir/$ip/index.php
echo "<head>" >> $dir/$ip/index.php
echo "<title>Trafego do Circuito - $ip</title>" >> $dir/$ip/index.php
echo "<meta http-equiv=refresh content=60>" >> $dir/$ip/index.php
echo "</head>" >> $dir/$ip/index.php
echo "<body>" >> $dir/$ip/index.php
echo "<h1>Trafego do Circuito - $ip</h1>" >> $dir/$ip/index.php
echo "<br><b>Ultima Hora</b>" >> $dir/$ip/index.php
echo "<br><img src=$ip-hora.png alt=Hora>" >> $dir/$ip/index.php
echo "<br><br><b>Grafico Diario</b>" >> $dir/$ip/index.php
echo "<br><img src=$ip-dia.png alt=Diario>" >> $dir/$ip/index.php
echo "<br><br><b>Grafico Semanal</b>" >> $dir/$ip/index.php
echo "<br><img src=$ip-semana.png alt=Semanal>" >> $dir/$ip/index.php
echo "<br><br><b>Grafico Mensal</b>" >> $dir/$ip/index.php
echo "<br><img src=$ip-mes.png alt=Mensal>" >> $dir/$ip/index.php
echo "<br><br><b>Grafico Anual</b>" >> $dir/$ip/index.php
echo "<br><img src=$ip-ano.png alt=Anual>" >> $dir/$ip/index.php
echo "</body>" >> $dir/$ip/index.php
echo "</html>" >> $dir/$ip/index.php
fi
else # se o diretorio ainda nao existir
# se diretorio nao existir - crial-lo
mkdir $dir/$ip
# ja que o diretorio nao existia, lógico que a base tb nao
# então, vamos criar base de dados tambem
$cmd create $dir/$ip/$ip.rrd --step 60 DS:IN:200:0:U
DS:OUT:DERIVE:200:0:U RRA:AVERAGE:0.5:1:525600
fi
################################### fim do script
2 passo - tornar o script executavel
chmod +x /caminho/do/script
3 passo
Agora basta chamar este script no crontab minuto a minuto
Edite o arquivo /etc/crontab e adicione a seguinte linha
*/1 * * * * root sh /caminho/do/seu/script &> /dev/null
Espero que ajude tanto o Marcelo Gomes quando Bruno Almeida e a quem
interessar possa na lista.
--
Wenderson Souza
e-mail: [EMAIL PROTECTED]
msn: [EMAIL PROTECTED]
---------------------------------------------------------------------------
Esta lista é patrocinada pela Conectiva S.A. Visite http://www.conectiva.com.br
Arquivo: http://bazar2.conectiva.com.br/mailman/listinfo/linux-br
Regras de utilização da lista: http://linux-br.conectiva.com.br
FAQ: http://www.zago.eti.br/menu.html