fix: enable OpenTelemetry metrics for river queue and improve session projection handling (#10391)

Integrate OpenTelemetry metrics for better visibility into river queue
job processing and queue sizes. Additionally, modify session projection
handling to prevent failures during high load scenarios, ensuring
smoother login processes for users. This addresses issues related to
session projections and enhances overall system observability.

---------

Co-authored-by: Abhinav Sethi <abhinav.sethi03@gmail.com>
Co-authored-by: Zach Hirschtritt <zachary.hirschtritt@klaviyo.com>
This commit is contained in:
Silvan
2025-08-05 11:24:56 +02:00
committed by GitHub
parent 17f033f0b4
commit 5d1185ba4e
9 changed files with 4390 additions and 482 deletions

View File

@@ -7,9 +7,12 @@ import (
"github.com/riverqueue/river"
"github.com/riverqueue/river/riverdriver"
"github.com/riverqueue/river/riverdriver/riverpgxv5"
"github.com/riverqueue/river/rivertype"
"github.com/riverqueue/rivercontrib/otelriver"
"github.com/zitadel/logging"
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/telemetry/metrics"
)
// Queue abstracts the underlying queuing library
@@ -30,12 +33,16 @@ func NewQueue(config *Config) (_ *Queue, err error) {
if config.Client.Type() == "cockroach" {
return nil, nil
}
middleware := []rivertype.Middleware{otelriver.NewMiddleware(&otelriver.MiddlewareConfig{
MeterProvider: metrics.GetMetricsProvider(),
})}
return &Queue{
driver: riverpgxv5.New(config.Client.Pool),
config: &river.Config{
Workers: river.NewWorkers(),
Queues: make(map[string]river.QueueConfig),
JobTimeout: -1,
Middleware: middleware,
},
}, nil
}