Existem boas técnicas para monitorar tarefas cron em um cluster?
Estamos começando a usar o cron para iniciar tarefas em intervalos diários. Algumas idéias para verificar as informações:
- Adicione manipulação de aplicativo especial que registra informações em algum local "com reconhecimento de rede", como um banco de dados
- Construa um sistema de arquivo de log que transfira o cron cron periodicamente para um ponto central para processamento / consulta (junto com outros possíveis arquivos de log)
Gostaria de saber se as pessoas tiveram sucesso em fazer as coisas separadamente para o cron em relação a outras, ou se as tarefas foram integradas completamente a uma abordagem diferente. Estou inclinado para a segunda posição, mas gostaria de saber o que pessoas mais experientes podem experimentar.
monitoring
cron
Tristan Juricek
fonte
fonte
Respostas:
Além das outras respostas:
Usamos o primeiro para facilitar a verificação do Nagios ( Icinga ), por exemplo, se o último carimbo de data / hora escrito for mais antigo que n horas (mais qualquer lógica que você precisar) - sabemos que algo deu errado.
fonte
Minha abordagem comum é assim:
fonte
/dev/null
, pelo menos add|| echo "service $service is FUBAR"
à linha de comando ...Além do acima:
fonte
Existem algumas técnicas que você pode usar para monitorar cronjobs.
Para receber alertas de falhas no cronjob:
O sistema que você propõe registrar informações em um local "com reconhecimento de rede" soa como syslog . O syslog fornece um método simples para criar logs, normalmente gerencia arquivos como / var / log / messages. Você pode fazer personalizações básicas, como escolher quais arquivos recebem as mensagens de log.
O syslog pode ser iniciado no modo de reconhecimento de rede. Por exemplo, você pode configurá-lo para que um escravo possa registrar em um mestre:
Para uma distribuição baseada no Red Hat, um exemplo de configuração é o seguinte:
(A primeira linha de configuração redireciona os avisos do log local1. * Para @ 192.168.1.3 ("master"). O segundo sinalizador -r da segunda linha SYSLOGD_OPIONS ativa o suporte à rede. Por fim, a terceira linha de configuração direciona as mensagens local1. * Recebidas no "master" em um arquivo).
A abordagem syslog é melhor apenas para registrar erros / informações. Os arquivos de log têm menos visibilidade do que os emails, portanto você provavelmente não verá os logs, a menos que algo dê errado.
Se você optar por seguir a rota de estilo syslog, considere também syslog-ng: http://freshmeat.net/projects/syslog-ng/ .
Obviamente, você pode obter o melhor das duas técnicas usando as duas. Por exemplo, syslog'ing tanto falhas quanto sucessos, e apenas enviando por falhas.
fonte
Publiquei uma resposta semelhante a uma pergunta no StackOverflow ( /programming/21025495/system-for-monitoring-cron-jobs-and-automated-tasks )
O Cronitor ( https://cronitor.io ) foi uma ferramenta que eu construí exatamente para esse fim. Basicamente, tudo se resume a ser um farol de rastreamento que usa solicitações http como pings.
No entanto, uma das necessidades mencionadas pelo OP em seu comentário precisa ser informada quando um trabalho começa a demorar muito para ser executado.
Eu tinha essa mesma necessidade e descobri que ferramentas semelhantes não suportavam facilmente esse tipo de monitoramento. O Cronitor resolve isso, permitindo que você ative opcionalmente um evento inicial e um final para manter o controle da duração.
O rastreamento de duração era essencial para mim porque eu tinha um cronograma agendado a cada hora, mas com o tempo começou a demorar mais de uma hora para ser executado. Espero que você ache útil!
fonte
Ele ainda está em desenvolvimento bastante pesado no momento em que escrevi isso, mas eu encorajo a dar uma olhada em https://github.com/jamesrwhite/minicron . Foi desenvolvido para resolver os problemas que você descreve. Com uma pequena modificação no comando que você executa, ele pode gravar o status de saída e saída dos trabalhos e envia esses dados de volta para um servidor central em tempo real e pode enviar alertas por email, SMS e PagerDuty quando um trabalho falha (status de saída> 0) ou não executa quando deveria.
Disclaimer: Eu sou o desenvolvedor trabalhando nisso.
fonte
Parece um caso de uso clássico para AlertGrid .
Não requer instalação, tudo o que você precisa fazer para obter benefícios desta ferramenta é:
execution_time
!se my_job não responder em X minutos (horas no seu caso) -> envie SMS para o administrador
ou
if Execution_time> 60 segundos -> enviar email para as pessoas interessadas
Na verdade isso é tudo. Você pode gerenciar regras de notificação usando um bom editor visual. Você não precisa modificar o código fonte ou alguns arquivos de configuração, se algo mudar. É uma solução centralizada, para que você possa se beneficiar do gerenciamento de regras em um único local.
Espero que isso ajude alguém. Existe uma conta gratuita fornecida para que você possa testar e usar o AlertGrid se estiver interessado. Eu sou um dos membros da equipe AlertGrid - fique à vontade para perguntar se você tem alguma dúvida.
fonte
Seus trabalhos do cron já estão registrados via syslog. Esses dados podem ser enviados para um servidor central usando o syslogd, outro serviço padrão.
http://www.debuntu.org/how-to-remote-syslog-logging-on-debian-and-ubuntu/ tem detalhes sobre como configurar isso.
fonte
eu uso http://cronrat.com basta anexar && curl "... seu cronrat url" aos seus trabalhos cron. A melhor característica que eu gosto é que você não precisa configurar nada depois de criar a conta inicial. Cada alerta está em funcionamento no minuto em que você o usa. portanto, posso usar qualquer ferramenta automatizada para iniciar meus trabalhos que ainda não existem, ao contrário de alguns serviços em que preciso configurar o trabalho primeiro.
fonte
Eu criei o Power Cron depois dessas necessidades precisas. Eu precisava de uma visão centralizada sobre meus trabalhos cron e uma noção de dependência entre os trabalhos de diferentes membros do cluster.
Eu também precisava de mais informações do que as que encontrei nos logs e adicionei perfil de trabalho.
fonte
Criamos o PushMon, http://www.pushmon.com , para isso. Digamos que seu trabalho diário seja executado às 3 da manhã e normalmente termine às 4 da manhã. Você pode configurar uma programação PushMon de "até 04:00 todos os dias". Ou uma programação um pouco mais avançada, como "às 04:00 todos os dias em 1 hora". Tudo o que você precisa fazer é "executar ping" na URL do PushMon toda vez que seu trabalho for executado, e ele alertará sobre a falta de pings. Se você tiver certeza de que ocorreu um erro, como quando você pega uma exceção que não pode tratar, pode usar o recurso de alerta sob demanda.
fonte
Healthchecks ( https://github.com/healthchecks/healthchecks/ ) é um serviço e painel criado exatamente para monitorar tarefas cron. Ele está sendo usado na produção, é mantido e aceita contribuições de código.
Funciona da mesma forma que o Cronitor, o Snitch do Dead Man e os amigos: você configura seu trabalho cron para fazer uma solicitação HTTP / HTTPS para um URL exclusivo e especial antes de terminar. Os Healthchecks recebem e registram esses pings. Ele verifica constantemente se os pings chegam nos intervalos esperados. Quando detecta um problema, envia uma notificação. Os métodos de notificação suportados são email, webhooks, Slack, Telegram, Discord, SMS, Pushover, Pusbullet, PagerDuty, PagerTree, HipChat, VictorOps, OpsGenie.
Você pode configurar tudo isso e hospedar-se, mas, como em qualquer serviço da web, é necessário algum esforço para configurar o nome de domínio, o certificado, configurar o proxy reverso HTTP, configurar backups de bancos de dados etc. Uma maneira razoavelmente fácil de obter Em execução é usar esta versão adaptada do Heroku: https://github.com/iphoting/healthchecks . Conheço pessoas que executam esse projeto e o usam para monitorar centenas de serviços.
Isenção de responsabilidade: sou o autor e também executo o Healthchecks como um serviço hospedado em https://healthchecks.io
fonte