Metrics endpoints
| Component | Port | Port name | Path | What it exposes |
|---|---|---|---|---|
| Engine pods | 9090 | metrics | /metrics | Firebolt engine gauges, including firebolt_running_queries and firebolt_suspended_queries. |
| Gateway pods (Envoy) | 9090 (configurable) | metrics | /stats/prometheus | Envoy connection, request, and cluster stats, proxied from the admin interface by a read-only stats listener. |
| Metadata Service | n/a | n/a | n/a | The Metadata Service does not currently expose a Prometheus endpoint. |
gateway.metricsPort in values.yaml.
Scrape with the Prometheus Operator
The chart ships two optionalPodMonitor resources gated on values.yaml. Both are disabled by default. The Prometheus Operator CRDs must already be installed in the cluster, otherwise helm install fails with an unknown-kind error.
Enable either or both:
helm upgrade (or helm install for a new release):
:9090/metrics and the gateway pods at :9090/stats/prometheus.
Selectors and labels
EachPodMonitor selects pods by the chart’s firebolt/component label.
The Firebolt Kubernetes Operator stamps its workloads with a different label namespace (
firebolt.io/...). Selectors written for that convention do not match chart-deployed pods.PodMonitor | Selector | Pod target labels propagated to series |
|---|---|---|
<release>-engines | firebolt/component: engine | app.kubernetes.io/name, firebolt/engine |
<release>-gateway | firebolt/component: gateway | app.kubernetes.io/name |
firebolt/engine label carries the engine name from engines[].name, so engine series are partitionable per engine in PromQL:
Per-engine PodMonitors
The chart-level enginePodMonitor applies the same scrape configuration to every engine in the release. If you need per-engine control (different intervals, selective enablement, custom relabelings), disable the chart-level one and deploy your own keyed on the engine name:
PodMonitor:
Gateway stats listener
The Envoy admin interface is bound to127.0.0.1:9901 inside the gateway pod and is not reachable from the cluster. Binding it elsewhere would expose mutation endpoints (POST /healthcheck/fail, POST /quitquitquit).
Instead, the chart renders a dedicated read-only stats_listener on gateway.metricsPort (default 9090) that proxies only /stats/prometheus from the admin interface through an internal static cluster. The PodMonitor for the gateway scrapes that listener.
To pick a different metrics port (for example to avoid a conflict with another sidecar), set:
metrics, so the PodMonitor does not need to change.
Cross-namespace scraping
The chart’sPodMonitor resources are namespace-scoped and select only pods in the release namespace. To scrape engines and gateways in other namespaces, deploy a hand-rolled PodMonitor with a broader namespaceSelector:
What this chart does not expose
- Controller and CR-status metrics. The chart has no controller loop, so there are no per-CR status gauges.
- Metadata Service metrics. The Metadata Service runs as a gRPC server only. It exposes no
/metricsendpoint. - PostgreSQL metrics. The bundled PostgreSQL StatefulSet does not include
postgres_exporter. Run your own exporter sidecar or scrape an external PostgreSQL through its existing observability stack.
The Firebolt Kubernetes Operator exposes continuous-reconciliation and per-CR status metrics (engine phase, replica counts, drain check errors, last-reconciled timestamps) that this chart cannot provide. If that observability surface matters to you, see the operator upgrade path.