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

Responder a