Arquitetura
Arquitetura de Alto Nível
Pipeline do Sentry, camadas e princípios de design
Arquitetura de Alto Nível
O Sentry é organizado em três camadas de plugins (Sources, Core, Actions) sobre uma camada de persistência. Todo plugin implementa um trait comum, permitindo adicionar fontes e ações sem recompilar o core.
Princípios de design
- Trait
Source: todo plugin implementafn stream_events(&self) -> impl Stream<Item = RawEvent>. Adicionar nginx = implementar o trait. - Trait
Action:fn execute(&self, decision: &Decision) -> Result<()>. Block, Challenge, Alert etc. - Event normalizado: um único
struct Eventindependente da origem. O core nunca sabe se veio do nginx ou do TCP. - Pipeline assíncrono:
tokio+ canais. Cada estágio é um actor/fan-out. - Configuração declarativa:
sentry.tomldefine fontes ativas, ações ativas, thresholds.
Stack técnica
| Camada | Crate / Tecnologia | Justificativa |
|---|---|---|
| Async runtime | tokio | Padrão de facto, multi-plataforma |
| CLI | clap (derive) + ratatui para TUI live | Ergonomia, subcomandos, painel ao vivo |
| Config | serde + toml + figment (env+file merge) | Override por env var em prod |
| Logs/Tracing | tracing + tracing-subscriber | Structured logging, spans por requisição |
| Parser nginx | nom ou regex + serde | Linhas de log access_log custom format |
| HTTP client | reqwest (rustls) | Cloudflare API, webhooks, geolookup |
| ML/IA local | ort (ONNX Runtime) + candle fallback | Inferência local sem depender de API externa |
| LLM (opcional) | trait LlmProvider + adapters: OpenRouter (rota p/ qualquer modelo), async-openai, ollama-rs | Análise de payload complexa sob demanda, provider-agnostic |
| Storage | sqlx com Postgres default (migrations sqlx), SQLite opcional via feature | Mesmo schema, troca por feature flag; Postgres suporta HA e múltiplos nós desde cedo |
| Geolookup | maxminddb (DB local) | Sem chamada externa por evento |
| IPC/Embeddable | core como lib crate (sentry-core) | Futuro dashboard consome a mesma lib |
| Serialização | serde + serde_json | Eventos, export, API futura |
| Erros | thiserror (lib) + color-eyre (bin) | Ergonomia + backtraces legíveis |
| Testes | proptest + insta (snapshots) + wiremock | Payloads maliciosos, fixtures de log |
| Build/Release | cargo-dist ou cross | Binários multi-OS |
Estrutura de crates (workspace)
sentry/
├── Cargo.toml # workspace
├── crates/
│ ├── sentry-core/ # lib: Event, traits, pipeline, scoring
│ ├── sentry-source-nginx/ # plugin Source: nginx log tail
│ ├── sentry-source-http/ # plugin Source: middleware proxy (futuro)
│ ├── sentry-source-tcp/ # plugin Source: pcap (futuro)
│ ├── sentry-source-cloudflare/ # plugin Source: pull logs CF
│ ├── sentry-ai/ # ONNX + LLM provider trait
│ ├── sentry-action-cloudflare/ # plugin Action
│ ├── sentry-action-webhook/ # plugin Action
│ ├── sentry-action-blocklist/ # plugin Action
│ ├── sentry-storage/ # sqlx SQLite/Postgres
│ ├── sentry-geo/ # maxminddb wrapper
│ └── sentry-cli/ # binário: clap + ratatui + entrypoint
├── models/ # modelos ONNX versionados
├── config/sentry.example.toml
├── tests/ # integration tests
└── docs/