Capítulo 11.3 - Monitoramento de Crons e Alertas
Objetivos de Aprendizagem
Ao final deste capítulo, você será capaz de:
- Monitorar a execução de crons
- Detectar falhas de tarefas
- Configurar alertas para crons
- Notificar por email/Slack
- Criar dashboards de monitoramento
- Implementar health checks
Monitoramento de Crons
Verificar Execução
# Ver últimas execuções
sudo grep CRON /var/log/syslog | tail -20
# Por script
sudo grep "mon-script.sh" /var/log/syslog
# journalctl
sudo journalctl -u cron --since "1 hour ago"
# Verificar se executou hoje
sudo grep "mon-script.sh" /var/log/syslog | grep "$(date +%b\ %d)"
Script de Verificação
#!/bin/bash
# Verificar execução do cron
SCRIPT="mon-script.sh"
LOG="/var/log/syslog"
EXPECTED_TIME="02:00" # Hora esperada
# Verificar execução hoje
TODAY=$(date +%b\ %d)
EXECUTED=$(grep "$SCRIPT" "$LOG" | grep "$TODAY" | wc -l)
if [ "$EXECUTED" -eq 0 ]; then
echo "ALERTA: $SCRIPT não foi executado hoje"
# Enviar alerta...
fi
Detecção de Falhas
Código de Retorno
#!/bin/bash
# Script com tratamento de erros
set -e # Parar em caso de erro
# Processamento...
if ! commande_importante; then
echo "ERRO: Falha no comando" >&2
exit 1
fi
# Sucesso
exit 0
Verificar Código de Retorno
#!/bin/bash
# Verificar falha nos logs
SCRIPT="mon-script.sh"
LOG="/var/log/script.log"
# Procurar erros
ERRORS=$(grep -i "error\|failed\|échec" "$LOG" | wc -l)
if [ "$ERRORS" -gt 0 ]; then
echo "ALERTA: $ERRORS erros em $SCRIPT"
# Enviar alerta...
fi
Alertas por Email
Configuração
# Instalar mail
sudo apt install mailutils # Ubuntu/Debian
sudo yum install mailx # Red Hat/CentOS
# Configuração
# /etc/ssmtp/ssmtp.conf (Ubuntu)
# ou
# /etc/mail.rc (Red Hat)
Script com Email
#!/bin/bash
# Script com notificação por email
ALERT_EMAIL="admin@example.com"
SCRIPT_NAME="mon-script.sh"
# Executar script
if /usr/local/bin/mon-script.sh; then
echo "Sucesso: $SCRIPT_NAME executado" | \
mail -s "Sucesso: $SCRIPT_NAME" "$ALERT_EMAIL"
else
echo "FALHA: $SCRIPT_NAME falhou" | \
mail -s "ALERTA: $SCRIPT_NAME" "$ALERT_EMAIL"
exit 1
fi
Crontab com Email
# Crontab
# Enviar saída por email
MAILTO=admin@example.com
0 2 * * * /usr/local/bin/script.sh
# Ou redirecionar para email
0 2 * * * /usr/local/bin/script.sh 2>&1 | mail -s "Relatório" admin@example.com
Alertas Slack
Webhook Slack
#!/bin/bash
# Notificação Slack
SLACK_WEBHOOK="https://hooks.slack.com/services/YOUR/WEBHOOK/URL"
SCRIPT_NAME="mon-script.sh"
# Mensagem
MESSAGE="Script $SCRIPT_NAME: $(if [ $? -eq 0 ]; then echo 'Sucesso'; else echo 'FALHA'; fi)"
# Enviar
curl -X POST -H 'Content-type: application/json' \
--data "{\"text\":\"$MESSAGE\"}" \
"$SLACK_WEBHOOK"
Função Reutilizável
#!/bin/bash
# Função de notificação Slack
notify_slack() {
local webhook="https://hooks.slack.com/services/YOUR/WEBHOOK/URL"
local message="$1"
local status="$2"
local color="good"
[ "$status" != "success" ] && color="danger"
curl -X POST -H 'Content-type: application/json' \
--data "{\"attachments\":[{\"color\":\"$color\",\"text\":\"$message\"}]}" \
"$webhook"
}
# Uso
if mon-script.sh; then
notify_slack "Script executado com sucesso" "success"
else
notify_slack "Script falhou" "failure"
fi
Health Checks
Script de Health Check
#!/bin/bash
# Health check para cron
SCRIPT="mon-script.sh"
LOCK_FILE="/var/run/$SCRIPT.lock"
MAX_AGE=3600 # 1 hora em segundos
# Verificar lock file
if [ -f "$LOCK_FILE" ]; then
AGE=$(($(date +%s) - $(stat -c %Y "$LOCK_FILE")))
if [ "$AGE" -gt "$MAX_AGE" ]; then
echo "ALERTA: Script travado há $AGE segundos"
# Enviar alerta...
rm -f "$LOCK_FILE"
fi
fi
Heartbeat
#!/bin/bash
# Heartbeat para monitoramento
HEARTBEAT_FILE="/var/run/mon-script.heartbeat"
# Atualizar timestamp
touch "$HEARTBEAT_FILE"
# Verificar no monitoramento
# Se heartbeat > 2 horas, alerta
Dashboard de Monitoramento
Script de Relatório
#!/bin/bash
# Relatório diário do cron
REPORT="/var/log/cron-report-$(date +%Y%m%d).txt"
{
echo "=== RELATÓRIO CRON $(date) ==="
echo
echo "=== Execuções bem-sucedidas ==="
grep "mon-script.sh" /var/log/syslog | grep -v "error" | wc -l
echo
echo "=== Execuções com falha ==="
grep "mon-script.sh" /var/log/syslog | grep -i "error\|failed" | wc -l
echo
echo "=== Últimas execuções ==="
grep "mon-script.sh" /var/log/syslog | tail -10
echo
echo "=== Estatísticas ==="
echo "Total de execuções: $(grep 'mon-script.sh' /var/log/syslog | wc -l)"
} > "$REPORT"
# Enviar por email
mail -s "Relatório Cron $(date +%Y-%m-%d)" admin@example.com < "$REPORT"
Monitoramento Avançado
Script de Monitoramento Completo
#!/bin/bash
# Monitoramento completo de crons
LOG_DIR="/var/log/cron-monitoring"
mkdir -p "$LOG_DIR"
# Lista de crons para monitorar
CRONS=(
"backup.sh"
"cleanup.sh"
"report.sh"
)
for cron in "${CRONS[@]}"; do
# Verificar execução
EXECUTED=$(grep "$cron" /var/log/syslog | grep "$(date +%b\ %d)" | wc -l)
# Verificar erros
ERRORS=$(grep "$cron" /var/log/syslog | grep -i "error\|failed" | wc -l)
# Log
echo "$(date): $cron - Execuções: $EXECUTED, Erros: $ERRORS" >> \
"$LOG_DIR/monitoring.log"
# Alerta se houver problema
if [ "$EXECUTED" -eq 0 ] || [ "$ERRORS" -gt 0 ]; then
echo "ALERTA: $cron - Execuções: $EXECUTED, Erros: $ERRORS" | \
mail -s "Alerta Cron" admin@example.com
fi
done
Resumo
Neste capítulo, você aprendeu:
Monitoramento: Verificar execuções, detectar falhas
Alertas: Email, Slack, notificações
Health checks: Lock files, heartbeats
Relatórios: Dashboards, estatísticas
Scripts: Automação de monitoramento
Prática: Monitoramento contínuo, alertas proativos
Próximos Passos
Módulo 12: Administração Avançada (com automação de crons)
Fim do Curso: Recapitulação e Projetos
Capítulo criado em: Dezembro 2024