Skip to content

Commit f4fc7d3

Browse files
committed
Introduce load-balanced channel for OpenTelemetry exporters
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 # Conflicts: # Cargo.lock
1 parent 6b16a50 commit f4fc7d3

14 files changed

Lines changed: 947 additions & 131 deletions

File tree

Cargo.lock

Lines changed: 557 additions & 95 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

MODULE.bazel

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ bazel_dep(name = "platforms", version = "1.1.0")
99
bazel_dep(name = "bazel_skylib", version = "1.9.0")
1010
bazel_dep(name = "rules_python", version = "2.0.0")
1111
bazel_dep(name = "rules_shell", version = "0.6.1")
12+
bazel_dep(name = "zstd", version = "1.5.7.bcr.1")
1213

1314
# hermetic-llvm: zero-sysroot, fully hermetic LLVM cross-compilation toolchain.
1415
# Inside Nix, lre.bazelrc registers @local-remote-execution//generated-cc/...
@@ -107,6 +108,15 @@ crate.from_cargo(
107108
# selects against legacy @rules_rust//rust/platform:* labels.
108109
use_legacy_rules_rust_platforms = True,
109110
)
111+
112+
crate.annotation(
113+
crate = "zstd-sys",
114+
gen_build_script = "off",
115+
deps = ["@zstd"],
116+
)
117+
118+
inject_repo(crate, "zstd")
119+
110120
use_repo(crate, "crates")
111121

112122
# NativeLink uses Local Remote Execution for Rust by default which automatically

MODULE.bazel.lock

Lines changed: 39 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

nativelink-scheduler/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ futures = { version = "0.3.31", default-features = false }
2121
humantime = { version = "2.3.0", default-features = false }
2222
lru = { version = "0.16.0", default-features = false }
2323
mock_instant = { version = "0.5.3", default-features = false }
24-
opentelemetry = { version = "0.29.1", default-features = false }
25-
opentelemetry-semantic-conventions = { version = "0.29.0", default-features = false, features = [
24+
opentelemetry = { version = "0.30.0", default-features = false }
25+
opentelemetry-semantic-conventions = { version = "0.30.0", default-features = false, features = [
2626
"default",
2727
"semconv_experimental",
2828
] }

nativelink-service/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ bytes = { version = "1.10.1", default-features = false }
2020
futures = { version = "0.3.31", default-features = false }
2121
http-body-util = { version = "0.1.3", default-features = false }
2222
hyper = { version = "1.6.0", default-features = false }
23-
opentelemetry = { version = "0.29.1", default-features = false }
24-
opentelemetry-semantic-conventions = { version = "0.29.0", default-features = false, features = [
23+
opentelemetry = { version = "0.30.0", default-features = false }
24+
opentelemetry-semantic-conventions = { version = "0.30.0", default-features = false, features = [
2525
"default",
2626
"semconv_experimental",
2727
] }

nativelink-store/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ mongodb = { version = "3", features = [
7070
"compat-3-0-0",
7171
"rustls-tls",
7272
], default-features = false }
73-
opentelemetry = { version = "0.29.1", default-features = false }
73+
opentelemetry = { version = "0.30.0", default-features = false }
7474
parking_lot = { version = "0.12.3", features = [
7575
"arc_lock",
7676
"send_guard",

nativelink-util/BUILD.bazel

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ rust_library(
5454
"@crates//:blake3",
5555
"@crates//:bytes",
5656
"@crates//:futures",
57+
"@crates//:ginepro",
5758
"@crates//:hex",
5859
"@crates//:humantime",
5960
"@crates//:hyper-1.7.0",
@@ -83,6 +84,7 @@ rust_library(
8384
"@crates//:tracing",
8485
"@crates//:tracing-opentelemetry",
8586
"@crates//:tracing-subscriber",
87+
"@crates//:url",
8688
"@crates//:uuid",
8789
"@crates//:walkdir",
8890
"@crates//:wincode",
@@ -136,6 +138,7 @@ rust_test_suite(
136138
"@crates//:mock_instant",
137139
"@crates//:opentelemetry",
138140
"@crates//:opentelemetry-http",
141+
"@crates//:opentelemetry_sdk",
139142
"@crates//:parking_lot",
140143
"@crates//:pretty_assertions",
141144
"@crates//:prost",
@@ -164,10 +167,13 @@ rust_test(
164167
],
165168
deps = [
166169
"@crates//:http-body-util",
170+
"@crates//:opentelemetry-proto",
171+
"@crates//:opentelemetry_sdk",
167172
"@crates//:pretty_assertions",
168173
"@crates//:rand",
169174
"@crates//:serde_json",
170175
"@crates//:tempfile",
176+
"@crates//:tokio-stream",
171177
"@crates//:tracing-test",
172178
],
173179
)

nativelink-util/Cargo.toml

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,21 +27,21 @@ hyper-util = { version = "0.1.11", default-features = false }
2727
libc = { version = "0.2.177", default-features = false }
2828
lru = { version = "0.16.0", default-features = false }
2929
mock_instant = { version = "0.5.3", default-features = false }
30-
opentelemetry = { version = "0.29.0", default-features = false }
31-
opentelemetry-appender-tracing = { version = "0.29.1", default-features = false }
32-
opentelemetry-http = { version = "0.29.0", default-features = false }
33-
opentelemetry-otlp = { version = "0.29.0", default-features = false, features = [
30+
opentelemetry = { version = "0.30.0", default-features = false }
31+
opentelemetry-appender-tracing = { version = "0.30.0", default-features = false }
32+
opentelemetry-http = { version = "0.30.0", default-features = false }
33+
opentelemetry-otlp = { version = "0.30.0", default-features = false, features = [
3434
"grpc-tonic",
3535
"logs",
3636
"metrics",
3737
"trace",
3838
"zstd-tonic",
3939
] }
40-
opentelemetry-semantic-conventions = { version = "0.29.0", default-features = false, features = [
40+
opentelemetry-semantic-conventions = { version = "0.30.0", default-features = false, features = [
4141
"default",
4242
"semconv_experimental",
4343
] }
44-
opentelemetry_sdk = { version = "0.29.0", default-features = false }
44+
opentelemetry_sdk = { version = "0.30.0", default-features = false }
4545
parking_lot = { version = "0.12.3", features = [
4646
"arc_lock",
4747
"send_guard",
@@ -77,7 +77,7 @@ tonic = { version = "0.13.0", features = [
7777
], default-features = false }
7878
tower = { version = "0.5.2", default-features = false }
7979
tracing = { version = "0.1.41", default-features = false }
80-
tracing-opentelemetry = { version = "0.30.0", default-features = false, features = [
80+
tracing-opentelemetry = { version = "0.31.0", default-features = false, features = [
8181
"metrics",
8282
] }
8383
tracing-subscriber = { version = "0.3.19", features = [
@@ -87,6 +87,8 @@ tracing-subscriber = { version = "0.3.19", features = [
8787
], default-features = false }
8888
tracing-test = { version = "0.2.5", default-features = false, features = [] }
8989

90+
ginepro = { version = "0.9.3", default-features = false }
91+
url = { version = "2.5.7", default-features = false }
9092
uuid = { version = "1.16.0", default-features = false, features = [
9193
"serde",
9294
"v4",
@@ -97,6 +99,13 @@ wincode = { version = "0.5.4", default-features = false, features = ["derive"] }
9799

98100
[dev-dependencies]
99101
nativelink-macro = { path = "../nativelink-macro" }
102+
opentelemetry-proto = { version = "0.30.0", default-features = false, features = [
103+
"gen-tonic",
104+
"metrics",
105+
] }
106+
opentelemetry_sdk = { version = "0.30.0", default-features = false, features = [
107+
"testing",
108+
] }
100109

101110
axum = { version = "0.8.3", default-features = false }
102111
http-body-util = { version = "0.1.3", default-features = false }

0 commit comments

Comments
 (0)