4.6 Criando Alertas
Até o momento configuramos o Nagios para que ele detecte e exponha os problemas encontrados em sua interface web. Entretanto, um sistema de monitoramento de qualidade deve ser capaz também de alertar usuários, ou grupos específicos de usuários, sobre tais problemas, mesmo quando eles não estão visualizando o painel do Nagios.
De maneira geral, três configurações são necessárias para o recebimento de alertas.
Configuração dos comandos para o envio de alertas, da mesma forma como configuramos os comandos para verificação dos servidores, por exemplo;
Configuração do período de tempo em que os alertas devem ser emitidos; e
Configuração do usuário, ou grupo de usuários, que será(ão) alertado(s).
Comando para o recebimento de alertas
O Nagios permite o envio e alertas de diferentes tipos, desde um e-mail, até o uso de serviços de mensagem de SMS, pager, dentre outras possibilidades. Por padrão, a notificação por e-mail já vem habilitada. Já o uso de SMS, por exemplo, exige outras configurações e um servidor dedicado para o envio de mensagens os quais, em geral, são pagos.
Desse modo, a título de ilustração, faremos uso do comando padrão de notificação por e-mail de possíveis ocorrências em hosts (notify-host-by-email
) ou serviços (notify-service-by-email
) monitorados pelo Nagios. Os comandos de notificação estão definidos no arquivo /opt/nagios/etc/objects/commands.cfg
, conforme apresentados abaixo:
Quando receber alertas
A decisão de quando os alertas devem ser recebidos é feita pelo Nagios a partir da configuração de períodos de tempo. Tais definições estão armazenadas por padrão no arquivo /opt/nagios/etc/objects/timeperiods.cfg
.
Por exemplo, uma das definições é a do período 24x7 que representa que alertas podem ser emitidos 24 horas por dia nos 7 dias da semana. Esse tipo de período é adequado para equipes que precisam manter sistemas em operação de forma ininterrupta, pois dessa forma alertas podem chegar a qualquer momento. A definição desse padrão de período de alerta, extraída do timeperiods.cfg
, é apresentada abaixo:
A quem alertar em caso de problemas
Finalmente, resta definir quem será alertado em caso de problemas. Podemos alertar tanto um usuário específico como um grupo de usuários responsáveis pelas operações. No exemplo abaixo vamos considerar que apenas um usuário necessita ser alertado.
Também por padrão, o Nagios traz um arquivo com uma configuração padrão localizado em /opt/nagios/etc/objects/contacts.cfg
, cujo conteúdo é o seguinte:
O símbolo de ";" no arquivo cfg
é utilizado para incluir comentário no final das linhas. Algumas dessas informações, como o nome do contato, uso e alias, vamos manter. Além disso, iremos incluir algumas outras configurações e também alterar o endereço de e-mail conforme o desejado.
Crie um arquivo chamado contacts.cfg
e salve-o junto com os demais arquivos de configuração que estamos utilizando até o momento, na mesma pasta que o arquivo Dockerfile
. Se você está seguindo os exemplos desde o início do capítulo, a estrutura de diretórios deve ficar assim:
Posteriormente alteraremos o arquivo Dockerfile
para copiar esse arquivo para o local correto, de forma a substituir o conteúdo original.
Vamos então ao conteúdo do arquivo, que deve ser o seguinte:
Observa-se no arquivo alterado que foram incluídos algumas opções em relação à notificação, unindo ao contato as restrições de tempo e tipos de notificações de interesse.
Por exemplo, service_notification_period
e host_notification_period
definidos como 24x7
indicam que esse usuário receberá notificações a todo e qualquer momento do dia caso algum dos problemas indicados em service_notification_options
e host_notification_options
ocorram. No caso de service_notification_options
, as opções w,u,c,r
indicam, respectivamente, os status do serviço de WARNING (w)
, UNKNOWN (u)
, CRITICAL (c)
, ou RECOVERY (r)
. Já no caso de host_notification_options
, o d,r
representam, respectivamente, o status de DOWN (d)
e RECOVERY (r)
de um host. Desse modo, havendo qualquer dessas ocorrências em hosts ou serviços um e-mail será encaminhado alertando o respectivo usuário.
Não modificamos a definição existente de contactgroup
, pois teremos apenas um contato, portanto apenas um grupo é suficiente.
Por último, temos que definir quais hosts e serviços irão ser monitorados para gerar alertas e notificações. Modifique o aruivo hosts.cfg
conforme segue:
As seguintes configurações foram definidas:
check_command check-host-alive
: para realizar a verificação ativa do host
check_interval 1
: para checar a cada minuto
retry_interval 1
: para verificar, caso falhe, a cada minuto
max_check_attempts 2
: tentar duas vezes antes de notificar
check_period 24x7
: chegar o tempo todo
process_perf_data 0
: coletar dados de performance
retain_nonstatus_information 0
: salvar dados de quando o servidor caiu
contact_groups admins
: contatos a serem notificados
notifications_enabled 1
: habilitar notificações para este server
notification_interval 30
: não enviar duas notificações iguais em menos de 30 minutos
notification_period 24x7
: notificar o tempo todo
notification_options d,u,r
: notificar casos de servidor DOWN, UNREACHABLE, RECOVERY
Vamos também configurar os serviços. Modifique o arquivo services.cfg
:
As configurações para os serviços são as mesmas dos hosts, com a exceção da seguinte:
notification_options w,u,c,r,f
: notificar em caso de WARNING, UNKNOWN, CRITICAL, RECOVERY e FLAPPING (serviço que vai e volta)
Para que essas alterações se tornem permanentes em nossa imagem, o arquivo Dockerfile
precisa ser alterado conforme abaixo:
Observa-se na linha 9 que enviamos para a imagem original um novo arquivo contacts.cfg
com o conteúdo alterado e, desse modo, o Nagios passa a encaminhar os alertas conforme definido.
Para testar se tudo está funcionando, basta executar os comandos abaixo que irão interromper a execução do Nagios, gerar novamente a imagem do servidor de Monitoramento e, posteriormente, iremos interromper a execução do Servidor Web e verificar se o alerta surtiu efeito.
Entretanto, para que o envio de mensagens seja efetivado, é necessária a configuração do postfix
ou do sendmail
no contêiner. Desse modo, as configurações acima funcionam se um desses mecanismos de envio de e-mails já esteja configurado no contêiner. Como a configuração de servidor de saída SMTP
de serviços como GMail ou Yahoo utilizam certificados e autenticação por SSL, o processo de configuração é mais trabalhoso. Caso queira configurar utilizando suas credenciais, siga os passos descritos na última seção desse capítulo. Por hora, vamos assumir que as configurações do postfix
estão corretas e o Nagios é capaz de enviar e-mails de alertas.
Por exemplo, assim que inicializamos nosso servidor Nagios é emitido um WARNING
no serviço HTTP
do localhost
. Tal evento, transcorrido o tempo de notificação, é comunicado ao usuário cadastrado, conforme mensagem de e-mail abaixo:
Vamos testar uma interrupção de container. Encerre-o e espere dois alertas, e veja como um e-mail será enviado. Depois suba o container novamente, e veja como em breve outro e-mail será enviado.
Agora teste a interrupção de um serviço. Encerre o container http-api-classificacao-produtos-container-unico
, modifique o Dockerfile
:
Suba o container novamente e veja como chegará uma notificação após o segundo alerta. Desfaça a alteração para receber o aviso de que agora está tudo correto.
IMPORTANTE: conforme configuramos, o Nagios vai tentar duas vezes antes de enviar uma notificação por e-mail.
Passo a passo para a configuração do Postfix para contas GMail
Por padrão, o nosso contêiner padrão já vem com o Postfix
instalado. O que faremos é atualizá-lo para poder executar as configurações necessárias. A instalação dos pacotes do passo a passo a seguir serão incluídas diretamente no Dockerfile
para que a imagem gerada passe a ter o servidor postfix
configurado automaticamente mas, primeiro, é necessária a geração dos arquivos de configuração, e esses dependem das credenciais de login de cada um em sua respectiva conta do GMail ou outro servidor que ofereça recursos de SMTP.
O primeiro passo é a criação de uma conta no GMail e a geração de uma senha de aplicativo para uso no processo. Tal senha pode ser obtida seguindo esse tutorial. A título de exemplo, assumiremos que USER
corresponde ao nome de usuário e PASSWORD
a senha de aplicativo gerada para acesso ao serviço de envio de mensagens via GMail.
Agora faremos o seguinte processo:
Entraremos no contêiner via terminal e iremos executar uma série de comandos para configurá-lo para acessar o Gmail;
Em seguida, iremos copiar alguns dos arquivos gerados no contêiner para a máquina hospedeira;
Finalmente, replicaremos o processo no arquivo
Dockerfile
, para que possamos gerar uma imagem já pré-configurada para a conta do Gmail.
Esse processo serve como um excelente aprendizado, pois esse tipo de configuração (primeiro em um contêiner rodando e depois migrando para o Dockerfile
) é bastante comum e útil em diferentes ocasiões. Vamos lá!
Vamos abrir um terminal no contêiner que está em execução:
1.1. Configuração do Postfix
Instalação dos pacotes para utilizar o Postfix com o GMail
1.2. Alterando o arquivo de configuração do Postfix
Primeiro, elimine desse arquivo a linha com o conteúdo
Em seguida, inclua as linhas abaixo no final do arquivo
1.3. Definir o login e a senha do GMail no arquivo abaixo:
O conteúdo desse arquivo deve ser conforme abaixo, sendo que USER
e PASSWORD
correspondem ao seu login e a senha de app gerada no GMail:
1.4. Criar o arquivo utilizado pelo Postfix Lookup Table
Esse comando gera o arquivo sasl_passwd.db
no diretório /etc/postfix/sasl/
.
1.5. Correção das permissões e proprietários dos arquivos
Se tudo deu certo, podemos testar o envio de email:
Terminamos o passo 1 acima, portanto podemos sair do terminal do contêiner, com o comando exit
. Agora vamos para o passo 2, que consiste em copiar os arquivos recém-criados para a máquina hospedeira. Utilizaremos o comando docker cp
.
2.1. Crie uma pasta, dentro da mesma que estamos trabalhando até o momento, chamada postfix
, e execute os comandos de cópia (lembre-se de substituir pelo seu diretório):
A estrutura final de diretórios deve ser a seguinte:
Copiados esses arquivos, pode-se encerrar o contêiner:
Agora vamos alterar o arquivo Dockerfile
para reproduzir tudo o que fizemos até o momento. Dessa forma, sempre que a imagem for construída, já teremos tudo o que é necessário para que a configuração feita para o postfix seja permanente.
3.1. Altere o arquivo Dockerfile
:
Observe que é a mesma sequência de alterações que fizemos manualmente dentro do contêiner, exceto pelas alterações manuais feitas nos arquivos que foram copiadas para a pasta da máquina hospedeira.
3.2. Reconstrua a imagem e execute novamente o contêiner, para que as alterações sejam efetivadas.
Last updated