Neste post, apresento um solução simples para monitorar a disponibilidade de um ou mais sites utilizando uma função lambda com código em Python na AWS. Além de monitorar a disponibilidade, é possível configurar notificações de disponibilidade via E-mail e/ou SMS.

O lambda é uma opção fantástica para necessidades como estas, uma vez que trabalha com serverless, sendo assim, é muito mais eficiente que deixar um servidor/container ligado apenas para executar este tipo de ação.

Minha necessidade aqui é basicamente executar validações de 5 em 5 minutos em um ou mais sites, confirmando que o site retorna um status ok “200”, caso não retorne isso, me encaminhe uma notificação via e-mail e/ou SMS.

Na seguinte imagem apresento a arquitetura deste monitoramento, seu funcionamento se dará desta forma:

  • A Lambda valida se o site este no ar, se sim, retorna os códigos 200/304 e registra no CloudWatch, se o retorno for negativo com um código menor que 200, se registra no CloudWatch e efetua o disparo do alerta.

Vamos à mão na massa:

Primeiro, crie uma role no IAM do tipo para Lambda e atribua a seguinte policy no formato JSON

Após criar a role, vá até a console do Lamda e crie uma nova função (Linguagem Python 2.7 e permissões básicas do Lambda):

Após criar a função, na área de código, adicione o seguinte código Python

Atente-se para inserir as suas URLs válidas neste local no código

Em “Função de execução”, aponte para a role que você criou anteriormente e deixa a configuração de rede igual a imagem

Agora que você já criou sua função, será necessário criar uma trigger para chamar esta função de validação do(s) site(s) a cada 5 minutos, utilizaremos o CloudWatch Events como trigger, para isto, clique em “+ Adicionar gatilho” na área de Designer, após isso, selecione “Eventos do CloudWatch” e preencha conforme a imagem:

Sua configuração da Lambda deverá ficar como na imagem, após isso, clique em Salvar.

Com isto, a parte referente ao Lambda estará pronta. Seguiremos agora para a configuração do CloudWatch e SNS para notificações.

Na console do SNS, crie um tópico com ao menos um “subscriber”, seja e-mail ou SMS, conforme a sequência de imagens:

Aqui você apenas cria o tópico e salva.

Após criar o tópico, clique em Criar assinatura:

Preencha com um e-mail ou telefone válido e clique em Criar Assinatura:

Criado o tópico no SNS, abra a console do CloudWatch e em Métricas, procure pela métrica WebsiteStatusCode, ela só vai aparecer depois que a Lambda rodar a primeira vez:

Após validar que a métrica existe, no mesmo menu da esquerda, clique em Alarmes e em Criar Alarme, selecione o métrica “WebsiteStatusCode”, a tela ficará da seguinte forma:

Mais abaixo em Condições, deixe conforme a imagem:

Após configurar, clique em Próximo e configure conforme a imagem:

Aqui você aponta para o tópico do SNS criado anteriormente

Clique em Próximo, defina um nome único para o alarme e clique em Criar Alarme.

Pronto, a configuração esta pronta e a cada 5 minutos, a Lambda irá “pingar” sua lista de sites e caso o retorno seja <200, o SNS irá lhe notificar.

Gostou do post, ficou com dúvidas, aguardo seus comentários!

Grande abraço e até a próxima.


0 comentário

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *