From fcdc598320610c16640c50c9ca972cc87d385f66 Mon Sep 17 00:00:00 2001 From: Zach Hirschtritt Date: Mon, 1 Sep 2025 06:31:18 -0400 Subject: [PATCH] fix: correct river otel metrics units (#10425) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Which Problems Are Solved The [otelriver](https://github.com/riverqueue/rivercontrib/tree/master/otelriver) package uses default otel histogram buckets that are designed for millisecond measurements. OTEL docs also suggest standardizing on using seconds as the measurement unit. However, the default buckets from opentelemetry-go are more or less useless when used with seconds as the smallest measurement is 5 seconds and the largest is nearly 3 hours. Example: ``` river_work_duration_histogram_seconds_bucket{attempt="1",kind="notification_request",otel_scope_name="github.com/riverqueue/rivercontrib/otelriver",otel_scope_version="",priority="1",queue="notification",status="ok",tag="[]",le="0"} 0 river_work_duration_histogram_seconds_bucket{attempt="1",kind="notification_request",otel_scope_name="github.com/riverqueue/rivercontrib/otelriver",otel_scope_version="",priority="1",queue="notification",status="ok",tag="[]",le="5"} 1144 river_work_duration_histogram_seconds_bucket{attempt="1",kind="notification_request",otel_scope_name="github.com/riverqueue/rivercontrib/otelriver",otel_scope_version="",priority="1",queue="notification",status="ok",tag="[]",le="10"} 1144 <...more buckets here...> river_work_duration_histogram_seconds_bucket{attempt="1",kind="notification_request",otel_scope_name="github.com/riverqueue/rivercontrib/otelriver",otel_scope_version="",priority="1",queue="notification",status="ok",tag="[]",le="7500"} 1144 river_work_duration_histogram_seconds_bucket{attempt="1",kind="notification_request",otel_scope_name="github.com/riverqueue/rivercontrib/otelriver",otel_scope_version="",priority="1",queue="notification",status="ok",tag="[]",le="10000"} 1144 river_work_duration_histogram_seconds_bucket{attempt="1",kind="notification_request",otel_scope_name="github.com/riverqueue/rivercontrib/otelriver",otel_scope_version="",priority="1",queue="notification",status="ok",tag="[]",le="+Inf"} 1144 ``` # How the Problems Are Solved Change the default unit to "ms" from "s" as supported by the middleware API: https://riverqueue.com/docs/open-telemetry#list-of-middleware-options # Additional Changes None # Additional Context None Co-authored-by: Tim Möhlmann --- internal/queue/queue.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/queue/queue.go b/internal/queue/queue.go index 3fde54aa3..818524fd2 100644 --- a/internal/queue/queue.go +++ b/internal/queue/queue.go @@ -33,6 +33,7 @@ type Config struct { func NewQueue(config *Config) (_ *Queue, err error) { middleware := []rivertype.Middleware{otelriver.NewMiddleware(&otelriver.MiddlewareConfig{ MeterProvider: metrics.GetMetricsProvider(), + DurationUnit: "ms", })} return &Queue{ driver: riverdatabasesql.New(config.Client.DB),