Monitore a rede local com Nagios e Raspberry Pi 5

O advento da Internet das coisas (IoT) e seus dispositivos, contribuíram para que o monitoramento da rede e seus componentes, antes exclusividade de grandes empresas e universidades, pudesse ser útil também em residências e pequenas empresas. Afinal, como saber se os dispositivos IoT estão funcionando corretamente? A resposta é simples: se são IoT, eles têm endereço IP, e se têm endereço IP podem ser monitorados. Dito isso, a proposta desse post é tornar a Raspberry Pi em um servidor de monitoramento da rede local e seus componentes, buscando garantir o funcionamento dos dispositivos e seus serviços, além de notificar via e-mail em caso de falha. Para isso usaremos o software Nagios na Raspberry Pi, considerado padrão da indústria em software de monitoramento.

Material necessário

Para realizar este projeto, vamos precisar de :

Nos cartões SD é necessário estar gravado o sistema operacional Raspbian, de preferência o Lite. Qualquer dúvida de como isso deve ser feito, você pode consultar este post.

Configurando o Nagios na Raspberry Pi

Para começar precisamos de algum tipo de acesso ao terminal, seja remoto via ssh ou local via teclado. Tudo certo? Então vamos lá!

Vamos começar pelos pré-requisitos.

apt-get update
apt-get install autoconf gcc libc6 make wget unzip apache2 apache2-utils php libgd-dev

É uma boa prática instalar pacotes pelo gerenciador de pacotes da distribuição, no caso do Raspbian o apt. Entretanto, em alguns casos esses pacotes podem estar obsoletos, caso do Nagios. Por esse motivo, abriremos uma execeção e instalaremos o Nagios na Raspberry Pi a partir do código fonte. O Nagios possui duas versões: Nagios XI (enterprise e paga) e o Nagios Core (código aberto e grátis), usaremos o Nagios Core.

Baixar o Nagios.

cd /tmp
wget https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.4.4.tar.gz
tar xvzf nagios-4.4.4.tar.gz

Compilar.

cd nagios-4.4.4
./configure --with-httpd-conf=/etc/apache2/sites-enabled
make all

Criar o usuário e grupo nagios e adicionar o usuário www-data ao grupo nagios.

make install-groups-users
usermod -a -G nagios www-data

Instalar os arquivos binários, CGIs e HTML.

make install

Instalar o serviço e configurar para inicializar no boot do sistema.

make install-daemoninit

Instalar o modo de comando.

make install-commandmode

Instalar exemplos de arquivos de configuração.

make install-config

Instalar arquivos de configuração e ativar módulos do Apache.

make install-webconf
a2enmod rewrite
a2enmod cgi

Criar um usuário (nagiosadmin) e senha para efetuar login na página do Nagios.

htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

Reinicar o Apache.

systemctl restart apache2.service

Iniciar o Nagios.

systemctl start nagios.service

O Nagios agora está funcionando, para confirmar abra um navegador e digite o endereço IP ou nome do servidor – caso tenha um Servidor DNS autoritativo. Por exemplo.

http://192.168.0.5/nagios

http://rasp5/nagios

Serão solicitados o nome de usuário (nagiosadmin) e a senha criados anteriormente.

Imagem 1 - Autenticação

Então será apresentada a página do Nagios.

Imagem 2 - Nagios

Parabéns! você instalou o Nagios com sucesso.

Entretanto, ao clicar em Hosts ou Services (lado esquerdo) é possível observar mensagens de erro. Não se assuste, elas serão corrigidas assim que o Nagios Plugins for instalado, nosso próximo passo.

Imagem 3 - Nagios

Vamos começar pelos pré-requisitos.

apt-get update
apt-get install autoconf gcc libc6 libmcrypt-dev make libssl-dev wget bc gawk dc build-essential snmp libnet-snmp-perl gettext dnsutils

Baixar o Nagios Plugins.

cd /tmp
wget https://nagios-plugins.org/download/nagios-plugins-2.2.1.tar.gz
tar xvzf nagios-plugins-2.2.1.tar.gz

Compilar e instalar.

cd nagios-plugins-2.2.1
./configure
make
make install

Caso tenha fechado, abra novamente um navegador e digite o endereço IP ou nome do servidor – caso tenha um Servidor DNS autoritativo. Por exemplo.

http://192.168.0.5/nagios

http://rasp5/nagios

Após alguns minutos, ao clicar em Hosts você verá que a mensagem de erro desapareceu.

Imagem 4 - Nagios na Raspberry Pi

O mesmo acontece ao clicar em Services.

Imagem 5 - Nagios na Raspberry Pi

Como é possível notar, o comportamento padrão do Nagios é monitorar a si mesmo (localhost).

Agora precisamos adicionar novos dispositivos e serviços a serem monitorados pelo Nagios. Para começar, vamos informar ao Nagios o diretório onde armazenaremos os arquivos de configuração dos dispositivos a serem monitorados.

É sempre uma boa prática fazer uma cópia do arquivo de configuração antes de editá-lo.

cp -p /usr/local/nagios/etc/nagios.cfg /usr/local/nagios/etc/nagios.cfg.default

Vamos editar o arquivo.

vim /usr/local/nagios/etc/nagios.cfg

Descomentar a linha 51.

cfg_dir=/usr/local/nagios/etc/servers

E criar o diretório.

mkdir /usr/local/nagios/etc/servers

É aqui que começa a diversão, vamos criar os arquivos de configuração para os dispositivos.

Como exemplo de dispositivos a serem monitorados, usaremos duas Raspberry Pi’s chamadas de rasp1 e rasp2, e monitoraremos apenas o serviço Ping – que checa a conectividade.

Para rasp1, edite o arquivo.

vim /usr/local/nagios/etc/servers/rasp1.cfg

E inclua o conteúdo (fique atento aos comentários!).

define host {
use                     linux-server
# SUBSTITUA rasp1 PELO NOME DE HOST
host_name               rasp1
# SUBSTITUA Raspberry Pi PELO ALIAS/APELIDO
alias                   Raspberry Pi
# SUBSTITUA 192.168.0.1 PELO ENDEREÇO IP
address                 192.168.0.1
}

define service {

use                     local-service
# SUBSTITUA rasp1 PELO NOME DE HOST
host_name               rasp1
service_description     PING
check_command           check_ping!100.0,20%!500.0,60%
}

Para rasp2, edite o arquivo.

vim /usr/local/nagios/etc/servers/rasp2.cfg

E inclua o conteúdo (fique atento aos comentários!).

define host {
use                     linux-server
# SUBSTITUA rasp2 PELO NOME DE HOST
host_name               rasp2
# SUBSTITUA Raspberry Pi PELO ALIAS/APELIDO
alias                   Raspberry Pi
# SUBSTITUA 192.168.0.2 PELO ENDEREÇO IP
address                 192.168.0.2
}

define service {

use                     local-service
# SUBSTITUA rasp2 PELO NOME DE HOST
host_name               rasp2
service_description     PING
check_command           check_ping!100.0,20%!500.0,60%
}

Agora é só reiniciar o Nagios.

systemctl restart nagios

Caso tenha fechado, abra novamente um navegador e digite o endereço IP ou nome do servidor – caso tenha um Servidor DNS autoritativo. Por exemplo.

http://192.168.0.5/nagios

http://rasp5/nagios

Após alguns minutos, ao clicar em Hosts você verá.

Imagem 6 - Host Nagios

E ao clicar em Services.

Imagem 7 - Service Nagios

Legal, agora além de monitorar a si mesmo (localhost), o Nagios também está monitorando mais dois dispositivos (rasp1 e rasp2).

Mas ainda pode ficar melhor, vamos configurar o Nagios para enviar notificações via e-mail em caso de falha e recuperção dos dispositivos e seus serviços.

Para começar, vamos fazer uma cópia do arquivo de configuração antes de editá-lo.

cp -p /usr/local/nagios/etc/objects/templates.cfg /usr/local/nagios/etc/objects/templates.cfg.default

Editar o arquivo.

vim /usr/local/nagios/etc/objects/templates.cfg

E comentar a linha 76.

#   notification_period workhours

O comentário na linha 76 é autoexplicativo.

; Linux admins hate to be woken up, so we only notify during the day
; Note that the notification_period variable is being overridden from
; the value that is inherited from the generic-host template!

; Administradores de Linux detestam ser acordados, por isso só notificamos durante o dia
; Observe que a variável notification_period é substituída pelo
; valor herdado do template generic-host!

Ou seja, ao comentar a linha 76, o valor da variável notification_period será herdado do template generic-host (linha 58), nesse caso 24×7. Pois embora o comentário sobre os administradores de Linux seja verdade :). É interessante que as notificações sejam enviadas a qualquer hora.

Agora vamos fazer duas pequenas alterações no arquivo de comando do Nagios, corrigindo o comandos que enviam as notificações.

Vamos novamente fazer uma cópia do arquivo de configuração antes de editá-lo.

cp -p /usr/local/nagios/etc/objects/commands.cfg /usr/local/nagios/etc/objects/commands.cfg.default

Editar o arquivo.

vim /usr/local/nagios/etc/objects/commands.cfg

E modificar as linhas 29 e 37, substituindo /bin/mail por /usr/bin/mail.

define command {

command_name    notify-host-by-email
command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
}

define command {

command_name    notify-service-by-email
command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
}

Finalmente, vamos informar ao Nagios para qual email as notificações serão enviadas.

Sempre fazer uma cópia do arquivo de configuração.

cp -p /usr/local/nagios/etc/objects/contacts.cfg /usr/local/nagios/etc/objects/contacts.cfg.default

Editar o arquivo.

vim /usr/local/nagios/etc/objects/contacts.cfg

E modificar a linha 32, substituindo nagios@localhost por seu email.

email [email protected]

Agora é só reiniciar o Nagios.

systemctl restart nagios

Muito bem, definimos basicamente quando (notification_period) e para qual email ([email protected]) as notificações serão enviadas.

É preciso agora definir quem vai enviar essas notificações. Para isso, usaremos o Postfix, um servidor de email, também conhecido como agente de transferência de emails (MTA – Mail Transfer Agent). O Postfix é uma solução completa, fazendo analogia, seria o mesmo que ter uma agência dos Correios em casa, um exagero não?. Ele também é flexível, e pode trabalhar como retransmissor (relayhost), nosso motoboy. Vai funcionar assim: você (Nagios) prepara a encomenda (notificação) e o motoboy (Postfix) leva até os Correios (Gmail) que entrega ao destinatário ([email protected]). Obviamente, que será necessário possuir uma conta de email do Gmail.

Configurando o Postfix

Vamos começar instalando os pacotes.

apt-get update
apt-get install postfix bsd-mailx

No processo de instalação irão aparecer duas telas de configuração, mantenha os valores padrão.

Imagem 8 - Postflix

Imagem 9 - Postflix

Agora vamos criar um arquivo.

vim /etc/postfix/sasl/sasl_passwd

E adicionar as informações relacionadas a conta do Gmail.

# SUBSTITUA [email protected] POR SEU EMAIL DO GMAIL
# SUBSTITUA sua_senha POR SUA SENHA DO GMAIL          
[smtp.gmail.com]:587 [email protected]:sua_senha

Gerar um arquivo de hash para o Postfix.

postmap /etc/postfix/sasl/sasl_passwd

E ajustar as permissões dos arquivos.

chmod 0600 /etc/postfix/sasl/*

Fazer uma cópia do arquivo de configuração do Postfix.

cp -p /etc/postfix/main.cf /etc/postfix/main.cf.default

Editar o arquivo.

vim /etc/postfix/main.cf

Modificar a linha 39.

relayhost = [smtp.gmail.com]:587

E a linha 40, substituindo 192.168.0 pelos três primeiros octetos da sua rede.

mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/24

E adicionar o conteúdo abaixo no final do arquivo.

# Ativar autenticação SASL
smtp_sasl_auth_enable = yes
# Desabilitar métodos que permitam autenticação anônima
smtp_sasl_security_options = noanonymous
# Localização de sasl_passwd
smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd
# Ativar criptografia STARTTLS
smtp_tls_security_level = encrypt
# Localização dos certificados da CA
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

Agora é só reiniciar o Postfix.

/etc/init.d/postfix restart

Para testar basta desligar um dos dispositivos monitorados pelo Nagios. Na configuração padrão do Nagios, em aproximadamente 10 minutos você receberá um email como esse.

Imagem 10 - Nagios na Raspberry Pi

E sua página do Nagios ficará assim quando clicar em Hosts.

Imagem 11 - Nagios na Raspberry Pi

E assim assim quando clicar em Services.

Imagem 12 - Nagios na Raspberry Pi

Curtiu monitorar a rede local com Nagios e Raspberry Pi? Ajude-nos a melhorar o blog, participe com a sua sugestão, dúvida ou comentário aqui embaixo.

Até a próxima!

Faça seu comentário

Acesse sua conta e participe

5 Comentários

  1. Gostei muito de seu tutorial. segui e achei muito legal. fiz a instalação seguindo seus passos.

    Quero usar o Raspberry para monitorar quando meu provedor deixa de me servir, assim a cada vez que cair minha internet, o nagios me alarme e contabiliza o tempo de indisponibidade. poderia me ajudar?

  2. Boa noite, amigo. Gostaria de saber se precisa fazer alguma configuração adicional no postfix para que ele envie os email para o gmail, pois fiz igual ao que você fez e não está chegando os emails e verificando os logs do postfix vejo um erro de rede não alcançada. Você poderia me ajudar aqui, por favor?

  3. Tive o seguinte erro : no passo de compilação
    ./configure –with-httpd-conf=/etc/apache2/sites-enabled make all

    configure: WARNING: you should use –build, –host, –target
    configure: WARNING: you should use –build, –host, –target
    checking for a BSD-compatible install… /usr/bin/install -c
    checking build system type… Invalid configuration `make’: machine `make’ not recognized
    configure: error: /bin/bash ./config.sub make failed

    Edson Junior Della Valentina Gervazio
    1. Corrigindo:

      ./configure –with-httpd-conf=/etc/apache2/sites-enabled

      make all