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.
Então será apresentada a página do 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.
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.
O mesmo acontece ao clicar em Services.
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á.
E ao clicar em Services.
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.
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.
E sua página do Nagios ficará assim quando clicar em Hosts.
E assim assim quando clicar em Services.
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!
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?
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?
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
Corrigindo:
./configure –with-httpd-conf=/etc/apache2/sites-enabled
make all
Corrigido!