EMotaWeb - Linux - MRTG
Data: 23/01/2004


1. Apresentação do MRTG
MRTG (Multi Router Traffic Grapher) - é uma ferramente de monitoramento usada para controlar o tráfico/consumo de algo.
Sua aplicação é muito comum em dispositivos de rede, mas também podendo ser útil em outras diversas aplicações.
Seu relatório é relado em formato HTML, sendo assim, podendo ser publicado através de um servidor de HTTP (Web).


2. Como ele funciona?
Ao receber 2 valores constantemente (de tempos em tempos), o mesmo irá gerar um gráfico.
Atualmente ele trabalha com imagens do tipo: gif e png (recomendamos o uso de PNG).


3. Informações Oficiais
Para maiores informações e detalhes, acesse o site oficial.
URL: http://people.ee.ethz.ch/~oetiker/webtools/mrtg


4. Gerando um gráfico da placa de rede local
O MRTG é muito usando através de SNMP (protocolo de gerenciamento de rede).
Mas, quando falamos de usar o MRTG para gerar um gráfico de um dispositivo local, não precisamos ter instalado em nosso sistema (Linux) um servidor de SNMP apenas para controlar uma ou duas placas de rede.
Como muitos hoje em dia, estão criando servidores Linux para fazer NAT (compartilhar acesso banda larga), segue abaixo uma dica de como gerar um gráfico de utilização de 2 (duas) placas de rede.


5. MRTG - Download / Instalação

5.1 Download
Download: http://people.ee.ethz.ch/~oetiker/webtools/mrtg/pub/mrtg.tar.gz
Atualmente o mesmo está rodando com a versão 2.10.11, sendo desenvolvido em 05/12/2003.
Recomendo a verificação de novas versões no site oficial, periodicamente.

5.2 Dependências
Antes de mais nada, segue a lista de dependências necessárias para instalar o MRTG.

5.2.1 Download
GCC - compilador C - http://gcc.gnu.org
Perl - Interpretador da Linguagem de programação Perl - http://www.perl.com
gd - Biblioteca de Imagens - http://www.boutell.com/gd/
libpng - Biblioteca de imagens PNG - http://www.libpng.org/pub/png/src/
zlib - Biblioteca de compactação, usada pelo libpng - http://www.gzip.org/zlib

5.2.2 Instalação / Compilação
Compilando suas dependências:

Crie um diretório temporário de trabalho.
# mkdir -p /usr/local/src
# cd /usr/local/src

Instalando biblioteca - zlib
# wget http://www.gzip.org/zlib/zlib-1.2.1.tar.gz
# gunzip -c zlib-*.tar.gz | tar xf -
# rm zlib-*.tar.gz
# mv zlib-* zlib
# cd zlib
# ./configure
# make
# cd ..

Instalando biblioteca - libpng
# wget http://heanet.dl.sourceforge.net/sourceforge/png-mng/libpng-1.2.5.tar.gz
# gunzip -c libpng-*.tar.gz |tar xf -
# rm libpng-*.tar.gz
# mv libpng-* libpng
# cd libpng
# make -f scripts/makefile.std CC=gcc ZLIBLIB=../zlib ZLIBINC=../zlib
# rm *.so.* *.so
# cd ..

Instalando biblioteca - gd
Versão: 1.8.4
# wget http://www.boutell.com/gd/http/gd-1.8.4.tar.gz
# gunzip -c gd-*.tar.gz |tar xf -
# rm gd-*.tar.gz
# mv gd-* gd
# cd gd
# perl -i~ -p -e s/gd_jpeg.o//g Makefile
# make INCLUDEDIRS="-I. -I../zlib -I../libpng" \
LIBDIRS="-L../zlib -L. -L../libpng" \
LIBS="-lgd -lpng -lz -lm" \
CFLAGS="-O -DHAVE_LIBPNG"
# cd ..

Versão: 2.0.11
# wget http://www.boutell.com/gd/http/gd-2.0.11.tar.gz
# gunzip -c gd-2.0.11.tar.gz |tar xf -
# mv gd-2.0.11 gd
# cd gd
# env CPPFLAGS="-I../zlib -I../libpng" LDFLAGS="-L../zlib -L../libpng" ./configure --disable-shared \
--without-freetype --without-jpeg
# make
# cp .libs/* .


5.3 Instalação / Compilação
Acessando um diretório temporário de produção.
# cd /usr/local/src
# gunzip -c mrtg-2.10.11.tar.gz | tar xvf -
# cd mrtg-2.10.11

Se você possue todas as blibiotecas pré-instaladas em sua distribuição, use:
# ./configure --prefix=/usr/local/mrtg-2
Se você compilou as dependências, informe o caminho absoluto delas:
# ./configure --prefix=/usr/local/mrtg-2 \
--with-gd=/usr/local/src/gd \
--with-z=/usr/local/src/zlib \
--with-png=/usr/local/src/libpng
# make
# make install


6. Configurando o MRTG
Para configurar o MRTG, é preciso inicialmente 2 coisas:
- Configurar um arquivo com informações sobre o dispositivo;
- Confiugrar um Agendador de Tarefa para reconhecer as informações do dispositivo.

6.1 Script - Recolhendo os valores da placa de rede
Abaixo, estamos criando dois scripts (um para cada placa de rede).
Crie um arquivo chamado: eth0.sh, com os seguintes comandos:
  #!/bin/awk -f
  /eth0:/ { $0=substr($0, index($0,":")+1); print $1; print $9}

Transforme ele em executável
# chmod 0500 eth0.sh

Crie um arquivo chamado: eth1.sh, com os seguintes comandos:
  #!/bin/awk -f
  /eth1:/ { $0=substr($0, index($0,":")+1); print $1; print $9}

Transforme ele em executável
# chmod 0500 eth1.sh

Alguns utilizando o script para mostrar o consumo de CPU e Memória.
O Script de memória até funciona, mas o CPU é meio furado.
Atualmente ele captura apenas os processos de usuários, com isso, não mostra o real.
Mas, vejamos abaixo como criá-los:
Crie um arquivo chamado: micro.sh
  #!/bin/sh
  mem=$(/usr/bin/free|grep Mem:)
  cpu=$(grep '^cpu ' /proc/stat)
  /bin/awk -v cpu="$cpu" -v mem="$mem" '
  BEGIN {
    split(cpu,cpustats)
    print 100-int(100*cpustats[5]/(cpustats[2]+\
      cpustats[3]+cpustats[4]+cpustats[5]))
    split(mem,memstats);
    print int(100*memstats[3]/(memstats[3]+\
      memstats[4]));
  }'

Transforme em executável:
# chmod 0500 micro.sh


6.2 Criando o arquivo de Configuração
Após os scripts criados, precisamos criar o arquivo de configuração do MRTG, que ao ser processado irá chamar os scripts de coleta.
Crie o arquivo chamado: mrtg.conf
  ## MRTG.CONF
  ##
  ---------------------------------------------------------------------------------------
  ##
  ## Diretório onde será gravados os arquivos .HTML, .GIF, .LOG e tudo mais ...
  WorkDir: /home/mrtg/
  
  Target[eth0]: `/home/mrtg/eth0.sh /proc/net/dev`
  Title[eth0]: Tráfego da eth0
  PageTop[eth0]: <h1>Tráfego da eth0 </h1>
  MaxBytes[eth0]: 128000
  Options[eth0]: growright,bits,noinfo
  
  Target[eth1]: `/home/mrtg/eth1.sh /proc/net/dev`
  Title[eth1]: Tráfego da eth1
  PageTop[eth1]: <h1>Tráfego da eth1 </h1>
  MaxBytes[eth1]: 1250000
  Options[eth1]: growright,bits,noinfo
  
  Target[perf]:`/home/mrtg/micro.sh`
  Title[perf]: CPU e memória
  PageTop[perf]: <h1>Uso de CPU e memória </h1>
  MaxBytes[perf]:100
  Unscaled[perf]:ymwd
  Options[perf]: growright,noinfo,gauge
  YLegend[perf]: Percentual
  ShortLegend[perf]: %
  Legend1[perf]: Uso de tempo da CPU
  Legend2[perf]: Uso da memória real
  LegendI[perf]: CPU
  LegendO[perf]: Mem


7. Agendador de Tarefa (CRON)
Programa seu agendador de tarefa para executar o MRTG de tempos em tempos.
Atualmente o padrão é de 5 minutos, mas como este processo está local, você pode diminuir esse tempo para 3 min ou até mesmo 1 min.

# crontab -e
  */5 * * * * /usr/bin/mrtg /home/mrtg/mrtg.conf


8. Visualizando o Relatório
O MRTG, irá criar um arquivo .htm ou .html referente ao dispositivo em questão.
O relatório pode ser visto através de qualquer navegador (cliente HTTP).
Normalmente, o mesmo é publicado através de um servidor http, com acesso público ou privado.


9. Outras referências
Agendando tarefa no CRONTAB
Alguns exemplos de utilização do MRTG
Apache - Configurando um servidor HTTP


Qualquer dúvida ou informação, entre em contato emota@emota.com.br

EMotaWeb | Textos | Programação | Linux | Wireless | Contato | Topo ^