SentrySentry
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

  1. Trait Source: todo plugin implementa fn stream_events(&self) -> impl Stream<Item = RawEvent>. Adicionar nginx = implementar o trait.
  2. Trait Action: fn execute(&self, decision: &Decision) -> Result<()>. Block, Challenge, Alert etc.
  3. Event normalizado: um único struct Event independente da origem. O core nunca sabe se veio do nginx ou do TCP.
  4. Pipeline assíncrono: tokio + canais. Cada estágio é um actor/fan-out.
  5. Configuração declarativa: sentry.toml define fontes ativas, ações ativas, thresholds.

Stack técnica

CamadaCrate / TecnologiaJustificativa
Async runtimetokioPadrão de facto, multi-plataforma
CLIclap (derive) + ratatui para TUI liveErgonomia, subcomandos, painel ao vivo
Configserde + toml + figment (env+file merge)Override por env var em prod
Logs/Tracingtracing + tracing-subscriberStructured logging, spans por requisição
Parser nginxnom ou regex + serdeLinhas de log access_log custom format
HTTP clientreqwest (rustls)Cloudflare API, webhooks, geolookup
ML/IA localort (ONNX Runtime) + candle fallbackInferência local sem depender de API externa
LLM (opcional)trait LlmProvider + adapters: OpenRouter (rota p/ qualquer modelo), async-openai, ollama-rsAnálise de payload complexa sob demanda, provider-agnostic
Storagesqlx com Postgres default (migrations sqlx), SQLite opcional via featureMesmo schema, troca por feature flag; Postgres suporta HA e múltiplos nós desde cedo
Geolookupmaxminddb (DB local)Sem chamada externa por evento
IPC/Embeddablecore como lib crate (sentry-core)Futuro dashboard consome a mesma lib
Serializaçãoserde + serde_jsonEventos, export, API futura
Errosthiserror (lib) + color-eyre (bin)Ergonomia + backtraces legíveis
Testesproptest + insta (snapshots) + wiremockPayloads maliciosos, fixtures de log
Build/Releasecargo-dist ou crossBiná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/

On this page