Operations / Operations

Console surfaces

What each operator-console page is for, and which questions it must not answer.

Live read routes in every self-hosted lane

Each console page answers one operator question. Use the page that owns the facts; do not reconstruct authority from a partial table on another surface.

Overview

Start every shift and incident here. Overview shows node readiness, /live and /ready probes, lane, writer term, route generation, ring generation, MQTT connection count, publish rate, ingress-ring pressure, and bridge backlog.

Route-to-node gates are listed individually with backend reasons. The page also carries incident-triage presets: All alerts, Bridge outage, HA/drain, ACL denies, Schema rejects, Reconnect storm, Ring pressure, and Replay lag.

Triage

Triage correlates already-redacted facts without exposing payloads. Open it from an Overview alert runbook or directly. URL parameters keep a shareable incident view:

/triage?preset=bridge_outage&alert=bridge-webhook-retry&runbook=bridge-outage

The Alert, Facts, Evidence and Support/Action indicator describes the operating sequence. Backend command state is reported separately.

Broker

Inspect sessions, subscriptions, retained-topic summaries, and offline-queue counts. Retained and offline collections expose size and age, never bodies. body_included must remain false.

Nginx owns connection lifecycle and packet shaping. nginz-iotd owns session tables, retain, offline queues, and replay.

Devices

Move from tenant posture to live clients. Filter by tenant, client ID, or principal reference. Record worker ID, connection ID, and session generation before opening Broker or the Reconnect storm preset.

The page does not discover fleet membership by inspecting packets.

Auth

Inspect policy generation, ACL-cache hit rate, denied publishes, and JWT skew rejects. Credential extraction can happen at the nginx edge; durable policy generations stay in nginz-iotd. Unknown generations fail closed.

Rules

Correlate topic filters, schema rejects, republish rate, and bridge-action rate. This is not a SQL rule engine or windowed aggregator. Activation requires config preflight, expected generation, audit evidence, and backend reconciliation.

Bridges

Inspect sink health, retry backlog, dead letters, and drain targets. A high backlog with no dead letters usually means retry is still active. Rising dead letters means the failure policy has been exhausted.

nginz-iot-bridge owns blocking clients. The console cannot complete a delivery itself.

Gateways

Inspect inbound WebSocket, MQTT-SN, CoAP, HTTPS, LwM2M, and LoRaWAN posture alongside daemon-owned Modbus polling and OPC UA client health. Direction determines the runtime owner; none of these adapters becomes an alternate owner of broker sessions or durability.

HA

Compare route decision, writer term, replay frontier, ring generation, controlled drain, and stale-active rejection before any traffic movement. Heartbeat and liveness can raise suspicion; they cannot grant ownership.

Observe

Use bounded counters and diagnostic-signal posture. Typical counters include connect/subscribe/publish allow and deny, current sessions, and unexpected errors. High label churn warns of cardinality growth.

Audit

Prove who performed an operational action. Records stay bounded and redacted. Filter by command ID, actor, bridge ID, rule generation, tenant, or incident term.

Support

Confirm bundle safety before creating a governed support bundle. Do not distribute a bundle if safe to share is false, redacted is false, or payloads/credentials are included.

Configuration

Inspect file-backed configuration generations, drift, and invalid directives. The console is not an in-browser config editor. Source-controlled files, nginx -t, and --test-config remain the activation path.

Command Center

Review governed preflight, submission, status, audit, and reconciliation evidence in one place. See governed commands.

Collection controls

Paginated collections share the same backend filters:

Control Meaning
q Case-insensitive substring across redacted string fields, maximum 64 characters
state Exact match on state or status
offset / limit Server-side pagination; the UI usually requests 10 rows, the API allows 1–200

Filters run on the backend before pagination. Applying a filter resets the offset to zero.

Implementation authority

This page is a customer-oriented guide. The source contract remains authoritative for exact behavior and release evidence.

../nginz-iot-panel/OPERATION_GUIDE.md