Instalação e Configuração do MRTG no Debian Squeeze

O Multi Router Traffic Grapher (MRTG) é uma ferramenta de monitoramento que gera páginas no formato HTML com gráficos de dados coletados a partir de SNMP ou scripts externos. É conhecido principalmente pelo seu uso na monitoração de tráfego de rede, mas pode monitorar qualquer coisa desde que o host forneça os dados via SNMP ou script.

Foi desenvolvido por Tobias Oetiker e Dave Rand. Foi escrito em Perl mas utiliza um módulo em C para gerar os gráficos.

Características:

  • Mede sempre 2 valores, no caso de tráfego, pode ser Entrada e Saída.
  • Faz as leituras via SNMP ou através de script que retorne um formato padrão.
  • Coleta dados a cada 5 minutos por padrão, mas este tempo pode ser aumentado ou diminuido.
  • Cria uma página HTML com 4 gráficos (diário, semanal, mensal e anual). Se algum deles não for necessário pode ser suprimido.
  • O MRTG pode avisar caso o valor do gráfico atinja um valor pré-estabelecido. Por exemplo: se determinado servidor atinge 95% do espaço do disco, o MRTG pode mandar um e-mail para o administrador informando o ocorrido.
  • Possui uma ferramenta para gerar os arquivos de configuração: o CFGMAKER.
  • Possui uma ferramenta para gerar um página de índice para os casos em que muitos itens são monitorados: o INDEXMAKER.

O que vou utilizar:

  • Servidor Debian Squeeze
    • IP: 10.101.0.25
    • Servidor MRTG
  • Cliente Debian Squeeze
    • IP: 10.101.0.26

Prepare o seu sistema com o seguinte script http://wiki.douglasqsantos.com.br/doku.php/confinicialsqueeze_en para que não falte nenhum pacote ou configuração.

Vamos mandar fazer um update dos repositórios e um upgrade do sistema no servidor MRTG

aptitude update && aptitude dist-upgrade -y

Agora vamos mandar instalar o apache o mrtg e o snmp

aptitude install apache2 mrtg snmpd -y

Aqui vamos ser questionados sobre a permissão do arquivo mrtg.cfg selecione YES

Agora vamos criar o diretório que vai armazenar os relatórios do mrtg, esse vai ser o diretório principal depois vamos dividir ele por hosts

mkdir -p /var/www/mrtg

Agora vamos acertar o arquivo de configuração do snmp para ele escute em todas as portas e vamos dar acesso a ele para a rede 10.101.0.0/24, e vamos também acertar a localização e o contato

vim /etc/snmp/snmpd.conf
[...]
#Habilitando o snmp escutar em todas as portas
agentAddress  udp::161
[...]
#Vamos dar acesso a nossa community para o servidor MRTG
rocommunity public  10.101.0.25/32
[...]
#Precisamos comentar a linha abaixo
#rocommunity public  default    -V systemonly
#Aqui vamos acertar o as informações que vão ser passadas para quem consultar esse servidor via snmp
sysLocation    DataCenter 01 Servidor MRTG
sysContact     Douglas <douglas@douglasqsantos.com.br>

Agora vamos mandar reiniciar o serviço do snmp

/etc/init.d/snmpd restart

Agora vamos criar o diretório para armazenar a configuração do nosso servidor mrtg

mkdir -p /etc/mrtg/10.101.0.25

Agora vamos criar o diretório para armazenar os relatórios html do nosso servidor mrtg

mkdir -p /var/www/mrtg/10.101.0.25

Agora precisamos gerar a configuração para o nosso servidor

cfgmaker public@10.101.0.25 --ifref=ip --ifdesc=alias --show-op-down --global 'WorkDir: /var/www/mrtg/10.101.0.25'\
 --global 'Options[_]: growright bits' --output /etc/mrtg/10.101.0.25/mrtg.cfg

Aqui estamos informando:

  • public@10.101.0.25 que é a community do snmp e o ip que queremos monitorar
  • ifref=ip está que vai ser a nossa referencia para a interface o padrão é o número dela
  • ifdesc=alias que vai ser a descrição da nossa interface eu estou utilizando o alias o padrão é utilizar o número
  • show-op-down é para mapear as interfaces que estão com o status down
  • global 'WordDir: ' estamos especificando onde vão ser armazenadas as páginas html para essa configuração que estamos gerando
  • global 'Options' estamos especificando que queremos a informação em bits ao invés de bytes e o crescimento do gráfico vai ser da esquerda para a direita
  • output estamos especificando onde vamos armazenar a configuração.

Agora precisamos gerar o arquivo de index dos nossos relatórios para esta configuração

indexmaker /etc/mrtg/10.101.0.25/mrtg.cfg --columns=2  --output /var/www/mrtg/10.101.0.25/index.html

Aqui estamos informando:

  • /etc/mrtg/10.101.0.25/mrtg.cfg arquivo de configuração que vamos gerar os relatórios
  • columns=2 a quantidade de colunas que vamos ter na página HTML para separar os vários gráficos que podemos ter
  • output estamos especificando o arquivo principal dos relatórios

Agora precisamos gerar os primeiros gráficos da seguinte forma

env LANG=C /usr/bin/mrtg /etc/mrtg/10.101.0.25/mrtg.cfg
env LANG=C /usr/bin/mrtg /etc/mrtg/10.101.0.25/mrtg.cfg
env LANG=C /usr/bin/mrtg /etc/mrtg/10.101.0.25/mrtg.cfg

Temos que gerar 3 vezes para ele carregar todas as informações necessárias para os gráficos, depois vamos ter um script que vai precisar gerar estas informações a cada 5 minutos.

Agora já podemos acessar http://ip_servidor/mrtg/10.101.0.25 que vamos ter o nosso primeiro relatório

Agora vamos criar um script para gerar os nossos relatórios

Vamos primeiro criar um diretório para armazenar o nosso script

mkdir -p /srv/scripts

Agora vamos gerar o nosso script

vim /srv/scripts/mrtg.sh
#!/bin/bash
#-------------------------------------------------------------------------
# mrtg.sh
#
# Site  : http://www.*.com.br
# Autor : Douglas Q. dos Santos <douglas@douglasqsantos.com.br>
# Manutenção: Douglas Q. dos Santos <douglas@douglasqsantos.com.br>
#
#-------------------------------------------------------------------------
# Efetua a geração dos relatórios de múltiplos clientes do mrtg
#-------------------------------------------------------------------------
#--------------------------------------------------------------------------
#Licença: http://creativecommons.org/licenses/by-sa/3.0/legalcode
#
#--------------------------------------------------------------------------
#Declarando as variáveis utilizadas no script
BASE="/etc/mrtg"
LOGS="/var/log/mrtg"
MRTG=$(which mrtg)
MKDIR=$(which mkdir)

#Comando para obter todos os clientes configurador no mrtg
ARQ=$(ls -l ${BASE} | awk '{print $9}' | egrep -v "^$")

#Vamos validar se o diretório de logs existe caso não exista vamos criar ele
if test ! -d ${LOGS} ; then
 ${MKDIR} -p ${LOGS}
fi

#Percorre todos os diretorios de configuracao em /etc/mrtg para podermos gerar os relatórios
for END in $ARQ ;
do
env LANG=C  ${MRTG} ${BASE}/${END}/mrtg.cfg 2>&1 ${LOGS}/mrtg.log
done

Agora precisamos dar permissão para o nosso script

chmod +x /srv/scripts/mrtg.sh

Agora vamos ajustar o crontab, vamos comentar a linha que já existe lá e vamos adicionar o nosso script

vim /etc/cron.d/mrtg
*/5 * * * * root /srv/scripts/mrtg.sh
#*/5 *  * * *   root    if [ -x /usr/bin/mrtg ] && [ -r /etc/mrtg.cfg ]; then mkdir -p /var/log/mrtg ; env LANG=C /usr/bin/mrtg /etc/mrtg.cfg 2>&1 | tee -a /var/log/mrtg/mrtg.log ; fi

Agora vamos mandar reiniciar o serviço do crontab

/etc/init.d/cron restart

Configurando o cliente

Vamos mandar fazer um update dos repositórios

aptitude update && aptitude dist-upgrade -y

Agora vamos mandar instalar o snmp

aptitude install snmpd -y

Agora vamos acertar o arquivo de configuração do snmp para ele escute em todas as portas e vamos dar acesso a ele para a rede 10.101.0.25/32, e vamos também acertar a localização e o contato

vim /etc/snmp/snmpd.conf
[...]
#Habilitando o snmp escutar em todas as portas
agentAddress  udp::161
[...]
#Vamos dar acesso a nossa community para o servidor MRTG
rocommunity public  10.101.0.25/32
[...]
#Precisamos comentar a linha abaixo
#rocommunity public  default    -V systemonly
#Aqui vamos acertar o as informações que vão ser passadas para quem consultar esse servidor via snmp
sysLocation    DataCenter 01 Cliente
sysContact     Douglas <douglas@douglasqsantos.com.br>

Agora vamos mandar reiniciar o serviço do snmp

/etc/init.d/snmpd restart

Agora vamos voltar ao servidor MRTG e vamos criar a configuração para ele.

Agora vamos criar o diretório para armazenar a configuração do nosso cliente

mkdir -p /etc/mrtg/10.101.0.26

Agora vamos criar o diretório para armazenar os relatórios html do nosso cliente

mkdir -p /var/www/mrtg/10.101.0.26

Agora precisamos gerar a configuração para o nosso cliente

cfgmaker public@10.101.0.26 --ifref=ip --ifdesc=alias --show-op-down --global 'WorkDir: /var/www/mrtg/10.101.0.26'\
 --global 'Options[_]: growright bits' --output /etc/mrtg/10.101.0.26/mrtg.cfg

Aqui estamos informando:

  • public@10.101.0.26 que é a community do snmp e o ip que queremos monitorar
  • ifref=ip está que vai ser a nossa referencia para a interface o padrão é o número dela
  • ifdesc=alias que vai ser a descrição da nossa interface eu estou utilizando o alias o padrão é utilizar o número
  • show-op-down é para mapear as interfaces que estão com o status down
  • global 'WordDir: ' estamos especificando onde vão ser armazenadas as páginas html para essa configuração que estamos gerando
  • global 'Options' estamos especificando que queremos a informação em bits ao invés de bytes e o crescimento do gráfico vai ser da esquerda para a direita
  • output estamos especificando onde vamos armazenar a configuração.

Agora precisamos gerar o arquivo de index dos nossos relatórios para esta configuração

indexmaker /etc/mrtg/10.101.0.26/mrtg.cfg --columns=2  --output /var/www/mrtg/10.101.0.26/index.html

Aqui estamos informando:

  • /etc/mrtg/10.101.0.26/mrtg.cfg arquivo de configuração que vamos gerar os relatórios
  • columns=2 a quantidade de colunas que vamos ter na página HTML para separar os vários gráficos que podemos ter
  • output estamos especificando o arquivo principal dos relatórios

Agora precisamos gerar os primeiros gráficos da seguinte forma

env LANG=C /usr/bin/mrtg /etc/mrtg/10.101.0.26/mrtg.cfg
env LANG=C /usr/bin/mrtg /etc/mrtg/10.101.0.26/mrtg.cfg
env LANG=C /usr/bin/mrtg /etc/mrtg/10.101.0.26/mrtg.cfg

Agora podemos acessar o relatório do nosso cliente em http://ip_servidor/mrtg/10.101.0.26

Configurando VirtualHost

Agora vamos configurar um virtualhost para o MRTG

vim /etc/apache2/sites-available/mrtg
<VirtualHost *:80>
 ServerName mrtg.douglasqsantos.com.br
 ServerAlias mrtg.douglasqsantos.com.br
 DocumentRoot "/var/www/mrtg"
 
 #Controle de acesso ao mrtg
 <Directory "/var/www/mrtg">
  Options -Indexes +FollowSymLinks +MultiViews
  Order allow,deny
  allow from all
  AllowOverride All
 
 #Autenticação do mrtg
 AuthUserFile /etc/apache2/access/mrtg-htpasswd
 AuthName "MRTG"
 AuthType Basic
 require valid-user
 </Directory>
 
 #Configuração dos logs do apache
 ErrorLog /var/log/apache2/mrtg.douglasqsantos.com.br-error.log
 CustomLog /var/log/apache2/mrtg.douglasqsantos.com.br-access.log common
 
 #Retirando a assinatura do Apache
 ServerSignature Off
 
 IndexIgnore .??* *~ *# README RCS CVS *,v *,t *
 
 # Possible values include: debug, info, notice, info, error, crit,
 # alert, emerg.
 LogLevel info
</VirtualHost>

Agora vamos criar a nossa página de index para o mrtg aonde vão ser mapeados os clientes

vim /var/www/mrtg/index.html
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <html>
  <head>
    <title>MRTG Graphs</title>
    <meta http-equiv="Content-Type" content="text/html;
     charset=iso-8859-1">
    <meta http-equiv="Refresh" content="300">
    <meta http-equiv="Cache-Control" content="no-cache">
    <meta http-equiv="Pragma" content="no-cache">
    <meta name="robots" content="noarchive">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <h1>MRTG Graphs</h1>
    <blockquote>
   <ol>
     <li>   <a href="10.101.0.25/index.html" target='_blank'>MRTG Server</a> <br>
     <li>   <a href="10.101.0.26/index.html" target='_blank'>Cliente Debian</a> <br>
   </ol>
    </blockquote>
  </body>
  </html>

Agora para cada novo cliente basta criar uma entrada href como foi feito para o Cliente Debian.

Agora vamos criar o diretório que vai conter o arquivo de controle dos usuários que podem acessar o mrtg

mkdir /etc/apache2/access/

Agora vamos gerar o usuário e a senha, aqui eu vou cadastrar o usuário lightsquid

htpasswd -s -c /etc/apache2/access/mrtg-htpasswd mrtg
New password: 
Re-type new password: 
Adding password for user mrtg

Agora vamos desativar os virtuais hosts default do apache

a2dissite default
a2dissite default-ssl

Agora vamos ativar o mrtg

a2ensite mrtg

Agora vamos reiniciar o apache

/etc/init.d/apache2 restart

Agora já podemos acessar http://mrtg.douglasqsantos.com.br ou http://ip_servidor precisamos informar o usuário mrtg e a senha que foi definida para ele com o comando htpasswd

Referências