Plugin Store · Exporter
Prometheus
Scrape /metrics, bounded cardinality.
Overview
The Prometheus exporter is the PULL half of Busbar’s telemetry: name an instance with module: prometheus under the top-level export: map and Busbar installs the metrics recorder and mounts GET /metrics in the exposition format your scraper already reads.
Cardinality is bounded by design. Labels come from your configured pool and lane names and from fixed enumerations, never from raw model strings off a client request, so a hostile caller cannot blow up your time-series database. Per-key gauges are separately capped by key_gauge_limit.
Its absence is the real feature: with no prometheus instance configured there is no recorder installed, /metrics is not mounted at all, and every emit site inside Busbar is a true no-op, not a counter you pay for and never read. Collection is off until you ask for it.
One instance only. Prometheus owns the single well-known /metrics route, so a second module: prometheus instance is a loud boot error naming the instance that already claimed it, never a sink that silently loses.
One honest note: /metrics is not auth-exempt (telemetry is itself a fingerprinting surface), but it is only as protected as your configured auth.chain. With an empty chain it admits unconditionally, so restrict it at the network layer if you run one.
Turn it on
Compiled into the core binary; nothing to download. Name an instance under the top-level export: map:
export:
metrics:
module: prometheus
streams: [metrics]
settings: { buffer_seconds: 60 } The map KEY (metrics) is the instance name; module: is which exporter backs it. buffer_seconds is required: turning metrics on is a deliberate choice and a memory cost you name. New in busbar 1.5.3; it replaces the retired top-level metrics: block (see the migration).
Settings
| Setting | Required | Default | Description |
|---|---|---|---|
buffer_seconds | Yes | — | Retention window, in SECONDS, for the rolling quantile summary. Required, exactly as the retired metrics.buffer_seconds was, so the memory cost is always named explicitly. |
key_gauge_limit | No | 2000 | Cap on how many per-key gauges are rendered at scrape time, so a large key population cannot grow the scrape payload without bound. |
Built into the core: configured under export:, never downloaded.