hh_*
metrics to your observability backend.
The expected integration model for that is your platform team’s existing metrics
stack: an OpenTelemetry Collector, Prometheus, vmagent, or similar, scrapes
HoneyHive’s services and forwards to wherever you collect telemetry today.
What’s exposed
Every HoneyHive application service exposes Prometheus text-format metrics at:
All five services carry a
service_name label on every metric they emit.
Enable ServiceMonitor discovery
The Helm chart shipsServiceMonitor templates for each application service. They are
gated by a single flag so installs that don’t run the Prometheus Operator CRDs are
unaffected.
In your environment’s values.yaml (both control plane and data plane charts), set:
helm upgrade as usual. Confirm the resources rendered:
/metrics endpoints and are useful for internal health visibility.
ServiceMonitor is a CRD from the
Prometheus Operator.
Most Prometheus-compatible scrapers, including vmagent and the OpenTelemetry
Collector’s Prometheus receiver via the target_allocator, can discover via
ServiceMonitors. If your stack does not use the Prometheus Operator CRDs, leave the
flag off and scrape the :9091/metrics endpoints directly using your scraper’s
native service discovery.Pointing your collector at HoneyHive
Two integration shapes cover most environments:- Prometheus-Operator CRDs (recommended). If your OpenTelemetry Collector,
Prometheus, or vmagent uses the Prometheus Operator’s
ServiceMonitorCRD for scrape-target discovery, the resources you enabled above are picked up automatically once your scraper’sserviceMonitorSelectormatches the labels in the HoneyHive values. For OpenTelemetry Collector, this is thetarget_allocatorwithprometheusCR.enabled: true. - Direct Prometheus scrape config. If you don’t use the Operator CRDs, point
your collector’s
prometheusreceiver (or scraper of choice) at HoneyHive’s services directly. Each service is reachable athttp://<service>.<namespace>.svc.cluster.local:9091/metrics(see the table above for service names). Kubernetes service discovery filtered by theapp.kubernetes.io/*labels HoneyHive sets on each service works equally well.
hh_* metrics will appear in whatever backend your collector
forwards to: OTLP, Prometheus remote-write, Datadog, etc.
Headline metrics
Each service emits many internal metrics; the tables below list the handful most useful for dashboards and alerts. The full registry for each service is linked at the end of its section if you want to drill in. All series carry aservice_name label. Histograms expose _bucket, _count,
and _sum series in the usual Prometheus convention; OTLP receivers translate
these to OTel histogram data points automatically.
HTTP requests (every service)
Every HoneyHive HTTP service emits the same two HTTP-level metrics via shared middleware. These are the foundation for request-rate, error-rate, and latency-SLO alerts on any endpoint:
The
route label is the Express route pattern (e.g. /v1/sessions/:session_id
or /v1/alerts/:id), not the raw URL: dynamic segments stay parameterized,
keeping cardinality bounded. Requests that don’t match any route are recorded as
route="unmatched".
Signup, org setup, and admin operations (cp-backend-service)
For account and workspace setup activity, filter hh_http_* by the following
route values (under service_name="cp_backend_service"):
Example: alert on signup error rate > 1% over 5 minutes:
Ingestion (dp-ingestion-service)
The ingestion service receives SDK events, buffers them, writes them to S3, and
publishes to NATS for downstream processing. Headline metrics:
Additional metrics covering cache hit ratios, flush behavior, and per-operation S3
and NATS latency are also exported. To see the full list, port-forward to a pod
and curl its metrics endpoint:
Trace storage (cp-writer-service)
The writer service consumes from NATS and writes to ClickHouse. S3 writes happen
in the ingestion service, not here. Headline metrics:
Additional metrics covering NATS batching, buffer flush cadence, retries, and
bisect-on-failure behavior are also exported. To see the full list:
Evaluation pipeline (dp-evaluation-service)
The evaluation service pulls jobs off a NATS work queue and processes them.
Example: alert on evaluation queue backlog sustained above 1000 pending for 5
minutes:
LLM proxy (dp-llmproxy-service)
The LLM proxy exposes only the standard hh_http_* family. LiteLLM’s native
Prometheus instrumentation is intentionally disabled so provider keys and message
content never appear in metric labels.
Each upstream provider lives at a distinct route, so per-provider error rate
and latency fall out of hh_http_* filtered by route. Example: alert on proxy
5xx rate > 10% over 60 seconds:
Contact your HoneyHive support contact if you need help with dashboards, alert thresholds, or recipes for a specific backend.

