Skip to content

Metrics

Waypoint emits OpenTelemetry metrics over OTLP to any compatible collector. TestConfig_Defaults internal/metrics/metrics_test.go:37

[metrics]
endpoint = "http://otel-collector:4318"
protocol = "http" # "http" (default) or "grpc"
interval = "30s"
temporality = "delta" # "delta" (default, recommended for Datadog) or "cumulative"
[metrics.enable]
"waypoint.conn.active" = ["listener", "mode"]
"waypoint.conn.total" = ["listener", "mode"]
"waypoint.auth.attempts" = ["listener"]
"waypoint.bytes.read" = ["listener", "user"]
"waypoint.bytes.written" = ["listener", "user"]

Metrics are emitted only when explicitly listed under [metrics.enable]. TestConfig_IsMetricEnabled internal/metrics/metrics_test.go:50 TestEnabledMetrics_Record internal/metrics/metrics_test.go:185 TestNonEnabledMetrics_UseNoop internal/metrics/metrics_test.go:141 The key is the metric name; the value is a tag allow-list:

Unknown tag names in the allow-list are flagged at load time. TestAttrs_FilterVerification internal/metrics/metrics_test.go:297 TestAttrs_UnknownMetric internal/metrics/metrics_test.go:263 This makes cardinality predictable: a metric like waypoint.bytes.read tagged by user will produce one time series per user; if that’s too many, narrow the tag list to ["listener"].

MetricTypeTags
waypoint.conn.activegaugelistener, mode, backend
waypoint.conn.totalcounterlistener, mode
waypoint.conn.durationhistogramlistener, user, backend
waypoint.conn.rejectedcounterlistener, mode
waypoint.auth.attemptscounterlistener
waypoint.auth.failurescounterlistener
waypoint.auth.latencyhistogramlistener, backend
waypoint.reval.attemptscounterlistener
waypoint.reval.failurescounterlistener
waypoint.bytes.readcounterlistener, user
waypoint.bytes.writtencounterlistener, user
waypoint.limit.violationscounterlistener, limit_type
waypoint.provision.totalcounterlistener
waypoint.provision.latencyhistogramlistener
waypoint.provision.errorscounterlistener
waypoint.cleanup.runscounter
waypoint.cleanup.droppedcounter
waypoint.redis.op_durationhistogramoperation
waypoint.redis.errorscounteroperation
waypoint.system.listenersgauge

Default is delta because Datadog and most modern collectors prefer it for counters and histograms. TestConfig_TemporalitySelector internal/metrics/metrics_test.go:87 Use cumulative if your backend (e.g. Prometheus) wants monotonic counters.

endpoint is required to enable any metrics export — without it, nothing is sent regardless of [metrics.enable] contents.