Skip to main content

Metrics Reference

This page is the authority for metric families emitted by Impulse v0.6. It records each family's Prometheus exposition type, labels, unit, and meaning.

Endpoint and Exposition​

  • method: GET
  • configured path: observability.metrics.path
  • default path: /metrics
  • format: Prometheus text exposition

The endpoint configuration, bind restrictions, mutual TLS (mTLS) behavior, and connection limits are documented in Observability and Control Configuration.

In the tables below, — means the family has no labels or no physical unit. Counters are cumulative for the process lifetime unless their labeled state is removed during runtime reconciliation. Unix-time gauges are seconds since the Unix epoch.

Request Totals and Authentication​

MetricTypeLabelsUnitMeaning
impulse_requests_totalcounter—requestsRequests seen by the proxy.
impulse_requests_successcounter—requestsSuccessful upstream responses.
impulse_requests_failurecounter—requestsFailed requests.
impulse_request_validation_rejectscounter—requestsRequests rejected by protocol validation.
impulse_policy_deniedcounter—requestsRequests denied by runtime method/path policy.
impulse_external_auth_allowedcounter—decisionsRequests explicitly allowed by external authorization.
impulse_external_auth_deniedcounter—decisionsRequests denied, challenged, or redirected by external authorization.
impulse_external_auth_timeoutcounter—decisionsExternal-authorization decisions that timed out.
impulse_external_auth_errorcounter—decisionsExternal-authorization transport or execution failures.
impulse_request_rate_limitedcounter—requestsRequests rejected by scoped rate limits.

The three unlabeled request-total families are coarse compatibility aggregates. They remain current and are not deprecated, but they do not identify an upstream, backend, status class, or terminal outcome.

Upstream and Backend Request Results​

MetricTypeLabelsUnitMeaning
impulse_upstream_requests_totalcounterupstream, status_class, outcomerequestsCompleted requests grouped by upstream pool, HTTP status class, and coarse terminal outcome.
impulse_backend_requests_totalcounterupstream, backend, status_class, outcomerequestsThe same completed requests grouped additionally by selected backend. backend="__none__" represents no selected backend.
impulse_upstream_request_latency_mshistogramupstream, outcome; le on bucketsmillisecondsEnd-to-end request latency grouped by upstream and coarse outcome.

Histogram exposition uses impulse_upstream_request_latency_ms_bucket, impulse_upstream_request_latency_ms_sum, and impulse_upstream_request_latency_ms_count. Bucket bounds are 1, 5, 10, 25, 50, 100, 250, 500, 1000, 2000, 5000, 10000, 30000, 60000, and +Inf milliseconds.

status_class is one of 1xx, 2xx, 3xx, 4xx, 5xx, other, or unknown. outcome is one of success, failure, rate_limited, timeout, backend_error, or overload_shed. These coarse outcome values are preserved for compatibility; several more-specific terminal reasons intentionally map to failure.

Route Metrics​

The route label is the upstream pool name selected by routing. Requests that never select a pool use route="unrouted".

MetricTypeLabelsUnitMeaning
impulse_route_requests_totalcounterrouterequestsCompleted requests for the route.
impulse_route_success_totalcounterrouterequestsSuccessful route outcomes.
impulse_route_failure_totalcounterrouterequestsFailed route outcomes.
impulse_route_timeout_totalcounterrouterequestsTimed-out route outcomes.
impulse_route_rate_limited_totalcounterrouterequestsRate-limited route outcomes.
impulse_route_backend_error_totalcounterrouterequestsBackend-error route outcomes.
impulse_route_overload_shed_totalcounterrouterequestsOverload-shed route outcomes.
impulse_route_latency_sample_everygauge—requests per sampleRoute-latency sampling interval. 1 means every request.
impulse_route_latency_ms_p50untypedroutemillisecondsApproximate p50 over the route's sampled latency buckets.
impulse_route_latency_ms_p95untypedroutemillisecondsApproximate p95 over the route's sampled latency buckets.
impulse_route_latency_ms_p99untypedroutemillisecondsApproximate p99 over the route's sampled latency buckets.

The sampling interval comes from IMPULSE_ROUTE_LATENCY_SAMPLE_EVERY and defaults to 1. The three percentile series are gauge-like current values, but the v0.6 renderer emits no Prometheus # TYPE declaration for them; consumers therefore parse them as untyped.

Worker Metrics​

worker is a process-local label in the form worker-<zero-based-index>.

MetricTypeLabelsUnitMeaning
impulse_worker_requests_totalcounterworkerrequestsRequests handled by each worker.
impulse_worker_requests_successcounterworkerrequestsSuccessful requests by worker.
impulse_worker_requests_failurecounterworkerrequestsFailed requests by worker.
impulse_worker_ingress_packets_totalcounterworkerpacketsUDP ingress packets processed by worker.
impulse_worker_ingress_queue_dropscounterworkerpacketsIngress packets dropped from full shard queues by worker.
impulse_worker_ingress_queue_drop_bytescounterworkerbytesBytes in worker-attributed ingress queue drops.

Early Data, Health, and Backend Errors​

MetricTypeLabelsUnitMeaning
impulse_early_data_acceptedcounter—requestsRequests accepted in QUIC early data.
impulse_early_data_rejectedcounter—requestsRequests rejected in QUIC early data.
impulse_health_checks_totalcounter—checksActive health checks executed.
impulse_health_checks_successcounter—checksSuccessful active health checks.
impulse_health_checks_failurecounter—checksFailed active health checks.
impulse_backend_timeoutscounter—eventsBackend timeout events.
impulse_backend_errorscounter—eventsBackend error events.
impulse_health_failures_totalcounterreasonfailuresPassive backend-health failures.

impulse_health_failures_total.reason is 5xx, timeout, transport, or tls. Circuit-open rejection is not added to this family.

Overload and Admission​

MetricTypeLabelsUnitMeaning
impulse_overload_shedcounter—requestsRequests shed by overload controls.
impulse_overload_shed_by_reason_totalcounterreasonrequestsOverload-shed decisions grouped by their limiting mechanism.
impulse_inflight_wait_admit_totalcounterscoperequestsRequests admitted after the configured inflight micro-wait.
impulse_brownout_activegauge—boolean1 while brownout is active; otherwise 0.
impulse_circuit_breaker_rejected_totalcounter—requestsRequests rejected by an open circuit.

Overload reason values are brownout, adaptive_admission, route_cap, route_global_cap, global_inflight, upstream_inflight, backend_inflight, circuit_open, request_buffer_cap, response_prebuffer_cap, and connection_cap. Inflight scope is global or upstream.

Quota​

MetricTypeLabelsUnitMeaning
impulse_quota_policy_outcomes_totalcounterpolicy, decision, reason, selector_dimensions, backend_modedecisionsOutcomes for a matched quota policy.
impulse_quota_backend_health_totalcounterbackend_mode, reasonobservationsQuota backend availability and error observations.

Quota decision values are allowed, denied, shadow_denied, failed_open, failed_closed, and not_applied. Policy reasons are allowed, not_applied, burst_quota_exhausted, sustained_quota_exhausted, selector_identity_missing, selector_identity_invalid, backend_timeout, backend_unavailable, and backend_error. Backend-health reasons are available, timeout, unavailable, and error. selector_dimensions is the canonical +-joined selector composition; backend_mode also identifies degraded local-fallback modes.

Connections and Ingress​

MetricTypeLabelsUnitMeaning
impulse_active_connectionsgauge—connectionsCurrent active QUIC connections.
impulse_connection_cap_rejectscounter—connectionsNew connection attempts rejected by max_active_connections.
impulse_ingress_packets_totalcounter—packetsUDP packets processed by ingress.
impulse_ingress_queue_dropscounter—packetsPackets dropped because an ingress shard queue was full.
impulse_ingress_queue_drop_bytescounter—bytesDatagram bytes dropped because ingress shard queues were full.
impulse_ingress_queue_bytesgauge—bytesBytes buffered in ingress shard queues.
impulse_ingress_bad_header_totalcounter—packetsPackets dropped because the QUIC header could not be parsed.
impulse_ingress_rate_limited_totalcounter—packetsInitial packets dropped by the new-connection rate limiter.
impulse_ingress_unroutable_totalcounter—packetsNon-Initial packets received for unknown connections.
impulse_ingress_draining_drops_totalcounter—packetsPackets dropped while the listener is draining.
impulse_ingress_connection_create_failed_totalcounter—packetsPackets dropped because creation of a QUIC connection failed.
impulse_ingress_version_neg_failed_totalcounter—packetsPackets dropped because a version-negotiation response could not be built.
impulse_scid_rotationscounter—rotationsSource connection ID rotations.

Buffer and Body Pressure​

MetricTypeLabelsUnitMeaning
impulse_request_buffered_bytesgauge—bytesBytes held in request backpressure buffers.
impulse_request_buffered_high_watermark_bytesgauge—bytesHighest request-buffer usage observed since process start.
impulse_request_buffer_limit_rejectscounter—requestsRequests rejected by request-buffer byte caps.
impulse_response_prebuffer_limit_rejectscounter—responsesUnknown-length upstream responses rejected by the prebuffer cap.

Retries and Hedging​

MetricTypeLabelsUnitMeaning
impulse_retries_totalcounter—attemptsRetry attempts across all routes.
impulse_retry_denied_totalcounterreasonattemptsRetry attempts blocked by policy or available request state.
impulse_retry_attempts_totalcounterreasonattemptsRetries started for the classified prior error.
impulse_hedge_triggered_totalcounter—attemptsHedge attempts started.
impulse_hedge_won_totalcounter—requestsRequests for which the hedge response arrived first.
impulse_hedge_wasted_totalcounter—attemptsHedge attempts that did not win.
impulse_hedge_primary_won_after_trigger_totalcounter—requestsHedged requests for which the primary still won.
impulse_hedge_primary_late_ms_totalcounter—millisecondsSum of primary lateness after hedge trigger.
impulse_hedge_primary_late_samples_totalcounter—observationsLateness observations contributing to the aggregate.

Retry-denial reasons are budget, no_bodyless, and no_alternate. Retry-attempt reasons are timeout, transport, and pool.

Downstream TLS​

MetricTypeLabelsUnitMeaning
impulse_downstream_tls_handshake_success_totalcounter—handshakesSuccessful downstream TLS handshakes across listeners.
impulse_downstream_tls_handshake_failure_totalcounterlistener, reasonhandshakesFailed downstream TLS handshakes by listener and classified reason.
impulse_downstream_tls_certificate_selection_totalcounterlistener, selectionhandshakesServer-certificate selection results.
impulse_downstream_tls_alpn_totalcounterlistener, protocolhandshakesNegotiated ALPN protocols.
impulse_downstream_tls_certificate_not_after_secondsgaugelistener, server_nameUnix secondsCertificate expiration timestamp. server_name="__default__" is the default identity.
impulse_downstream_tls_certificate_days_remaininggaugelistener, server_namedaysNon-negative estimated time until certificate expiration.

Handshake failure reasons are missing_client_cert, unknown_issuer, expired_client_cert, invalid_client_cert, alpn, and handshake. Certificate selection is exact_sni, default_only, fallback_no_sni, or fallback_unmatched_sni. protocol is the negotiated ALPN string, or none.

Upstream TLS and Client Certificates​

MetricTypeLabelsUnitMeaning
impulse_upstream_tls_failure_totalcounterupstream, backend, phase, reasonfailuresUpstream TLS failures, including upstream mTLS failures.
impulse_upstream_client_certificate_not_after_secondsgaugeupstreamUnix secondsExpiration timestamp for the upstream client certificate.
impulse_upstream_client_certificate_days_remaininggaugeupstreamdaysNon-negative estimated time until the upstream client certificate expires.

phase is bootstrap or data_plane. TLS failure reasons are unknown_issuer, expired_certificate, hostname_mismatch, alpn, handshake, client_certificate_missing, client_key_missing, client_identity_invalid, client_auth_rejected, and client_certificate_expired. There is no separate impulse_upstream_mtls_handshake_failure_total; upstream mTLS failures use impulse_upstream_tls_failure_total.

Secrets and Certificate Reloads​

MetricTypeLabelsUnitMeaning
impulse_secret_reload_totalcounterscope, result, reasonoperationsSecret or certificate reload outcomes.
impulse_secret_resolve_totalcounterprovider, result, reasonoperationsSecret-reference resolution outcomes.
impulse_secret_last_success_unixtimegaugescopeUnix secondsLast successful secret or certificate load for the scope.
impulse_control_plane_cert_reload_totalcounterresult, reasonoperationsControl-plane listener certificate reload outcomes.

Current scopes include listeners and upstreams; providers include file, literal, and unknown. result is success or failed. Successful resolution uses reason="resolved"; certificate reloads use cert_reload_applied or cert_reload_failed. Upstream secret reload reasons also use runtime activation and upstream-mTLS material reason slugs.

Backend DNS, Connections, and Client Rotation​

MetricTypeLabelsUnitMeaning
impulse_backend_dns_refresh_success_totalcounter—refreshesSuccessful backend DNS refreshes across all backends.
impulse_backend_dns_refresh_failure_totalcounter—refreshesFailed backend DNS refreshes across all backends.
impulse_backend_dns_address_set_changes_totalcounter—refreshesSuccessful refreshes that changed the resolved address set.
impulse_backend_client_rotations_totalcounter—rotationsSuccessful backend-client rotations caused by DNS address-set changes.
impulse_backend_client_rotation_failures_totalcounter—rotationsFailed rotations after DNS changes; stale pooled connections may remain.
impulse_backend_dns_last_refresh_success_secondsgaugebackendUnix secondsLast successful DNS refresh for the backend identity.
impulse_backend_dns_resolved_addressesgaugebackendaddressesCurrent resolved-address count retained for the backend.
impulse_backend_client_rotationscounterbackendrotationsSuccessful DNS-triggered client rotations by backend.
impulse_backend_connect_attempt_totalcounterbackend, hostname, resolved_addrattemptsObserved upstream socket connection attempts to resolved addresses.

The five unlabeled families are process-wide aggregates. The similarly named impulse_backend_client_rotations{backend=...} family is the per-backend breakdown. Connect-attempt cardinality is capped at 512 distinct keys; after the cap, new hostname/address combinations use hostname="__over_cap__" and resolved_addr="__over_cap__" for each backend.

JWT and JWKS​

MetricTypeLabelsUnitMeaning
impulse_jwt_validation_failures_totalcounterreasonvalidationsJWT validation failures by stable rejection reason.
impulse_jwt_algorithm_rejections_totalcounteralgorithmvalidationsTokens rejected because the JOSE algorithm is not allowed.
impulse_jwks_unknown_kid_totalcounterjwks_source_ideventsUnknown-key-ID events that entered JWKS miss handling.
impulse_jwks_refresh_success_totalcounterjwks_source_idrefreshesSuccessful JWKS refreshes.
impulse_jwks_refresh_failure_totalcounterjwks_source_idrefreshesFailed JWKS refreshes.
impulse_jwks_age_secondsgaugejwks_source_idsecondsAge of the active key set since the last successful refresh; 0 before one exists.
impulse_jwks_stategaugejwks_source_id, statebooleanValue 1 on the source's current cache-state series.
impulse_jwks_active_keysgaugejwks_source_idkeysActive verification keys retained for the source.
impulse_jwks_last_refresh_attempt_secondsgaugejwks_source_idUnix secondsLast refresh-attempt timestamp; 0 if absent.
impulse_jwks_last_refresh_success_secondsgaugejwks_source_idUnix secondsLast successful-refresh timestamp; 0 if absent.

jwks_source_id is an opaque source identifier; the endpoint URL is not a label. State values are never_fetched, fresh, stale, refresh_failed_retained, quarantined_retained, and empty_unusable.

Runtime and Control Plane​

MetricTypeLabelsUnitMeaning
impulse_runtime_validation_attempts_totalcounter—operationsStaged runtime validation requests accepted by the Control API.
impulse_runtime_preview_attempts_totalcounter—operationsStaged runtime preview requests accepted by the Control API.
impulse_runtime_activation_totalcounterresult, reasonoperationsRuntime activation outcomes.
impulse_runtime_rollback_totalcounterresult, reasonoperationsRuntime rollback outcomes.
impulse_runtime_rejections_totalcounterreasonrejectionsActivation or rollback rejection reasons.
impulse_runtime_active_generationgauge—generationActive runtime generation identifier.
impulse_runtime_history_depthgauge—entriesRetained runtime-history entries visible to the active generation.
impulse_control_api_connection_limit_dropscounter—connectionsControl API connections dropped by its maximum-connection limiter.
impulse_control_api_audit_event_dropscounter—eventsAdministrative audit records dropped before persistence.
impulse_control_api_audit_write_failurescounter—failuresAudit-sink open or write failures.
impulse_watchdog_restart_requestscounter—requestsRestart requests made by the watchdog.
impulse_watchdog_restart_hookscounter—executionsWatchdog restart commands executed.
impulse_watchdog_degraded_windowscounter—windowsWatchdog evaluation windows classified as degraded.
impulse_runtime_panicscounter—panicsRuntime task panics observed.

Activation and rollback result is success only with reason="applied"; otherwise it is failure. Rejection and failure reasons are invalid_config, startup_owned_change, bind_conflict, resource_prepare_failed, incompatible_reload, unknown_generation, and rollback_not_allowed.

Compatibility and Deprecation Status​

No emitted v0.6 metric family is marked deprecated in the current source. These compatibility surfaces are intentionally retained:

  • unlabeled impulse_requests_total, impulse_requests_success, and impulse_requests_failure alongside the labeled upstream, backend, route, and worker families
  • coarse outcome label values on request-result families
  • process-wide backend DNS and rotation counters alongside per-backend state and rotation families

Do not infer a missing family from a related feature name. In particular, upstream mTLS failures are part of impulse_upstream_tls_failure_total, not a separate mTLS counter.