From a8ea4e23d3404488060f956a09fe34bc53ae863a Mon Sep 17 00:00:00 2001 From: Techassi Date: Fri, 7 Mar 2025 11:15:12 +0100 Subject: [PATCH 01/11] chore: Bump OpenTelemetry related dependencies This commit also adjust the code based on the many breaking changes between the old and new versions of the crates. The public API is not affected by these changes. --- Cargo.lock | 451 ++++++++++-------- Cargo.toml | 12 +- crates/stackable-telemetry/Cargo.toml | 4 +- crates/stackable-telemetry/src/tracing/mod.rs | 77 +-- 4 files changed, 308 insertions(+), 236 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 441ffd4e1..36264ccc5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -185,18 +185,17 @@ dependencies = [ [[package]] name = "axum" -version = "0.6.20" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf" +checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" dependencies = [ "async-trait", - "axum-core 0.3.4", - "bitflags 1.3.2", + "axum-core 0.4.5", "bytes", "futures-util", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.32", + "http", + "http-body", + "http-body-util", "itoa", "matchit 0.7.3", "memchr", @@ -205,8 +204,8 @@ dependencies = [ "pin-project-lite", "rustversion", "serde", - "sync_wrapper 0.1.2", - "tower 0.4.13", + "sync_wrapper", + "tower 0.5.2", "tower-layer", "tower-service", ] @@ -221,10 +220,10 @@ dependencies = [ "bytes", "form_urlencoded", "futures-util", - "http 1.2.0", - "http-body 1.0.1", + "http", + "http-body", "http-body-util", - "hyper 1.6.0", + "hyper", "hyper-util", "itoa", "matchit 0.8.4", @@ -237,7 +236,7 @@ dependencies = [ "serde_json", "serde_path_to_error", "serde_urlencoded", - "sync_wrapper 1.0.2", + "sync_wrapper", "tokio", "tower 0.5.2", "tower-layer", @@ -247,17 +246,20 @@ dependencies = [ [[package]] name = "axum-core" -version = "0.3.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c" +checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" dependencies = [ "async-trait", "bytes", "futures-util", - "http 0.2.12", - "http-body 0.4.6", + "http", + "http-body", + "http-body-util", "mime", + "pin-project-lite", "rustversion", + "sync_wrapper", "tower-layer", "tower-service", ] @@ -270,13 +272,13 @@ checksum = "df1362f362fd16024ae199c1970ce98f9661bf5ef94b9808fee734bc3698b733" dependencies = [ "bytes", "futures-util", - "http 1.2.0", - "http-body 1.0.1", + "http", + "http-body", "http-body-util", "mime", "pin-project-lite", "rustversion", - "sync_wrapper 1.0.2", + "sync_wrapper", "tower-layer", "tower-service", "tracing", @@ -338,7 +340,7 @@ version = "0.69.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "271383c67ccabffb7381723dea0672a673f292304fcb45c01cc648c7a8d58088" dependencies = [ - "bitflags 2.8.0", + "bitflags", "cexpr", "clang-sys", "itertools 0.12.1", @@ -370,12 +372,6 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - [[package]] name = "bitflags" version = "2.8.0" @@ -1160,25 +1156,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "h2" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http 0.2.12", - "indexmap 2.7.1", - "slab", - "tokio", - "tokio-util", - "tracing", -] - [[package]] name = "h2" version = "0.4.8" @@ -1190,7 +1167,7 @@ dependencies = [ "fnv", "futures-core", "futures-sink", - "http 1.2.0", + "http", "indexmap 2.7.1", "slab", "tokio", @@ -1224,7 +1201,7 @@ dependencies = [ "base64 0.21.7", "bytes", "headers-core", - "http 1.2.0", + "http", "httpdate", "mime", "sha1", @@ -1236,7 +1213,7 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4" dependencies = [ - "http 1.2.0", + "http", ] [[package]] @@ -1280,17 +1257,6 @@ dependencies = [ "windows", ] -[[package]] -name = "http" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - [[package]] name = "http" version = "1.2.0" @@ -1302,17 +1268,6 @@ dependencies = [ "itoa", ] -[[package]] -name = "http-body" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" -dependencies = [ - "bytes", - "http 0.2.12", - "pin-project-lite", -] - [[package]] name = "http-body" version = "1.0.1" @@ -1320,7 +1275,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.2.0", + "http", ] [[package]] @@ -1331,8 +1286,8 @@ checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ "bytes", "futures-util", - "http 1.2.0", - "http-body 1.0.1", + "http", + "http-body", "pin-project-lite", ] @@ -1348,30 +1303,6 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" -[[package]] -name = "hyper" -version = "0.14.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2 0.3.26", - "http 0.2.12", - "http-body 0.4.6", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - [[package]] name = "hyper" version = "1.6.0" @@ -1381,9 +1312,9 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "h2 0.4.8", - "http 1.2.0", - "http-body 1.0.1", + "h2", + "http", + "http-body", "httparse", "httpdate", "itoa", @@ -1402,8 +1333,8 @@ dependencies = [ "bytes", "futures-util", "headers", - "http 1.2.0", - "hyper 1.6.0", + "http", + "hyper", "hyper-rustls", "hyper-util", "pin-project-lite", @@ -1420,8 +1351,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" dependencies = [ "futures-util", - "http 1.2.0", - "hyper 1.6.0", + "http", + "hyper", "hyper-util", "log", "rustls", @@ -1432,25 +1363,13 @@ dependencies = [ "tower-service", ] -[[package]] -name = "hyper-timeout" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" -dependencies = [ - "hyper 0.14.32", - "pin-project-lite", - "tokio", - "tokio-io-timeout", -] - [[package]] name = "hyper-timeout" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" dependencies = [ - "hyper 1.6.0", + "hyper", "hyper-util", "pin-project-lite", "tokio", @@ -1466,9 +1385,9 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "http 1.2.0", - "http-body 1.0.1", - "hyper 1.6.0", + "http", + "http-body", + "hyper", "pin-project-lite", "socket2", "tokio", @@ -1671,6 +1590,12 @@ version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" +[[package]] +name = "ipnet" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + [[package]] name = "is_terminal_polyfill" version = "1.70.1" @@ -1819,13 +1744,13 @@ dependencies = [ "either", "futures", "home", - "http 1.2.0", - "http-body 1.0.1", + "http", + "http-body", "http-body-util", - "hyper 1.6.0", + "hyper", "hyper-http-proxy", "hyper-rustls", - "hyper-timeout 0.5.2", + "hyper-timeout", "hyper-util", "jsonpath-rust", "k8s-openapi", @@ -1853,7 +1778,7 @@ checksum = "97aa830b288a178a90e784d1b0f1539f2d200d2188c7b4a3146d9dc983d596f3" dependencies = [ "chrono", "form_urlencoded", - "http 1.2.0", + "http", "json-patch", "k8s-openapi", "schemars", @@ -2153,19 +2078,46 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "opentelemetry" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "236e667b670a5cdf90c258f5a55794ec5ac5027e960c224bff8367a59e1e6426" +dependencies = [ + "futures-core", + "futures-sink", + "js-sys", + "pin-project-lite", + "thiserror 2.0.11", + "tracing", +] + [[package]] name = "opentelemetry-appender-tracing" -version = "0.4.0" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be314095f27dde46fca7038b023457d2b3459e1c39033dacc2ec1b31df11a61c" +checksum = "c513c7af3bec30113f3d4620134ff923295f1e9c580fda2b8abe0831f925ddc0" dependencies = [ - "once_cell", - "opentelemetry", + "opentelemetry 0.28.0", "tracing", "tracing-core", "tracing-subscriber", ] +[[package]] +name = "opentelemetry-http" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8863faf2910030d139fb48715ad5ff2f35029fc5f244f6d5f689ddcf4d26253" +dependencies = [ + "async-trait", + "bytes", + "http", + "opentelemetry 0.28.0", + "reqwest", + "tracing", +] + [[package]] name = "opentelemetry-jaeger" version = "0.22.0" @@ -2175,39 +2127,42 @@ dependencies = [ "async-trait", "futures-core", "futures-util", - "opentelemetry", - "opentelemetry-semantic-conventions", - "opentelemetry_sdk", + "opentelemetry 0.23.0", + "opentelemetry-semantic-conventions 0.15.0", + "opentelemetry_sdk 0.23.0", "thrift", "tokio", ] [[package]] name = "opentelemetry-otlp" -version = "0.16.0" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a94c69209c05319cdf7460c6d4c055ed102be242a0a6245835d7bc42c6ec7f54" +checksum = "5bef114c6d41bea83d6dc60eb41720eedd0261a67af57b66dd2b84ac46c01d91" dependencies = [ "async-trait", "futures-core", - "http 0.2.12", - "opentelemetry", + "http", + "opentelemetry 0.28.0", + "opentelemetry-http", "opentelemetry-proto", - "opentelemetry_sdk", + "opentelemetry_sdk 0.28.0", "prost", - "thiserror 1.0.69", + "reqwest", + "thiserror 2.0.11", "tokio", "tonic", + "tracing", ] [[package]] name = "opentelemetry-proto" -version = "0.6.0" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "984806e6cf27f2b49282e2a05e288f30594f3dbc74eb7a6e99422bc48ed78162" +checksum = "56f8870d3024727e99212eb3bb1762ec16e255e3e6f58eeb3dc8db1aa226746d" dependencies = [ - "opentelemetry", - "opentelemetry_sdk", + "opentelemetry 0.28.0", + "opentelemetry_sdk 0.28.0", "prost", "tonic", ] @@ -2218,6 +2173,12 @@ version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1869fb4bb9b35c5ba8a1e40c9b128a7b4c010d07091e864a29da19e4fe2ca4d7" +[[package]] +name = "opentelemetry-semantic-conventions" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fb3a2f78c2d55362cd6c313b8abedfbc0142ab3c2676822068fd2ab7d51f9b7" + [[package]] name = "opentelemetry_sdk" version = "0.23.0" @@ -2228,19 +2189,38 @@ dependencies = [ "futures-channel", "futures-executor", "futures-util", - "glob", "lazy_static", "once_cell", - "opentelemetry", + "opentelemetry 0.23.0", "ordered-float 4.6.0", "percent-encoding", "rand 0.8.5", - "serde_json", "thiserror 1.0.69", "tokio", "tokio-stream", ] +[[package]] +name = "opentelemetry_sdk" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84dfad6042089c7fc1f6118b7040dc2eb4ab520abbf410b79dc481032af39570" +dependencies = [ + "async-trait", + "futures-channel", + "futures-executor", + "futures-util", + "glob", + "opentelemetry 0.28.0", + "percent-encoding", + "rand 0.8.5", + "serde_json", + "thiserror 2.0.11", + "tokio", + "tokio-stream", + "tracing", +] + [[package]] name = "ordered-float" version = "2.10.1" @@ -2505,9 +2485,9 @@ dependencies = [ [[package]] name = "prost" -version = "0.12.6" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" +checksum = "2796faa41db3ec313a31f7624d9286acf277b52de526150b7e69f3debf891ee5" dependencies = [ "bytes", "prost-derive", @@ -2515,12 +2495,12 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.12.6" +version = "0.13.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" +checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" dependencies = [ "anyhow", - "itertools 0.12.1", + "itertools 0.14.0", "proc-macro2", "quote", "syn 2.0.98", @@ -2602,7 +2582,7 @@ version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82b568323e98e49e2a0899dcee453dd679fae22d69adf9b11dd508d1549b7e2f" dependencies = [ - "bitflags 2.8.0", + "bitflags", ] [[package]] @@ -2655,6 +2635,43 @@ version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba39f3699c378cd8970968dcbff9c43159ea4cfbd88d43c00b22f2ef10a435d2" +[[package]] +name = "reqwest" +version = "0.12.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" +dependencies = [ + "base64 0.22.1", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tower 0.5.2", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows-registry", +] + [[package]] name = "rfc6979" version = "0.4.0" @@ -2768,7 +2785,7 @@ version = "0.38.44" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" dependencies = [ - "bitflags 2.8.0", + "bitflags", "errno", "libc", "linux-raw-sys", @@ -2933,7 +2950,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.8.0", + "bitflags", "core-foundation 0.9.4", "core-foundation-sys", "libc", @@ -2946,7 +2963,7 @@ version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" dependencies = [ - "bitflags 2.8.0", + "bitflags", "core-foundation 0.10.0", "core-foundation-sys", "libc", @@ -3257,7 +3274,7 @@ dependencies = [ "k8s-openapi", "kube", "opentelemetry-jaeger", - "opentelemetry_sdk", + "opentelemetry_sdk 0.28.0", "product-config", "regex", "rstest", @@ -3309,11 +3326,11 @@ version = "0.3.0" dependencies = [ "axum 0.8.1", "futures-util", - "opentelemetry", + "opentelemetry 0.28.0", "opentelemetry-appender-tracing", "opentelemetry-otlp", - "opentelemetry-semantic-conventions", - "opentelemetry_sdk", + "opentelemetry-semantic-conventions 0.28.0", + "opentelemetry_sdk 0.28.0", "pin-project", "rstest", "snafu 0.8.5", @@ -3365,11 +3382,11 @@ version = "0.3.1" dependencies = [ "axum 0.8.1", "futures-util", - "hyper 1.6.0", + "hyper", "hyper-util", "k8s-openapi", "kube", - "opentelemetry", + "opentelemetry 0.28.0", "serde_json", "snafu 0.8.5", "stackable-certs", @@ -3439,17 +3456,14 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "sync_wrapper" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" - [[package]] name = "sync_wrapper" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] [[package]] name = "synstructure" @@ -3642,16 +3656,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "tokio-io-timeout" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" -dependencies = [ - "pin-project-lite", - "tokio", -] - [[package]] name = "tokio-macros" version = "2.5.0" @@ -3734,24 +3738,27 @@ dependencies = [ [[package]] name = "tonic" -version = "0.11.0" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76c4eb7a4e9ef9d4763600161f12f5070b92a578e1b634db88a6887844c91a13" +checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52" dependencies = [ "async-stream", "async-trait", - "axum 0.6.20", - "base64 0.21.7", + "axum 0.7.9", + "base64 0.22.1", "bytes", "flate2", - "h2 0.3.26", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.32", - "hyper-timeout 0.4.1", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-timeout", + "hyper-util", "percent-encoding", "pin-project", "prost", + "socket2", "tokio", "tokio-stream", "tower 0.4.13", @@ -3789,7 +3796,7 @@ dependencies = [ "futures-core", "futures-util", "pin-project-lite", - "sync_wrapper 1.0.2", + "sync_wrapper", "tokio", "tokio-util", "tower-layer", @@ -3804,10 +3811,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "403fa3b783d4b626a8ad51d766ab03cb6d2dbfc46b1c5d4448395e6628dc9697" dependencies = [ "base64 0.22.1", - "bitflags 2.8.0", + "bitflags", "bytes", - "http 1.2.0", - "http-body 1.0.1", + "http", + "http-body", "mime", "pin-project-lite", "tower-layer", @@ -3885,14 +3892,14 @@ dependencies = [ [[package]] name = "tracing-opentelemetry" -version = "0.24.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f68803492bf28ab40aeccaecc7021096bd256baf7ca77c3d425d89b35a7be4e4" +checksum = "721f2d2569dce9f3dfbbddee5906941e953bfcdf736a62da3377f5751650cc36" dependencies = [ "js-sys", "once_cell", - "opentelemetry", - "opentelemetry_sdk", + "opentelemetry 0.28.0", + "opentelemetry_sdk 0.28.0", "smallvec", "tracing", "tracing-core", @@ -4079,6 +4086,7 @@ checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", "once_cell", + "rustversion", "wasm-bindgen-macro", ] @@ -4096,6 +4104,19 @@ dependencies = [ "wasm-bindgen-shared", ] +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.50" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" +dependencies = [ + "cfg-if", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "wasm-bindgen-macro" version = "0.2.100" @@ -4128,6 +4149,16 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "web-sys" +version = "0.3.77" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "web-time" version = "1.1.0" @@ -4200,6 +4231,36 @@ dependencies = [ "windows-targets", ] +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result", + "windows-strings", + "windows-targets", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result", + "windows-targets", +] + [[package]] name = "windows-sys" version = "0.52.0" @@ -4297,7 +4358,7 @@ version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3268f3d866458b787f390cf61f4bbb563b922d091359f9608842999eaee3943c" dependencies = [ - "bitflags 2.8.0", + "bitflags", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index a615936f2..727b7437b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -34,12 +34,12 @@ json-patch = "3.0.1" k8s-openapi = { version = "0.24.0", default-features = false, features = ["schemars", "v1_32"] } # We use rustls instead of openssl for easier portability, e.g. so that we can build stackablectl without the need to vendor (build from source) openssl kube = { version = "0.98.0", default-features = false, features = ["client", "jsonpatch", "runtime", "derive", "rustls-tls"] } -opentelemetry = "0.23.0" -opentelemetry_sdk = { version = "0.23.0", features = ["rt-tokio"] } -opentelemetry-appender-tracing = "0.4.0" +opentelemetry = "0.28.0" +opentelemetry_sdk = { version = "0.28.0", features = ["rt-tokio"] } +opentelemetry-appender-tracing = "0.28.0" opentelemetry-jaeger = { version = "0.22.0", features = ["rt-tokio"] } -opentelemetry-otlp = "0.16.0" -opentelemetry-semantic-conventions = "0.15.0" +opentelemetry-otlp = "0.28.0" +opentelemetry-semantic-conventions = "0.28.0" p256 = { version = "0.13.2", features = ["ecdsa"] } pin-project = "1.1.5" prettyplease = "0.2.22" @@ -71,7 +71,7 @@ tower = { version = "0.5.1", features = ["util"] } tower-http = { version = "0.6.1", features = ["trace"] } tracing = "0.1.40" tracing-appender = "0.2.3" -tracing-opentelemetry = "0.24.0" +tracing-opentelemetry = "0.29.0" tracing-subscriber = { version = "0.3.18", features = ["env-filter", "json"] } trybuild = "1.0.99" url = { version = "2.5.2", features = ["serde"] } diff --git a/crates/stackable-telemetry/Cargo.toml b/crates/stackable-telemetry/Cargo.toml index 7792d72be..b1d0e770f 100644 --- a/crates/stackable-telemetry/Cargo.toml +++ b/crates/stackable-telemetry/Cargo.toml @@ -11,9 +11,9 @@ axum.workspace = true futures-util.workspace = true opentelemetry = { workspace = true, features = ["logs"] } opentelemetry-appender-tracing.workspace = true -opentelemetry-otlp = { workspace = true, features = ["gzip-tonic", "logs"] } +opentelemetry-otlp = { workspace = true, features = ["grpc-tonic", "gzip-tonic", "logs"] } opentelemetry-semantic-conventions.workspace = true -opentelemetry_sdk = { workspace = true, features = ["logs", "rt-tokio", "logs_level_enabled"] } +opentelemetry_sdk = { workspace = true, features = ["logs", "rt-tokio", "spec_unstable_logs_enabled"] } pin-project.workspace = true snafu.workspace = true tokio.workspace = true diff --git a/crates/stackable-telemetry/src/tracing/mod.rs b/crates/stackable-telemetry/src/tracing/mod.rs index cf00503b7..1880e052e 100644 --- a/crates/stackable-telemetry/src/tracing/mod.rs +++ b/crates/stackable-telemetry/src/tracing/mod.rs @@ -6,14 +6,13 @@ //! //! To get started, see [`Tracing`]. -use opentelemetry::KeyValue; +use opentelemetry::trace::TracerProvider; use opentelemetry_appender_tracing::layer::OpenTelemetryTracingBridge; +use opentelemetry_otlp::{LogExporter, SpanExporter}; use opentelemetry_sdk::{ - logs::{self, LoggerProvider}, - propagation::TraceContextPropagator, - trace, Resource, + logs::SdkLoggerProvider, propagation::TraceContextPropagator, trace::SdkTracerProvider, + Resource, }; -use opentelemetry_semantic_conventions::resource; use snafu::{ResultExt as _, Snafu}; use tracing::subscriber::SetGlobalDefaultError; use tracing_appender::rolling::{InitError, RollingFileAppender, Rotation}; @@ -39,7 +38,7 @@ pub enum Error { #[snafu(display("unable to install opentelemetry log exporter"))] InstallOtelLogExporter { #[allow(missing_docs)] - source: opentelemetry::logs::LogError, + source: opentelemetry_sdk::logs::LogError, }, /// Indicates that [`Tracing`] failed to install the rolling file appender. @@ -239,7 +238,9 @@ pub struct Tracing { file_log_settings: FileLogSettings, otlp_log_settings: OtlpLogSettings, otlp_trace_settings: OtlpTraceSettings, - logger_provider: Option, + + logger_provider: Option, + tracer_provider: Option, } impl Tracing { @@ -307,24 +308,27 @@ impl Tracing { // TODO (@NickLarsenNZ): Remove this directive once https://github.com/open-telemetry/opentelemetry-rust/issues/761 is resolved .add_directive("h2=off".parse().expect("invalid directive")); - let log_exporter = opentelemetry_otlp::new_exporter().tonic(); - let otel_log = - opentelemetry_otlp::new_pipeline() - .logging() - .with_exporter(log_exporter) - .with_log_config(logs::config().with_resource(Resource::new(vec![ - KeyValue::new(resource::SERVICE_NAME, self.service_name), - ]))) - .install_batch(opentelemetry_sdk::runtime::Tokio) - .context(InstallOtelLogExporterSnafu)?; + let log_exporter = LogExporter::builder() + .with_tonic() + .build() + .context(InstallOtelLogExporterSnafu)?; + + let logger_provider = SdkLoggerProvider::builder() + .with_batch_exporter(log_exporter) + .with_resource( + Resource::builder() + .with_service_name(self.service_name) + .build(), + ) + .build(); // Convert `tracing::Event` to OpenTelemetry logs layers.push( - OpenTelemetryTracingBridge::new(&otel_log) + OpenTelemetryTracingBridge::new(&logger_provider) .with_filter(env_filter_layer) .boxed(), ); - self.logger_provider = Some(otel_log); + self.logger_provider = Some(logger_provider); } if let OtlpTraceSettings::Enabled { common_settings } = &self.otlp_trace_settings { @@ -336,22 +340,29 @@ impl Tracing { // TODO (@NickLarsenNZ): Remove this directive once https://github.com/open-telemetry/opentelemetry-rust/issues/761 is resolved .add_directive("h2=off".parse().expect("invalid directive")); - let trace_exporter = opentelemetry_otlp::new_exporter().tonic(); - let otel_tracer = opentelemetry_otlp::new_pipeline() - .tracing() - .with_exporter(trace_exporter) - .with_trace_config(trace::config().with_resource(Resource::new(vec![ - KeyValue::new(resource::SERVICE_NAME, self.service_name), - ]))) - .install_batch(opentelemetry_sdk::runtime::Tokio) + let trace_exporter = SpanExporter::builder() + .with_tonic() + .build() .context(InstallOtelTraceExporterSnafu)?; + let tracer_provider = SdkTracerProvider::builder() + .with_batch_exporter(trace_exporter) + .with_resource( + Resource::builder() + .with_service_name(self.service_name) + .build(), + ) + .build(); + + let tracer = tracer_provider.tracer(self.service_name); + layers.push( tracing_opentelemetry::layer() - .with_tracer(otel_tracer) + .with_tracer(tracer) .with_filter(env_filter_layer) .boxed(), ); + self.tracer_provider = Some(tracer_provider); opentelemetry::global::set_text_map_propagator( // NOTE (@NickLarsenNZ): There are various propagators. Eg: TraceContextPropagator @@ -384,11 +395,10 @@ impl Drop for Tracing { "shutting down opentelemetry OTLP providers" ); - if self.otlp_trace_settings.is_enabled() { - // NOTE (@NickLarsenNZ): This might eventually be replaced with something like SdkMeterProvider::shutdown(&self) - // as has been done with the LoggerProvider (further below) - // see: https://github.com/open-telemetry/opentelemetry-rust/pull/1412/files#r1409608679 - opentelemetry::global::shutdown_tracer_provider(); + if let Some(tracer_provider) = &self.tracer_provider { + if let Err(error) = tracer_provider.shutdown() { + tracing::error!(%error, "unable to shutdown TracerProvider") + } } if let Some(logger_provider) = &self.logger_provider { @@ -573,6 +583,7 @@ impl TracingBuilder { otlp_trace_settings: self.otlp_trace_settings, file_log_settings: self.file_log_settings, logger_provider: None, + tracer_provider: None, } } } From 2fec64857a765c9b4e9299fc25ec0231f0645dff Mon Sep 17 00:00:00 2001 From: Techassi Date: Fri, 7 Mar 2025 11:17:21 +0100 Subject: [PATCH 02/11] chore!: Remove initialize_logging helper function Due to the dependency bumps in the previous commit, this function can no longer be maintained due to the underlying libraries being incompatible. It is recommended to use stackable_telemetry as the replacement. --- crates/stackable-operator/src/logging/mod.rs | 102 ------------------- 1 file changed, 102 deletions(-) diff --git a/crates/stackable-operator/src/logging/mod.rs b/crates/stackable-operator/src/logging/mod.rs index 861edfa51..018433287 100644 --- a/crates/stackable-operator/src/logging/mod.rs +++ b/crates/stackable-operator/src/logging/mod.rs @@ -1,104 +1,2 @@ -use std::path::PathBuf; - -use tracing; -use tracing_appender::rolling::{RollingFileAppender, Rotation}; -use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt, EnvFilter, Registry}; - pub mod controller; mod k8s_events; - -#[derive(Debug, Clone, clap::ValueEnum, PartialEq, Eq)] -pub enum TracingTarget { - None, - Jaeger, -} - -impl Default for TracingTarget { - fn default() -> Self { - Self::None - } -} - -/// Initializes `tracing` logging with options from the environment variable -/// given in the `env` parameter. -/// -/// We force users to provide a variable name so it can be different per product. -/// We encourage it to be the product name plus `_LOG`, e.g. `FOOBAR_OPERATOR_LOG`. -/// If no environment variable is provided, the maximum log level is set to INFO. -/// -/// Log output can be copied to a file by setting `{env}_DIRECTORY` (e.g. `FOOBAR_OPERATOR_DIRECTORY`) -/// to a directory path. This file will be rotated regularly. -pub fn initialize_logging(env: &str, app_name: &str, tracing_target: TracingTarget) { - let filter = match EnvFilter::try_from_env(env) { - Ok(env_filter) => env_filter, - _ => EnvFilter::try_new(tracing::Level::INFO.to_string()) - .expect("Failed to initialize default tracing level to INFO"), - }; - - let terminal_fmt = tracing_subscriber::fmt::layer(); - - let file_appender_directory = std::env::var_os(format!("{env}_DIRECTORY")).map(PathBuf::from); - let file_fmt = file_appender_directory.as_deref().map(|log_dir| { - let file_appender = RollingFileAppender::builder() - .rotation(Rotation::HOURLY) - .filename_prefix(app_name.to_string()) - .filename_suffix("tracing-rs.json") - .max_log_files(6) - .build(log_dir) - .expect("failed to initialize rolling file appender"); - tracing_subscriber::fmt::layer() - .json() - .with_writer(file_appender) - }); - - let jaeger = match tracing_target { - TracingTarget::Jaeger => { - // FIXME (@Techassi): Replace with opentelemetry_otlp - #[allow(deprecated)] - let jaeger = opentelemetry_jaeger::new_agent_pipeline() - .with_service_name(app_name) - .install_batch(opentelemetry_sdk::runtime::Tokio) - .expect("Failed to initialize Jaeger pipeline"); - let opentelemetry = tracing_opentelemetry::layer().with_tracer(jaeger); - Some(opentelemetry) - } - TracingTarget::None => None, - }; - - Registry::default() - .with(filter) - .with(terminal_fmt) - .with(file_fmt) - .with(jaeger) - .init(); - - // need to delay logging until after tracing is initialized - match file_appender_directory { - Some(dir) => tracing::info!(directory = %dir.display(), "file logging enabled"), - None => tracing::debug!("file logging disabled, because no log directory set"), - } -} - -#[cfg(test)] -mod tests { - - use tracing::{debug, error, info}; - - use crate::logging::TracingTarget; - - // If there is a proper way to programmatically inspect the global max level than we should use that. - // Until then, this is mostly a sanity check for the implementation above. - // Either run - // cargo test default_tracing -- --nocapture - // to see the ERROR and INFO messages, or - // NOT_SET=debug cargo test default_tracing -- --nocapture - // to see them all. - #[test] - fn default_tracing_level_is_set_to_info() { - super::initialize_logging("NOT_SET", "test", TracingTarget::None); - - error!("ERROR level messages should be seen."); - info!("INFO level messages should also be seen by default."); - debug!("DEBUG level messages should be seen only if you set the NOT_SET env var."); - } -} From ae4438e111d8548730ea664da89a9095fb92d89e Mon Sep 17 00:00:00 2001 From: Techassi Date: Fri, 7 Mar 2025 11:25:44 +0100 Subject: [PATCH 03/11] refactor!: Adjust CLI surface Due to initialize_logging being removed and being replaced by stackable_telemetry, the CLI interface needs to be adjusted as well. The old --tracing-target argument is removed in favour of more granular arguments to enable different outputs and exporters. --- crates/stackable-operator/CHANGELOG.md | 19 ++++- crates/stackable-operator/src/cli.rs | 103 ++++++++++++++----------- 2 files changed, 77 insertions(+), 45 deletions(-) diff --git a/crates/stackable-operator/CHANGELOG.md b/crates/stackable-operator/CHANGELOG.md index 37a5a0664..1f29bd198 100644 --- a/crates/stackable-operator/CHANGELOG.md +++ b/crates/stackable-operator/CHANGELOG.md @@ -4,6 +4,23 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +### Added + +- Add more granular telemetry related arguments to `ProductOperatorRun` ([#977]). + - `--enable-console-output`: Enables output of `tracing` events to the console (stdout) + - `--enable-file-output`: Enables output `tracing` events to a rotating log file + - `--enable-otlp-traces`: Enables exporting of traces via OTLP + - `--enable-otlp-logs`: Enables exporting of logs via OTLP + +### Removed + +- BREAKING: Remove `--tracing-target` argument and field from `ProductOperatorRun`. + Use the new, more granular arguments instead ([#977]). +- BREAKING: Remove `initialize_logging` helper function from `stackable_operator::logging` ([#977]). +- Remove `opentelemetry-jaeger` dependency ([#977]). + +[#977]: https://github.com/stackabletech/operator-rs/pull/977 + ## [0.87.3] - 2025-03-14 ### Added @@ -48,7 +65,7 @@ All notable changes to this project will be documented in this file. ### Added -- BREAKING: Add `region` field to S3ConnectionSpec (defaults to `us-east-1`) ([#959]). +- Add `region` field to S3ConnectionSpec ([#959]). [#959]: https://github.com/stackabletech/operator-rs/pull/959 diff --git a/crates/stackable-operator/src/cli.rs b/crates/stackable-operator/src/cli.rs index 2a53184c1..09917f701 100644 --- a/crates/stackable-operator/src/cli.rs +++ b/crates/stackable-operator/src/cli.rs @@ -115,10 +115,7 @@ use clap::Args; use product_config::ProductConfigManager; use snafu::{ResultExt, Snafu}; -use crate::{ - logging::TracingTarget, namespace::WatchNamespace, - utils::cluster_info::KubernetesClusterInfoOpts, -}; +use crate::{namespace::WatchNamespace, utils::cluster_info::KubernetesClusterInfoOpts}; pub const AUTHOR: &str = "Stackable GmbH - info@stackable.tech"; @@ -217,9 +214,8 @@ pub struct ProductOperatorRun { #[arg(long, env, default_value = "")] pub watch_namespace: WatchNamespace, - /// Tracing log collector system - #[arg(long, env, default_value_t, value_enum)] - pub tracing_target: TracingTarget, + #[command(flatten)] + pub telemetry_arguments: TelemetryArguments, #[command(flatten)] pub cluster_info_opts: KubernetesClusterInfoOpts, @@ -245,41 +241,58 @@ impl ProductConfigPath { /// Load the [`ProductConfigManager`] from the given path, falling back to the first /// path that exists from `default_search_paths` if none is given by the user. pub fn load(&self, default_search_paths: &[impl AsRef]) -> Result { - ProductConfigManager::from_yaml_file(resolve_path( - self.path.as_deref(), - default_search_paths, - )?) - .context(ProductConfigLoadSnafu) + let resolved_path = Self::resolve_path(self.path.as_deref(), default_search_paths)?; + ProductConfigManager::from_yaml_file(resolved_path).context(ProductConfigLoadSnafu) } -} -/// Check if the path can be found anywhere: -/// 1) User provides path `user_provided_path` to file -> 'Error' if not existing. -/// 2) User does not provide path to file -> search in `default_paths` and -/// take the first existing file. -/// 3) `Error` if nothing was found. -fn resolve_path<'a>( - user_provided_path: Option<&'a Path>, - default_paths: &'a [impl AsRef + 'a], -) -> Result<&'a Path> { - // Use override if specified by the user, otherwise search through defaults given - let search_paths = if let Some(path) = user_provided_path { - vec![path] - } else { - default_paths.iter().map(|path| path.as_ref()).collect() - }; - for path in &search_paths { - if path.exists() { - return Ok(path); + /// Check if the path can be found anywhere + /// + /// 1. User provides path `user_provided_path` to file. Return [`Error`] if not existing. + /// 2. User does not provide path to file -> search in `default_paths` and + /// take the first existing file. + /// 3. Return [`Error`] if nothing was found. + fn resolve_path<'a>( + user_provided_path: Option<&'a Path>, + default_paths: &'a [impl AsRef + 'a], + ) -> Result<&'a Path> { + // Use override if specified by the user, otherwise search through defaults given + let search_paths = if let Some(path) = user_provided_path { + vec![path] + } else { + default_paths.iter().map(|path| path.as_ref()).collect() + }; + for path in &search_paths { + if path.exists() { + return Ok(path); + } } + RequiredFileMissingSnafu { + search_path: search_paths + .into_iter() + .map(PathBuf::from) + .collect::>(), + } + .fail() } - RequiredFileMissingSnafu { - search_path: search_paths - .into_iter() - .map(PathBuf::from) - .collect::>(), - } - .fail() +} + +#[derive(Debug, Default, PartialEq, Eq, Args)] +pub struct TelemetryArguments { + /// Disable console output. + #[arg(long, env)] + no_console_output: bool, + + /// Enable logging to rolling files located in the specified directory + #[arg(long, env, value_name = "DIRECTORY")] + rolling_logs: Option, + + /// Enable exporting traces via OTLP. + #[arg(long, env)] + otlp_traces: bool, + + /// Enable exporting logs via OTLP. + #[arg(long, env)] + otlp_logs: bool, } #[cfg(test)] @@ -300,6 +313,7 @@ mod tests { #[test] fn verify_cli() { use clap::CommandFactory; + ProductOperatorRun::command().print_long_help().unwrap(); ProductOperatorRun::command().debug_assert() } @@ -342,7 +356,7 @@ mod tests { let file = File::create(full_path_to_create).expect("create temporary file"); - let found_path = resolve_path( + let found_path = ProductConfigPath::resolve_path( full_user_provided_path.as_deref(), &full_default_locations_ref, )?; @@ -358,13 +372,14 @@ mod tests { #[test] #[should_panic] fn resolve_path_user_path_not_existing() { - resolve_path(Some(USER_PROVIDED_PATH.as_ref()), &[DEPLOY_FILE_PATH]).unwrap(); + ProductConfigPath::resolve_path(Some(USER_PROVIDED_PATH.as_ref()), &[DEPLOY_FILE_PATH]) + .unwrap(); } #[test] fn resolve_path_nothing_found_errors() { if let Err(Error::RequiredFileMissing { search_path }) = - resolve_path(None, &[DEPLOY_FILE_PATH, DEFAULT_FILE_PATH]) + ProductConfigPath::resolve_path(None, &[DEPLOY_FILE_PATH, DEFAULT_FILE_PATH]) { assert_eq!( search_path, @@ -396,8 +411,8 @@ mod tests { ProductOperatorRun { product_config: ProductConfigPath::from("bar".as_ref()), watch_namespace: WatchNamespace::One("foo".to_string()), - tracing_target: TracingTarget::None, cluster_info_opts: Default::default(), + telemetry_arguments: Default::default(), } ); @@ -408,8 +423,8 @@ mod tests { ProductOperatorRun { product_config: ProductConfigPath::from("bar".as_ref()), watch_namespace: WatchNamespace::All, - tracing_target: TracingTarget::None, cluster_info_opts: Default::default(), + telemetry_arguments: Default::default(), } ); @@ -421,8 +436,8 @@ mod tests { ProductOperatorRun { product_config: ProductConfigPath::from("bar".as_ref()), watch_namespace: WatchNamespace::One("foo".to_string()), - tracing_target: TracingTarget::None, cluster_info_opts: Default::default(), + telemetry_arguments: Default::default(), } ); } From 0b6f2aa30a03c238f0380f598e2739f7cab9abe1 Mon Sep 17 00:00:00 2001 From: Techassi Date: Fri, 7 Mar 2025 15:02:02 +0100 Subject: [PATCH 04/11] chore: Remove opentelemetry-jaeger dependency --- Cargo.lock | 141 +++------------------------ Cargo.toml | 1 - crates/stackable-operator/Cargo.toml | 1 - 3 files changed, 15 insertions(+), 128 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 36264ccc5..43daf7e1d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1222,12 +1222,6 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" -[[package]] -name = "hermit-abi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" - [[package]] name = "hmac" version = "0.12.1" @@ -1584,12 +1578,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "integer-encoding" -version = "3.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" - [[package]] name = "ipnet" version = "2.11.0" @@ -2033,16 +2021,6 @@ dependencies = [ "libm", ] -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi", - "libc", -] - [[package]] name = "object" version = "0.36.7" @@ -2064,20 +2042,6 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" -[[package]] -name = "opentelemetry" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b69a91d4893e713e06f724597ad630f1fa76057a5e1026c0ca67054a9032a76" -dependencies = [ - "futures-core", - "futures-sink", - "js-sys", - "once_cell", - "pin-project-lite", - "thiserror 1.0.69", -] - [[package]] name = "opentelemetry" version = "0.28.0" @@ -2098,7 +2062,7 @@ version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c513c7af3bec30113f3d4620134ff923295f1e9c580fda2b8abe0831f925ddc0" dependencies = [ - "opentelemetry 0.28.0", + "opentelemetry", "tracing", "tracing-core", "tracing-subscriber", @@ -2113,27 +2077,11 @@ dependencies = [ "async-trait", "bytes", "http", - "opentelemetry 0.28.0", + "opentelemetry", "reqwest", "tracing", ] -[[package]] -name = "opentelemetry-jaeger" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501b471b67b746d9a07d4c29f8be00f952d1a2eca356922ede0098cbaddff19f" -dependencies = [ - "async-trait", - "futures-core", - "futures-util", - "opentelemetry 0.23.0", - "opentelemetry-semantic-conventions 0.15.0", - "opentelemetry_sdk 0.23.0", - "thrift", - "tokio", -] - [[package]] name = "opentelemetry-otlp" version = "0.28.0" @@ -2143,10 +2091,10 @@ dependencies = [ "async-trait", "futures-core", "http", - "opentelemetry 0.28.0", + "opentelemetry", "opentelemetry-http", "opentelemetry-proto", - "opentelemetry_sdk 0.28.0", + "opentelemetry_sdk", "prost", "reqwest", "thiserror 2.0.11", @@ -2161,45 +2109,18 @@ version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56f8870d3024727e99212eb3bb1762ec16e255e3e6f58eeb3dc8db1aa226746d" dependencies = [ - "opentelemetry 0.28.0", - "opentelemetry_sdk 0.28.0", + "opentelemetry", + "opentelemetry_sdk", "prost", "tonic", ] -[[package]] -name = "opentelemetry-semantic-conventions" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1869fb4bb9b35c5ba8a1e40c9b128a7b4c010d07091e864a29da19e4fe2ca4d7" - [[package]] name = "opentelemetry-semantic-conventions" version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2fb3a2f78c2d55362cd6c313b8abedfbc0142ab3c2676822068fd2ab7d51f9b7" -[[package]] -name = "opentelemetry_sdk" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae312d58eaa90a82d2e627fd86e075cf5230b3f11794e2ed74199ebbe572d4fd" -dependencies = [ - "async-trait", - "futures-channel", - "futures-executor", - "futures-util", - "lazy_static", - "once_cell", - "opentelemetry 0.23.0", - "ordered-float 4.6.0", - "percent-encoding", - "rand 0.8.5", - "thiserror 1.0.69", - "tokio", - "tokio-stream", -] - [[package]] name = "opentelemetry_sdk" version = "0.28.0" @@ -2211,7 +2132,7 @@ dependencies = [ "futures-executor", "futures-util", "glob", - "opentelemetry 0.28.0", + "opentelemetry", "percent-encoding", "rand 0.8.5", "serde_json", @@ -2230,15 +2151,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "ordered-float" -version = "4.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" -dependencies = [ - "num-traits", -] - [[package]] name = "overload" version = "0.1.1" @@ -3001,7 +2913,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c" dependencies = [ - "ordered-float 2.10.1", + "ordered-float", "serde", ] @@ -3273,8 +3185,7 @@ dependencies = [ "json-patch", "k8s-openapi", "kube", - "opentelemetry-jaeger", - "opentelemetry_sdk 0.28.0", + "opentelemetry_sdk", "product-config", "regex", "rstest", @@ -3326,11 +3237,11 @@ version = "0.3.0" dependencies = [ "axum 0.8.1", "futures-util", - "opentelemetry 0.28.0", + "opentelemetry", "opentelemetry-appender-tracing", "opentelemetry-otlp", - "opentelemetry-semantic-conventions 0.28.0", - "opentelemetry_sdk 0.28.0", + "opentelemetry-semantic-conventions", + "opentelemetry_sdk", "pin-project", "rstest", "snafu 0.8.5", @@ -3386,7 +3297,7 @@ dependencies = [ "hyper-util", "k8s-openapi", "kube", - "opentelemetry 0.28.0", + "opentelemetry", "serde_json", "snafu 0.8.5", "stackable-certs", @@ -3555,28 +3466,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "threadpool" -version = "1.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" -dependencies = [ - "num_cpus", -] - -[[package]] -name = "thrift" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e54bc85fc7faa8bc175c4bab5b92ba8d9a3ce893d0e9f42cc455c8ab16a9e09" -dependencies = [ - "byteorder", - "integer-encoding", - "log", - "ordered-float 2.10.1", - "threadpool", -] - [[package]] name = "time" version = "0.3.37" @@ -3898,8 +3787,8 @@ checksum = "721f2d2569dce9f3dfbbddee5906941e953bfcdf736a62da3377f5751650cc36" dependencies = [ "js-sys", "once_cell", - "opentelemetry 0.28.0", - "opentelemetry_sdk 0.28.0", + "opentelemetry", + "opentelemetry_sdk", "smallvec", "tracing", "tracing-core", diff --git a/Cargo.toml b/Cargo.toml index 727b7437b..85b0b3ff9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -37,7 +37,6 @@ kube = { version = "0.98.0", default-features = false, features = ["client", "js opentelemetry = "0.28.0" opentelemetry_sdk = { version = "0.28.0", features = ["rt-tokio"] } opentelemetry-appender-tracing = "0.28.0" -opentelemetry-jaeger = { version = "0.22.0", features = ["rt-tokio"] } opentelemetry-otlp = "0.28.0" opentelemetry-semantic-conventions = "0.28.0" p256 = { version = "0.13.2", features = ["ecdsa"] } diff --git a/crates/stackable-operator/Cargo.toml b/crates/stackable-operator/Cargo.toml index 16f27becd..0a7998939 100644 --- a/crates/stackable-operator/Cargo.toml +++ b/crates/stackable-operator/Cargo.toml @@ -27,7 +27,6 @@ json-patch.workspace = true k8s-openapi.workspace = true kube.workspace = true opentelemetry_sdk.workspace = true -opentelemetry-jaeger.workspace = true product-config.workspace = true regex.workspace = true schemars.workspace = true From 413833c058c4c6e0bfd490941183c6e93a10ca73 Mon Sep 17 00:00:00 2001 From: Techassi Date: Fri, 7 Mar 2025 15:03:31 +0100 Subject: [PATCH 05/11] chore(stackable-telemetry): Update changelog --- crates/stackable-telemetry/CHANGELOG.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/crates/stackable-telemetry/CHANGELOG.md b/crates/stackable-telemetry/CHANGELOG.md index a7935073a..dec592c9e 100644 --- a/crates/stackable-telemetry/CHANGELOG.md +++ b/crates/stackable-telemetry/CHANGELOG.md @@ -4,6 +4,18 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +### Changed + +- Bump OpenTelemetry related dependencies ([#977]). + - `opentelemetry` to 0.28.0 + - `opentelemetry_sdk` to 0.28.0 + - `opentelemetry-appender-tracing` to 0.28.0 + - `opentelemetry-otlp` to 0.28.0 + - `opentelemetry-semantic-conventions` to 0.28.0 + - `tracing-opentelemetry` to 0.29.0 + +[#977]: https://github.com/stackabletech/operator-rs/pull/977 + ## [0.3.0] - 2025-01-30 ### Added From fdf864529530d9de580e38fe98bc1c457180bf5f Mon Sep 17 00:00:00 2001 From: Techassi Date: Tue, 1 Apr 2025 15:10:42 +0200 Subject: [PATCH 06/11] chore: Comment out currently unused dependency --- Cargo.lock | 7 ------- Cargo.toml | 2 +- crates/stackable-telemetry/Cargo.toml | 2 +- 3 files changed, 2 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0ad633dc4..330a9c1e3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2122,12 +2122,6 @@ dependencies = [ "tonic", ] -[[package]] -name = "opentelemetry-semantic-conventions" -version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fb3a2f78c2d55362cd6c313b8abedfbc0142ab3c2676822068fd2ab7d51f9b7" - [[package]] name = "opentelemetry_sdk" version = "0.28.0" @@ -3259,7 +3253,6 @@ dependencies = [ "opentelemetry", "opentelemetry-appender-tracing", "opentelemetry-otlp", - "opentelemetry-semantic-conventions", "opentelemetry_sdk", "pin-project", "rstest", diff --git a/Cargo.toml b/Cargo.toml index 616087eb2..c391e2fd7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -38,7 +38,7 @@ opentelemetry = "0.28.0" opentelemetry_sdk = { version = "0.28.0", features = ["rt-tokio"] } opentelemetry-appender-tracing = "0.28.0" opentelemetry-otlp = "0.28.0" -opentelemetry-semantic-conventions = "0.28.0" +# opentelemetry-semantic-conventions = "0.28.0" p256 = { version = "0.13.2", features = ["ecdsa"] } pin-project = "1.1.5" prettyplease = "0.2.22" diff --git a/crates/stackable-telemetry/Cargo.toml b/crates/stackable-telemetry/Cargo.toml index b1d0e770f..5bfa77802 100644 --- a/crates/stackable-telemetry/Cargo.toml +++ b/crates/stackable-telemetry/Cargo.toml @@ -12,7 +12,7 @@ futures-util.workspace = true opentelemetry = { workspace = true, features = ["logs"] } opentelemetry-appender-tracing.workspace = true opentelemetry-otlp = { workspace = true, features = ["grpc-tonic", "gzip-tonic", "logs"] } -opentelemetry-semantic-conventions.workspace = true +# opentelemetry-semantic-conventions.workspace = true opentelemetry_sdk = { workspace = true, features = ["logs", "rt-tokio", "spec_unstable_logs_enabled"] } pin-project.workspace = true snafu.workspace = true From eb074a9556becf0774ba0c22c5d73b4b08dd9fb5 Mon Sep 17 00:00:00 2001 From: Techassi Date: Tue, 1 Apr 2025 15:16:01 +0200 Subject: [PATCH 07/11] feat: Add rolling logs period CLI argument --- crates/stackable-operator/CHANGELOG.md | 9 ++++---- crates/stackable-operator/src/cli.rs | 30 ++++++++++++++++++++++++-- 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/crates/stackable-operator/CHANGELOG.md b/crates/stackable-operator/CHANGELOG.md index 901d7a52e..58ba1f83b 100644 --- a/crates/stackable-operator/CHANGELOG.md +++ b/crates/stackable-operator/CHANGELOG.md @@ -7,10 +7,11 @@ All notable changes to this project will be documented in this file. ### Added - Add more granular telemetry related arguments to `ProductOperatorRun` ([#977]). - - `--enable-console-output`: Enables output of `tracing` events to the console (stdout) - - `--enable-file-output`: Enables output `tracing` events to a rotating log file - - `--enable-otlp-traces`: Enables exporting of traces via OTLP - - `--enable-otlp-logs`: Enables exporting of logs via OTLP + - `--no-console-output`: Disables output of `tracing` events to the console (stdout) + - `--rolling-logs`: Enables output `tracing` events to a rolling log file + - `--rolling-logs-period`: Sets the time period after which log files are rolled over + - `--otlp-traces`: Enables exporting of traces via OTLP + - `--otlp-logs`: Enables exporting of logs via OTLP - Add Deployments to `ClusterResource`s ([#992]). - Add `DeploymentConditionBuilder` ([#993]). diff --git a/crates/stackable-operator/src/cli.rs b/crates/stackable-operator/src/cli.rs index 09917f701..72bc21c32 100644 --- a/crates/stackable-operator/src/cli.rs +++ b/crates/stackable-operator/src/cli.rs @@ -108,6 +108,7 @@ //! use std::{ ffi::OsStr, + ops::Deref, path::{Path, PathBuf}, }; @@ -282,10 +283,14 @@ pub struct TelemetryArguments { #[arg(long, env)] no_console_output: bool, - /// Enable logging to rolling files located in the specified directory - #[arg(long, env, value_name = "DIRECTORY")] + /// Enable logging to rolling files located in the specified DIRECTORY. + #[arg(long, env, value_name = "DIRECTORY", group = "rolling_logs_group")] rolling_logs: Option, + /// Time PERIOD after which log files are rolled over. + #[arg(long, env, value_name = "PERIOD", requires = "rolling_logs_group")] + rolling_logs_period: Option, + /// Enable exporting traces via OTLP. #[arg(long, env)] otlp_traces: bool, @@ -295,6 +300,27 @@ pub struct TelemetryArguments { otlp_logs: bool, } +#[derive(Clone, Debug, PartialEq, Eq, strum::Display, strum::EnumString, clap::ValueEnum)] +pub enum RollingPeriod { + Minutely, + Hourly, + Daily, + Never, +} + +impl Deref for RollingPeriod { + type Target = tracing_appender::rolling::Rotation; + + fn deref(&self) -> &Self::Target { + match self { + RollingPeriod::Minutely => &tracing_appender::rolling::Rotation::MINUTELY, + RollingPeriod::Hourly => &tracing_appender::rolling::Rotation::HOURLY, + RollingPeriod::Daily => &tracing_appender::rolling::Rotation::DAILY, + RollingPeriod::Never => &tracing_appender::rolling::Rotation::NEVER, + } + } +} + #[cfg(test)] mod tests { use std::{env, fs::File}; From 0300aee86cd94bfee7ec33b7a434ee341d230986 Mon Sep 17 00:00:00 2001 From: Techassi Date: Tue, 1 Apr 2025 15:16:34 +0200 Subject: [PATCH 08/11] test: Fix CLI doc test --- crates/stackable-operator/src/cli.rs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/crates/stackable-operator/src/cli.rs b/crates/stackable-operator/src/cli.rs index 72bc21c32..9527878a1 100644 --- a/crates/stackable-operator/src/cli.rs +++ b/crates/stackable-operator/src/cli.rs @@ -164,6 +164,12 @@ pub enum Command { /// /// ```rust /// # use stackable_operator::cli::{Command, ProductOperatorRun, ProductConfigPath}; +/// use clap::Parser; +/// use stackable_operator::{ +/// cli::TelemetryArguments, +/// namespace::WatchNamespace, +/// }; +/// /// #[derive(clap::Parser, Debug, PartialEq, Eq)] /// struct Run { /// #[clap(long)] @@ -171,11 +177,6 @@ pub enum Command { /// #[clap(flatten)] /// common: ProductOperatorRun, /// } -/// use clap::Parser; -/// use stackable_operator::{ -/// logging::TracingTarget, -/// namespace::WatchNamespace, -/// }; /// /// let opts = Command::::parse_from(["foobar-operator", "run", "--name", "foo", "--product-config", "bar", "--watch-namespace", "foobar"]); /// assert_eq!(opts, Command::Run(Run { @@ -183,7 +184,7 @@ pub enum Command { /// common: ProductOperatorRun { /// product_config: ProductConfigPath::from("bar".as_ref()), /// watch_namespace: WatchNamespace::One("foobar".to_string()), -/// tracing_target: TracingTarget::None, +/// telemetry_arguments: TelemetryArguments::default(), /// cluster_info_opts: Default::default(), /// }, /// })); @@ -193,12 +194,14 @@ pub enum Command { /// /// ```rust /// # use stackable_operator::cli::{Command, ProductOperatorRun}; +/// use clap::Parser; +/// /// #[derive(clap::Parser, Debug, PartialEq, Eq)] /// struct Run { /// #[arg(long)] /// name: String, /// } -/// use clap::Parser; +/// /// let opts = Command::::parse_from(["foobar-operator", "run", "--name", "foo"]); /// assert_eq!(opts, Command::Run(Run { /// name: "foo".to_string(), From a96a161108d963b8de85c8b0d441b08f007a6bd8 Mon Sep 17 00:00:00 2001 From: Techassi Date: Tue, 1 Apr 2025 17:02:58 +0200 Subject: [PATCH 09/11] chore: Remove unused dependencies --- Cargo.lock | 2 -- crates/stackable-operator/Cargo.toml | 2 -- 2 files changed, 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 330a9c1e3..30e53cce3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3198,7 +3198,6 @@ dependencies = [ "json-patch", "k8s-openapi", "kube", - "opentelemetry_sdk", "product-config", "regex", "rstest", @@ -3216,7 +3215,6 @@ dependencies = [ "tokio", "tracing", "tracing-appender", - "tracing-opentelemetry", "tracing-subscriber", "url", ] diff --git a/crates/stackable-operator/Cargo.toml b/crates/stackable-operator/Cargo.toml index 0d25ab869..95c12e9c5 100644 --- a/crates/stackable-operator/Cargo.toml +++ b/crates/stackable-operator/Cargo.toml @@ -26,7 +26,6 @@ indexmap.workspace = true json-patch.workspace = true k8s-openapi.workspace = true kube.workspace = true -opentelemetry_sdk.workspace = true product-config.workspace = true regex.workspace = true schemars.workspace = true @@ -40,7 +39,6 @@ time = { workspace = true, optional = true } tokio.workspace = true tracing.workspace = true tracing-appender.workspace = true -tracing-opentelemetry.workspace = true tracing-subscriber.workspace = true url.workspace = true From ce5b68bf0032837792b4a04c0de1f1461b687748 Mon Sep 17 00:00:00 2001 From: Nick Larsen Date: Wed, 2 Apr 2025 12:28:18 +0200 Subject: [PATCH 10/11] chore: Add rustfmt override command for vscode --- .vscode/settings.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 6f5c4edd3..031c62f57 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,8 @@ { - "rust-analyzer.cargo.features": "all" + "rust-analyzer.cargo.features": "all", + "rust-analyzer.rustfmt.overrideCommand": [ + "rustfmt", + "+nightly-2025-01-15", + "--" + ], } From 0464d2b8f2465a7fd8e73876f825a076c047d8d9 Mon Sep 17 00:00:00 2001 From: Nick <10092581+NickLarsenNZ@users.noreply.github.com> Date: Wed, 2 Apr 2025 12:41:44 +0200 Subject: [PATCH 11/11] chore: Revert change to the changelog --- crates/stackable-operator/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/stackable-operator/CHANGELOG.md b/crates/stackable-operator/CHANGELOG.md index bba8d4eaf..219d73293 100644 --- a/crates/stackable-operator/CHANGELOG.md +++ b/crates/stackable-operator/CHANGELOG.md @@ -96,7 +96,7 @@ All notable changes to this project will be documented in this file. ### Added -- Add `region` field to S3ConnectionSpec ([#959]). +- BREAKING: Add `region` field to S3ConnectionSpec (defaults to `us-east-1`) ([#959]). [#959]: https://github.com/stackabletech/operator-rs/pull/959