Pular para o conteúdo principal

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