Daemon para gerenciar scripts de manutenção

3

Eu tenho um monte de "roteiros noturnos" para manter um servidor. O problema é que a "janela de ação", quando esses scripts podem ser executados, é sempre diferente. Às vezes não há nada acontecendo por minutos e horas, às vezes o servidor processa alguns dados a noite toda. Os scripts não são apenas (mas principalmente) scripts DB.

Um desenvolvedor veio com uma ideia de implementar um daemon. Esse daemon deve verificar as condições do servidor e, se houver recursos livres suficientes, alguns scripts serão iniciados.

Eu acho essa ideia interessante (para não dizer sedutor ;-)), mas não vou reinventar a roda. Existem padrões comprovados? Alguns plugins Shinken ou Nagios, talvez?

    
por Robert Debowski 20.12.2012 / 10:01

1 resposta

2

No mundo dos nagios, você pode encadear tarefas usando manipuladores de eventos em serviços.

Os manipuladores de eventos são, na verdade, um segundo comando executado após o primeiro comando de serviço, sempre , (se ativado na configuração global und para esse serviço). O uso básico do manipulador de eventos consiste em lançá-lo com o estado do serviço e os resultados do comando. Em seguida, o script do manipulador de eventos analisa o estado do serviço (estamos OK / WARNING / CRITICAL? Foi a primeira vez que o cheque nos envia esse estado? Estado difícil ou flexível, etc) e decidimos lançar um comando. O link anterior na documentação mostra um script bash básico fazendo isso (cuidado para o manipulador de eventos ser sempre executado, mesmo após um resultado de sucesso).

Assim, você pode adicionar um manipulador de eventos em um serviço de carregamento médio, e este manipulador de eventos pode iniciar suas tarefas de manutenção consumindo o cpu quando o estado do serviço estiver OK. Ou poderia simplesmente definir um sinalizador em algum lugar do seu sistema de arquivos e sua tarefa do cron checaria o sinalizador antes de executá-lo.

Agora você pode precisar mesclar vários resultados de serviços antes de decidir se o sistema está realmente pronto para iniciar as tarefas, por vários motivos:

  • verificando a média de carga e o estado da memória
  • verificar banco de dados está pronto e em bom estado
  • verificar se os outros dois não estão bem, mas o tempo acabou e você realmente precisa executar as tarefas ou se atrasará

Algumas verificações como check_cluster podem ajudá-lo a mesclar vários resultados de serviços e obter um serviço em um estado OK se 3 serviços em 5 forem no estado OK (por exemplo). Em seguida, você configuraria o manipulador de eventos em um serviço usando check_cluster.

O gerenciamento do status "Estou atrasado" é mais difícil. O melhor lugar para isso é o código do manipulador de eventos (ignorar status crítico ou de aviso se você estiver atrasado).

Você também pode ter restrições de períodos de tempo (exemplo: as tarefas de manutenção devem ser executadas apenas na sexta-feira). Você tem várias receitas para isso. IMHO o melhor é apenas definir um flag com o manipulador de eventos e definir os períodos de tempo com o agendador de tarefas de manutenção ( crontab ). O Nagios fornece períodos de tempo que podem ser anexados ao seu serviço, mas mesmo os últimos lançamentos do Nagios tiveram alguns erros pesados com serviços não programados para executar 7/7 24/24, bugs que forçaram a execução do próximo serviço fora do período de tempo, depois o empurraram 1 semana depois (por que 1 semana?) e nunca mais iniciaram o serviço novamente). Cron ou qualquer agendador externo fará agendamentos de manutenção melhores e mais robustos (eu não testei o agendador Shinken, talvez ele realmente suporte oficial períodos de tempo avançados )

    
por 10.01.2013 / 09:50