Architecture
Node roles
| Role | What it runs | State |
|---|---|---|
standalone | HTTP API + all workers in one process | — |
router | Reverse proxy + rate limiting | stateless |
ingester | gRPC ingest + WAL + buffer + flush to Parquet | local WAL (≤ flush window) |
querier | Arrow Flight server + DataFusion execution | stateless |
compactor | Periodic Parquet merge + retention cleanup | stateless |
alert_manager | Rule evaluation + escalation dispatch | stateless |
[node].roles config (or MS_NODE.ROLES). Only the ingester holds
local state — a WAL within the flush window — so every other role scales freely.
Deployment options
- Docker Compose
- Kubernetes
The repo ships two profiles:
Dependencies
- Postgres — metadata (
FileMeta, streams, alerts, identity). - Object store —
local,s3(and S3-compatible: MinIO, R2, Aliyun OSS),azure, orgcs.
Operations
- Single binary, same image for all roles.
- Prometheus
/metricswith rich cache / object_store / ingester / compactor metrics. - Health probes — readiness is gated by ingester WAL replay plus an object-store round-trip probe.
- TLS + ACME — optional automatic certificates via
[http.tls](HTTP-01 challenge, Let’s Encrypt).