Introduce load-balanced channel for OpenTelemetry exporters#2175
Introduce load-balanced channel for OpenTelemetry exporters#2175dkostyrev wants to merge 1 commit intoTraceMachina:mainfrom
Conversation
eb9bfe9 to
b86f6d1
Compare
b86f6d1 to
9533feb
Compare
9533feb to
6406230
Compare
|
@dkostyrev Than you for this awesome PR. I have finally had a bit of time to explore it and now I understand quite a bit. This is fantastic. |
|
@amankrx when you get a chance, please help with the merge conflict here. |
| .block_on(async { | ||
| // The OTLP exporters need to run in a Tokio context. | ||
| spawn!("init tracing", async { init_tracing() }) | ||
| spawn!("init tracing", async { init_tracing().await }) |
|
That coverage issue is interesting. |
29cb3d7 to
dff32cd
Compare
31d41d4 to
892ecee
Compare
Add client-side load balancing to OTLP gRPC connections using ginepro. When NL_OTEL_ENDPOINT is set, the telemetry system creates a load-balanced channel shared across log, trace, and metric exporters. This enables better distribution of telemetry traffic across multiple OTLP collector instances and improves overall system resilience. - Add ginepro dependency for gRPC load balancing - Upgrade OpenTelemetry dependencies from 0.29 to 0.30 - Change init_tracing() to async to support channel initialization - Add NL_OTEL_ENDPOINT environment variable for configuration - Update all OTLP exporters to use shared load-balanced channel
892ecee to
1eb7f46
Compare
|
This is looking good. |
|
Thanks for the review, still trying to pass failed CI checks |
|
I think this is actually hitting https://users.rust-lang.org/t/undefined-reference-to-memcpy-chk-with-target-x86-64-unknown-linux-musl/113567 as it's building a linked zstd, not the vendored one. Upstream has a PR that would sort this out, and I've just prodded them on that. |
Summary
This PR introduces client-side load balancing for OpenTelemetry (OTLP) gRPC connections using the ginepro library. When the
NL_OTEL_ENDPOINT(name to be discussed, maybe boolean flag?) environment variable is set, NativeLink will create a load-balanced channel for exporting logs, traces, and metrics, distributing requests across multiple backend endpoints resolved via DNS. This change allows to distribute OTLP traffic across multiple OTLP collector instances.Changes
Load-balanced OTLP exports:
gineprodependency to provide client-side load balancing for gRPC channels used by OpenTelemetry exportersNL_OTEL_ENDPOINTenvironment variable to configure the OTLP endpoint for load-balanced connectionsinit_tracing()from synchronous to async to support balanced channel initializationThis change is