Celery Beat Setup no Railway - Investigações 24/7¶
Autor: Anderson Henrique da Silva Data: 2025-10-09 Objetivo: Configurar o Celery Beat no Railway para executar auto-investigations 24/7
🎯 Objetivo¶
Fazer o sistema criar investigações automáticas a cada 6 horas, monitorando contratos do Portal da Transparência sem intervenção manual.
📋 O que é o Celery Beat?¶
O Celery Beat é um scheduler (agendador) que dispara tasks do Celery em intervalos específicos. É como um cron job, mas integrado com o Celery.
No nosso sistema: - Celery Worker = Executa as tasks (análise de contratos) - Celery Beat = Agenda quando as tasks devem rodar (a cada 6h)
🚀 Configuração no Railway¶
Passo 1: Verificar os 3 Serviços¶
Você deve ter 3 serviços no Railway:
- cidadao-api - API FastAPI (porta 8000)
- cidadao-worker - Celery Worker
- cidadao-beat - Celery Beat ← ESTE É O IMPORTANTE!
Passo 2: Configurar o Serviço cidadao-beat¶
2.1. Comando Start¶
No Railway → cidadao-beat → Settings → Deploy → Start Command:
2.2. Variáveis de Ambiente¶
As mesmas dos outros serviços:
# Supabase (OBRIGATÓRIO para persistência)
SUPABASE_URL=https://pbsiyuattnwgohvkkkks.supabase.co
SUPABASE_SERVICE_ROLE_KEY=eyJhbGc...
# System User (OBRIGATÓRIO para auto-investigations)
SYSTEM_AUTO_MONITOR_USER_ID=58050609-2fe2-49a6-a342-7cf66d83d216
# Redis (OBRIGATÓRIO para Celery)
REDIS_URL=redis://...
# LLM (OBRIGATÓRIO para análise de contratos)
GROQ_API_KEY=gsk_...
# Portal da Transparência (OPCIONAL)
TRANSPARENCY_API_KEY=e24f842355f7211a2f4895e301aa5bca
2.3. Verificar Health¶
O serviço deve estar: - ✅ Status: Active (verde) - ✅ Logs: Mostrando "beat: Starting..." e schedule das tasks
📊 Schedule Configurado¶
As tasks estão em src/infrastructure/queue/celery_app.py:
| Task | Intervalo | Descrição |
|---|---|---|
auto-monitor-new-contracts-6h |
6 horas | Monitora contratos novos |
auto-monitor-priority-orgs-4h |
4 horas | Monitora organizações prioritárias |
auto-reanalyze-historical-weekly |
7 dias | Reanálise histórica |
auto-investigation-health-hourly |
1 hora | Health check do sistema |
🔍 Como Verificar se Está Funcionando¶
Método 1: Logs do Railway¶
Deve aparecer:
Método 2: Supabase Dashboard¶
- Abra a tabela
investigations - Filtre por
user_id = 58050609-2fe2-49a6-a342-7cf66d83d216 - Verifique se aparecem novas linhas a cada 6 horas
Método 3: Script de Verificação¶
Mostra: - Próximas execuções - Últimas investigações criadas - Status do sistema
🐛 Troubleshooting¶
Problema 1: Celery Beat não inicia¶
Sintoma: Serviço fica "Crashed" ou "Restarting"
Soluções:
1. Verifique se o comando está correto (veja Passo 2.1)
2. Verifique se REDIS_URL está configurado
3. Verifique logs: pode ter erro de import
Problema 2: Celery Beat inicia mas não cria investigations¶
Sintoma: Logs mostram "beat: Starting..." mas nenhuma investigation é criada
Soluções:
1. Verifique se SYSTEM_AUTO_MONITOR_USER_ID está configurado
2. Verifique se SUPABASE_URL e SUPABASE_SERVICE_ROLE_KEY estão corretos
3. Verifique se o Worker está rodando (precisa dele para executar as tasks)
Problema 3: "No module named 'src.infrastructure'"¶
Sintoma: Erro de import no log
Solução: - Verifique se o código está atualizado no Railway - Force um novo deploy
Problema 4: Tasks aparecem nos logs mas não executam¶
Sintoma: Logs mostram "Sending due task..." mas nada acontece
Soluções:
1. Verifique se o Worker está rodando (Beat só agenda, Worker executa!)
2. Verifique logs do Worker: Railway → cidadao-worker → Logs
✅ Checklist Final¶
Antes de considerar pronto, verifique:
- Serviço
cidadao-beatestá Active (verde) - Comando está correto:
celery -A src.infrastructure.queue.celery_app beat --loglevel=info - Todas as variáveis de ambiente estão configuradas
- Logs mostram "beat: Starting..." e schedule das tasks
- Serviço
cidadao-workertambém está rodando - Após 1 hora, verificar no Supabase se aparecem novas investigations
- Filtrar por
user_id = 58050609-2fe2-49a6-a342-7cf66d83d216
📞 Próximos Passos¶
Depois que o Celery Beat estiver rodando:
- Aguarde 6 horas para a primeira auto-investigation
- Monitore o Supabase para confirmar que está criando investigations
- Configure alertas para ser notificado de anomalias detectadas
- Ajuste o intervalo se necessário (atualmente 6h)
🎉 Sucesso!¶
Quando estiver tudo funcionando, você verá:
- ✅ Investigations sendo criadas automaticamente a cada 6h
- ✅
user_idsempre58050609-2fe2-49a6-a342-7cf66d83d216(system user) - ✅
filters.auto_triggered = true - ✅ Análise completa de anomalias em contratos públicos
O sistema estará rodando 24/7 sem necessidade de intervenção manual! 🚀