Skip to content

Metrics

jaque exposes its own vital signs as Prometheus metrics, the same way every other target does.

/metrics shares the same -listen server as the dashboard and the command API — there’s no separate flag or port for it. Empty -listen turns all three off at once.

Terminal window
curl -s 127.0.0.1:8080/metrics | grep jaque_

Every series below is registered by internal/metrics/recorder.go, the Prometheus-backed implementation of the engine’s loopObserver and the notifier’s deliveryObserver.

Metric Type Labels What it tells you
jaque_scheduler_drift_seconds Histogram Difference between a check’s scheduled and actual run time.
jaque_scheduler_queue_depth Gauge Number of checks currently queued by the scheduler.
jaque_engine_not_owned_total Counter Inputs dropped because this engine does not own the object (ADR-015 D5).
Metric Type Labels What it tells you
jaque_check_duration_seconds Histogram check_type Duration of an executed check, by check type.
jaque_check_timeouts_total Counter check_type Number of checks that timed out, by check type.
jaque_work_dispatched_total Counter zone Number of checks dispatched to a remote worker, by zone.
jaque_work_timeouts_total Counter zone Number of dispatched checks that timed out waiting for a result, by zone.
jaque_work_rejected_total Counter zone Number of checks that failed to dispatch to the work queue, by zone.
jaque_work_late_results_total Counter Number of results received for a dispatch no longer pending.
Metric Type Labels What it tells you
jaque_membership_size Gauge Number of members currently in the coordination membership view.
jaque_membership_epoch Gauge Epoch of the last membership view observed by this engine.
jaque_engine_owned_objects Gauge Number of objects this engine currently owns.
jaque_membership_heartbeat_failures_total Counter Number of membership heartbeats that failed.
jaque_engine_stale_epoch_total Counter Number of tail events dropped for carrying a stale membership epoch.
jaque_engine_epoch_behind_total Counter Number of tail events observed with an epoch ahead of this engine’s own.
jaque_engine_commands_forwarded_total Counter outcome Commands forwarded to another engine for an object this engine does not own, by outcome (sent, error).
Metric Type Labels What it tells you
jaque_notify_suppressed_total Counter reason Number of notifications suppressed, by reason.
jaque_notify_delivery_failures_total Counter reason (fixed value adapter) Number of notification deliveries that failed, by reason. Today reason always carries the literal value adapter — every delivery failure lands in one bucket, not one per adapter (webhook/email/command/telegram).
jaque_notifier_pending Gauge Number of notifications currently pending delivery across a notifier’s shards.
jaque_notifier_blocked_total Counter Number of times a notifier’s log follower blocked because a delivery shard’s queue was full (ADR-015 D5: block, never drop).
Metric Type Labels What it tells you
jaque_sink_dropped_total Counter sink CheckExecuted events skipped by a perfdata sink’s ownership gate because this process does not own the object (ADR-015 D5), by sink name; with several sinks one event counts once per sink.
jaque_sink_write_errors_total Counter sink Batches a perfdata sink failed to write, by sink name.
Metric Type Labels What it tells you
jaque_ui_commands_submitted_total Counter outcome Commands a -target ui process submitted to the engine fleet over jaque.work.cmd.ingress, by outcome (sent, error).

Plus the standard Go/process collectors client_golang ships by default — goroutines, GC, memory, file descriptors.

jaque_eventlog_consumer_lag climbing on any follower is the single most useful early-warning signal here: it means some part of the system is falling behind the log, whether that’s the UI, a sink, or a notifier — before anything else visibly breaks.