Projeto do sistema de alerta do Watchdog para detectar emails periódicos perdidos [closed]

0

Estou procurando ideias sobre como receber automaticamente um alerta (por e-mail seria bom) se um e-mail periódico específico não chegasse. Eu não necessariamente teria acesso ao sistema que gera o email.

Em um recente caso de uso do mundo real, eu tenho um relatório de resumo que é enviado diariamente para cerca de meia dúzia de técnicos e gerentes dando status do sistema de dezenas de locais de campo. Temos um segundo canal que envia alarmes, mas há muitos problemas de manutenção que só podem ser descobertos ao analisar este relatório.

Ontem à noite, descobri que o script que gerou o relatório havia parado de funcionar há algumas semanas - e ninguém notou. Por favor, antes que alguém gaste muito tempo repreendendo as pessoas que falharam em perceber (e isso incluiria eu) entender que 90% a 100% das pessoas envolvidas são muito boas no que fazem, e realmente se importam, mas estão na fronteira de sobrecarga de informação. Eu acho que é apenas a natureza humana não perceber quando uma das dezenas de e-mails que normalmente não são críticos simplesmente acontece para não chegar. Quando chega, isso parece nos fazer revê-lo com bons resultados, mas sem chegada - nenhum gatilho mental. Notamos e agimos nos e-mails, mas não percebemos e agimos por falta de e-mails.

Meu pensamento atual é enviar qualquer e-mail de relatório que eu queira monitorar para endereços de e-mail "watchdog" adicionais. Eu teria então máquinas independentes - talvez um par de Raspberry Pis ou VM na nuvem receba os e-mails e envie um alerta se passar muito tempo sem receber o e-mail. Tipo de temporizador de watchdog para emails.

Talvez algo como isso já exista e eu simplesmente não tenha os termos de pesquisa certos e alguém possa me indicar as informações, mas também estou interessado em sugestões sobre como outras pessoas podem abordá-las. Por enquanto, estou indo em direção a um roteiro especializado, mas estaria interessado em torná-lo mais genérico.

    
por Boley 14.08.2018 / 16:32

1 resposta

1

Supondo que essas ferramentas estejam disponíveis para você, você poderia agrupar algo por meio de procmail e cron . Se não, qualquer coisa que possa executar comandos shell quando um e-mail específico chegar, poderá fazer algo muito semelhante.

Primeiro, configure uma regra do procmail (ou qualquer outra ferramenta de filtragem de mensagens usada) que corresponda aos e-mails que você deseja monitorar e touch um arquivo de monitoramento. O c sinalizador faz com que a regra processe uma cópia do e-mail e que o processamento continue mesmo se houver uma correspondência; Dessa forma, os e-mails não se perdem.

:0 c
*^Subject: Regular Report
| /usr/local/bin/regular-report-received.sh

Em seguida, escreva um script para touch de um arquivo de propriedade do usuário, salvando-o como /usr/local/bin/regular-report-received.sh neste caso:

#!/bin/bash
touch ~/.regular-report-received

(Isso pode ser feito dentro da regra do procmail, mas eu gosto de manter as coisas separadas, então lá vai.)

Em seguida, você precisará de um cron job que verifique regularmente se o arquivo foi tocado recentemente. Por exemplo, você poderia ter, para cada usuário:

 @daily /usr/local/bin/is-regular-report-received.sh

Depois, há /usr/local/bin/is-regular-report-received.sh , que segue as linhas de

#!/bin/bash
STALE_IF_BEFORE=$(date --date='-36 hours' +%s)
FILE_TIMESTAMP=$(stat -c '%Y' ~/.regular-report-received)
test "${FILE_TIMESTAMP}" -gt "${STALE_IF_BEFORE}" || printf 'Report not received!\n'

Com isso em vigor, cron deve enviar um e-mail para cada usuário à meia-noite, caso não tenha recebido um relatório nas últimas 36 horas.

Ajuste a gosto.

    
por 14.08.2018 / 17:07