Operate

Observability

Health endpoints, metrics, logs and the evidence ring.

Health endpoints#

EndpointMeaning
GET /livezAnswers while the process runs. Never looks at the database.
GET /readyz200 while the node can serve clients; 503 once the upstream has been unreachable longer than upstream.readiness_grace_s.

For container health checks use streamql probe http://127.0.0.1:9930/readyz, which exits 0 on a 2xx answer.

Metrics#

GET /metrics serves the Prometheus text format on the admin port. Examples:

MetricMeaning
streamql_up, streamql_readyProcess and readiness state
streamql_pool_waitingClients waiting for a server connection
streamql_pool_wait_secondsPool wait distribution
streamql_pool_transactions_totalTransactions served
streamql_protocol_errors_totalProtocol faults seen from clients
streamql_reactor_*Reactor engine counters: polls, events, hand-offs, waits, backpressure pauses

The admin API under /api/v1 adds overview, pools, limits, clients, decisions, gateways, config, xray, fleet and insights. The JSON shapes are documented in the repository at crates/streamql-admin/API_SERVER.md.

Logs#

Logs are an event stream on standard output. Set log.format = "json" in production and log.level to a level or a filter such as streamql_proxy=debug.

Evidence ring#

With dataplane.evidence = true (default), StreamQL writes one evidence record per statement into an in-memory ring of dataplane.evidence_capacity records (8192), striped by session to keep contention low. The console reads it for Decisions and Trace. Records hold no parameter values. Recording costs 10 to 20 ns per statement in a micro-benchmark, and switching it off skips building the record.

Alerts#

Alert rules are evaluated every 15 seconds and delivered to Email (SMTP), SMS (Twilio), Slack, Telegram or signed webhooks. See the Console guide.