From 09da1ec410ef4e08b21a6cd1b16a6f1984ce6f87 Mon Sep 17 00:00:00 2001 From: GZTime Date: Mon, 6 Jan 2025 00:31:50 +0800 Subject: [PATCH] wip: upgrade opentelemetry ref: https://github.com/open-telemetry/opentelemetry-rust/pull/1000 ref: https://github.com/open-telemetry/opentelemetry-rust/pull/2221 ref: https://github.com/open-telemetry/opentelemetry-rust/pull/2085 --- Cargo.lock | 440 +++++++++++------------------------------- Cargo.toml | 9 +- src/composer/mod.rs | 8 +- src/main.rs | 80 ++++---- src/shared/metrics.rs | 51 +++-- 5 files changed, 186 insertions(+), 402 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1a66568..3f80229 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -358,18 +358,17 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[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", @@ -378,8 +377,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", ] @@ -394,10 +393,10 @@ dependencies = [ "bytes", "form_urlencoded", "futures-util", - "http 1.2.0", - "http-body 1.0.1", + "http", + "http-body", "http-body-util", - "hyper 1.5.2", + "hyper", "hyper-util", "itoa", "matchit 0.8.4", @@ -410,7 +409,7 @@ dependencies = [ "serde_json", "serde_path_to_error", "serde_urlencoded", - "sync_wrapper 1.0.2", + "sync_wrapper", "tokio", "tower 0.5.2", "tower-layer", @@ -420,17 +419,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", ] @@ -443,13 +445,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", @@ -940,19 +942,6 @@ dependencies = [ "syn 2.0.95", ] -[[package]] -name = "dashmap" -version = "5.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" -dependencies = [ - "cfg-if", - "hashbrown 0.14.5", - "lock_api", - "once_cell", - "parking_lot_core", -] - [[package]] name = "data-encoding" version = "2.6.0" @@ -1214,12 +1203,6 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" -[[package]] -name = "fixedbitset" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" - [[package]] name = "fixedbitset" version = "0.5.7" @@ -1479,6 +1462,12 @@ version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +[[package]] +name = "glob" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" + [[package]] name = "globset" version = "0.4.15" @@ -1492,25 +1481,6 @@ dependencies = [ "regex-syntax 0.8.5", ] -[[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.0", - "slab", - "tokio", - "tokio-util", - "tracing", -] - [[package]] name = "h2" version = "0.4.7" @@ -1522,7 +1492,7 @@ dependencies = [ "fnv", "futures-core", "futures-sink", - "http 1.2.0", + "http", "indexmap 2.7.0", "slab", "tokio", @@ -1560,12 +1530,6 @@ dependencies = [ "hashbrown 0.14.5", ] -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - [[package]] name = "heck" version = "0.5.0" @@ -1599,26 +1563,6 @@ dependencies = [ "digest", ] -[[package]] -name = "home" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" -dependencies = [ - "windows-sys 0.59.0", -] - -[[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" @@ -1630,17 +1574,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" @@ -1648,7 +1581,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.2.0", + "http", ] [[package]] @@ -1659,8 +1592,8 @@ checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ "bytes", "futures-util", - "http 1.2.0", - "http-body 1.0.1", + "http", + "http-body", "pin-project-lite", ] @@ -1673,7 +1606,7 @@ dependencies = [ "async-trait", "bincode 1.3.3", "cacache", - "http 1.2.0", + "http", "http-cache-semantics", "httpdate", "moka", @@ -1689,7 +1622,7 @@ checksum = "735586904a5ce0c13877c57cb4eb8195eb7c11ec1ffd64d4db053fb8559ca62e" dependencies = [ "anyhow", "async-trait", - "http 1.2.0", + "http", "http-cache", "http-cache-semantics", "reqwest", @@ -1704,7 +1637,7 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92baf25cf0b8c9246baecf3a444546360a97b569168fdf92563ee6a47829920c" dependencies = [ - "http 1.2.0", + "http", "http-serde", "serde", "time", @@ -1716,7 +1649,7 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f056c8559e3757392c8d091e796416e4649d8e49e88b8d76df6c002f05027fd" dependencies = [ - "http 1.2.0", + "http", "serde", ] @@ -1732,30 +1665,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 0.5.8", - "tokio", - "tower-service", - "tracing", - "want", -] - [[package]] name = "hyper" version = "1.5.2" @@ -1765,9 +1674,9 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "h2 0.4.7", - "http 1.2.0", - "http-body 1.0.1", + "h2", + "http", + "http-body", "httparse", "httpdate", "itoa", @@ -1784,8 +1693,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" dependencies = [ "futures-util", - "http 1.2.0", - "hyper 1.5.2", + "http", + "hyper", "hyper-util", "rustls", "rustls-pki-types", @@ -1796,14 +1705,15 @@ dependencies = [ [[package]] name = "hyper-timeout" -version = "0.4.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" +checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" dependencies = [ - "hyper 0.14.32", + "hyper", + "hyper-util", "pin-project-lite", "tokio", - "tokio-io-timeout", + "tower-service", ] [[package]] @@ -1814,7 +1724,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", - "hyper 1.5.2", + "hyper", "hyper-util", "native-tls", "tokio", @@ -1831,9 +1741,9 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "http 1.2.0", - "http-body 1.0.1", - "hyper 1.5.2", + "http", + "http-body", + "hyper", "pin-project-lite", "socket2 0.5.8", "tokio", @@ -2086,9 +1996,9 @@ checksum = "ddc24109865250148c2e0f3d25d4f0f479571723792d3802153c60922a4fb708" [[package]] name = "itertools" -version = "0.10.5" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" dependencies = [ "either", ] @@ -2160,7 +2070,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3dffc7eec78b2c157d4045579fbb73329fcfa84708474a227f201c954cea717" dependencies = [ - "fixedbitset 0.5.7", + "fixedbitset", "nix 0.28.0", "oci-spec", "procfs", @@ -2413,12 +2323,6 @@ dependencies = [ "uuid", ] -[[package]] -name = "multimap" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" - [[package]] name = "nano-id" version = "0.4.0" @@ -2620,82 +2524,68 @@ dependencies = [ [[package]] name = "opentelemetry" -version = "0.18.0" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69d6c3d7288a106c0a363e4b0e8d308058d56902adefb16f4936f417ffef086e" +checksum = "ab70038c28ed37b97d8ed414b6429d343a8bbf44c9f79ec854f3a643029ba6d7" dependencies = [ - "opentelemetry_api", - "opentelemetry_sdk", + "futures-core", + "futures-sink", + "js-sys", + "pin-project-lite", + "thiserror 1.0.69", + "tracing", ] [[package]] name = "opentelemetry-otlp" -version = "0.11.0" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1c928609d087790fc936a1067bdc310ae702bdf3b090c3f281b713622c8bbde" +checksum = "91cf61a1868dacc576bf2b2a1c3e9ab150af7272909e80085c3173384fe11f76" dependencies = [ "async-trait", - "futures", - "futures-util", - "http 0.2.12", + "futures-core", + "http", "opentelemetry", "opentelemetry-proto", + "opentelemetry_sdk", "prost", "thiserror 1.0.69", "tokio", "tonic", + "tracing", ] [[package]] name = "opentelemetry-proto" -version = "0.1.0" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d61a2f56df5574508dd86aaca016c917489e589ece4141df1b5e349af8d66c28" +checksum = "a6e05acbfada5ec79023c85368af14abd0b307c015e9064d249b2a950ef459a6" dependencies = [ - "futures", - "futures-util", "opentelemetry", + "opentelemetry_sdk", "prost", "tonic", - "tonic-build", -] - -[[package]] -name = "opentelemetry_api" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c24f96e21e7acc813c7a8394ee94978929db2bcc46cf6b5014fc612bf7760c22" -dependencies = [ - "fnv", - "futures-channel", - "futures-util", - "indexmap 1.9.3", - "js-sys", - "once_cell", - "pin-project-lite", - "thiserror 1.0.69", ] [[package]] name = "opentelemetry_sdk" -version = "0.18.0" +version = "0.27.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ca41c4933371b61c2a2f214bf16931499af4ec90543604ec828f7a625c09113" +checksum = "231e9d6ceef9b0b2546ddf52335785ce41252bc7474ee8ba05bfad277be13ab8" dependencies = [ "async-trait", - "crossbeam-channel", - "dashmap", - "fnv", "futures-channel", "futures-executor", "futures-util", - "once_cell", - "opentelemetry_api", + "glob", + "opentelemetry", "percent-encoding", "rand", + "serde_json", "thiserror 1.0.69", "tokio", "tokio-stream", + "tracing", ] [[package]] @@ -2851,16 +2741,6 @@ dependencies = [ "sha2", ] -[[package]] -name = "petgraph" -version = "0.6.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" -dependencies = [ - "fixedbitset 0.4.2", - "indexmap 2.7.0", -] - [[package]] name = "pin-project" version = "1.1.7" @@ -2998,16 +2878,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "prettyplease" -version = "0.1.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" -dependencies = [ - "proc-macro2", - "syn 1.0.109", -] - [[package]] name = "proc-macro-error-attr2" version = "2.0.0" @@ -3066,56 +2936,25 @@ dependencies = [ [[package]] name = "prost" -version = "0.11.9" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd" +checksum = "2c0fef6c4230e4ccf618a35c59d7ede15dea37de8427500f50aff708806e42ec" dependencies = [ "bytes", "prost-derive", ] -[[package]] -name = "prost-build" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270" -dependencies = [ - "bytes", - "heck 0.4.1", - "itertools", - "lazy_static", - "log", - "multimap", - "petgraph", - "prettyplease", - "prost", - "prost-types", - "regex", - "syn 1.0.109", - "tempfile", - "which", -] - [[package]] name = "prost-derive" -version = "0.11.9" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4" +checksum = "157c5a9d7ea5c2ed2d9fb8f495b64759f7816c7eaea54ba3978f0d63000162e3" dependencies = [ "anyhow", "itertools", "proc-macro2", "quote", - "syn 1.0.109", -] - -[[package]] -name = "prost-types" -version = "0.11.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" -dependencies = [ - "prost", + "syn 2.0.95", ] [[package]] @@ -3286,11 +3125,11 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", - "h2 0.4.7", - "http 1.2.0", - "http-body 1.0.1", + "h2", + "http", + "http-body", "http-body-util", - "hyper 1.5.2", + "hyper", "hyper-rustls", "hyper-tls", "hyper-util", @@ -3307,7 +3146,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", - "sync_wrapper 1.0.2", + "sync_wrapper", "system-configuration", "tokio", "tokio-native-tls", @@ -3330,7 +3169,7 @@ checksum = "d1ccd3b55e711f91a9885a2fa6fbbb2e39db1776420b062efc058c6410f7e5e3" dependencies = [ "anyhow", "async-trait", - "http 1.2.0", + "http", "reqwest", "serde", "thiserror 1.0.69", @@ -3620,7 +3459,7 @@ dependencies = [ "either", "ellipse", "futures-util", - "http 1.2.0", + "http", "http-cache", "http-cache-reqwest", "indexmap 2.7.0", @@ -3634,6 +3473,7 @@ dependencies = [ "num_cpus", "opentelemetry", "opentelemetry-otlp", + "opentelemetry_sdk", "quick-js", "rand", "regex", @@ -3924,7 +3764,7 @@ version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" dependencies = [ - "heck 0.5.0", + "heck", "proc-macro2", "quote", "rustversion", @@ -3959,12 +3799,6 @@ 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" @@ -4188,16 +4022,6 @@ dependencies = [ "tracing", ] -[[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.4.0" @@ -4289,47 +4113,32 @@ dependencies = [ [[package]] name = "tonic" -version = "0.8.3" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f219fad3b929bef19b1f86fbc0358d35daed8f2cac972037ac0dc10bbb8d5fb" +checksum = "877c5b330756d856ffcc4553ab34a5684481ade925ecc54bcd1bf02b1d0d4d52" dependencies = [ "async-stream", "async-trait", - "axum 0.6.20", - "base64 0.13.1", + "axum 0.7.9", + "base64 0.22.1", "bytes", - "futures-core", - "futures-util", - "h2 0.3.26", - "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.32", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", "hyper-timeout", + "hyper-util", "percent-encoding", "pin-project", "prost", - "prost-derive", + "socket2 0.5.8", "tokio", "tokio-stream", - "tokio-util", "tower 0.4.13", "tower-layer", "tower-service", "tracing", - "tracing-futures", -] - -[[package]] -name = "tonic-build" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bf5e9b9c0f7e0a7c027dcfaba7b2c60816c7049171f679d99ee2ff65d0de8c4" -dependencies = [ - "prettyplease", - "proc-macro2", - "prost-build", - "quote", - "syn 1.0.109", ] [[package]] @@ -4361,7 +4170,7 @@ dependencies = [ "futures-core", "futures-util", "pin-project-lite", - "sync_wrapper 1.0.2", + "sync_wrapper", "tokio", "tower-layer", "tower-service", @@ -4413,27 +4222,6 @@ dependencies = [ "valuable", ] -[[package]] -name = "tracing-futures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" -dependencies = [ - "pin-project", - "tracing", -] - -[[package]] -name = "tracing-log" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" -dependencies = [ - "log", - "once_cell", - "tracing-core", -] - [[package]] name = "tracing-log" version = "0.2.0" @@ -4447,16 +4235,20 @@ dependencies = [ [[package]] name = "tracing-opentelemetry" -version = "0.18.0" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21ebb87a95ea13271332df069020513ab70bdb5637ca42d6e492dc3bbbad48de" +checksum = "97a971f6058498b5c0f1affa23e7ea202057a7301dbff68e968b2d578bcbd053" dependencies = [ + "js-sys", "once_cell", "opentelemetry", + "opentelemetry_sdk", + "smallvec", "tracing", "tracing-core", - "tracing-log 0.1.4", + "tracing-log", "tracing-subscriber", + "web-time", ] [[package]] @@ -4474,7 +4266,7 @@ dependencies = [ "thread_local", "tracing", "tracing-core", - "tracing-log 0.2.0", + "tracing-log", ] [[package]] @@ -4738,15 +4530,13 @@ dependencies = [ ] [[package]] -name = "which" -version = "4.4.2" +name = "web-time" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" dependencies = [ - "either", - "home", - "once_cell", - "rustix 0.38.42", + "js-sys", + "wasm-bindgen", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 19638d4..c21553d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -53,11 +53,10 @@ triggered = "0.1" url = { version = "2.5", features = ["serde"] } uzers = "0.12" axum = "0.8" - -# locked dependencies because of the api changes in the newer versions -tracing-opentelemetry = "=0.18.0" -opentelemetry = { version = "=0.18.0", features = ["rt-tokio", "metrics", "trace"] } -opentelemetry-otlp = { version = "=0.11.0", features = ["metrics"] } +tracing-opentelemetry = "0.28" +opentelemetry = "0.27" +opentelemetry-otlp = "0.27" +opentelemetry_sdk = { version = "0.27", features = ["rt-tokio"] } [dev-dependencies] insta = { version = "1.42", features = ["glob", "redactions", "ron"] } diff --git a/src/composer/mod.rs b/src/composer/mod.rs index 8bfeeb2..8e83271 100644 --- a/src/composer/mod.rs +++ b/src/composer/mod.rs @@ -4,7 +4,7 @@ use anyhow::{Context, Result, bail}; use chrono::Utc; use ellipse::Ellipse; use futures_util::StreamExt; -use opentelemetry::{Context as OpenTelemetryCtx, KeyValue}; +use opentelemetry::KeyValue; use ring_channel::{RingReceiver, RingSender}; use tokio::{ fs, @@ -88,9 +88,9 @@ async fn handle_submission( let end = Instant::now(); end.duration_since(begin).as_secs_f64() }; - metrics::SUBMISSION_HANDLING_HISTOGRAM.record(&OpenTelemetryCtx::current(), duration, &[ - KeyValue::new(SUBMISSION_STATUS, signal_type), - ]); + + metrics::SUBMISSION_HANDLING_HISTOGRAM + .record(duration, &[KeyValue::new(SUBMISSION_STATUS, signal_type)]); } async fn do_handle_submission( diff --git a/src/main.rs b/src/main.rs index e745ee8..b7428ca 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,13 +7,12 @@ use std::{ }; use anyhow::{Context, Result, bail}; -use opentelemetry::{ - Context as OpenTelemetryCtx, global, - sdk::{ - export::metrics::aggregation::cumulative_temporality_selector, metrics::selectors, trace, - }, +use opentelemetry::{global, trace::TracerProvider as _}; +use opentelemetry_otlp::{ExportConfig, MetricExporter, Protocol, SpanExporter, WithExportConfig}; +use opentelemetry_sdk::{ + metrics::{PeriodicReader, SdkMeterProvider, Temporality}, + trace::TracerProvider, }; -use opentelemetry_otlp::{ExportConfig, Protocol, WithExportConfig}; use tokio::{ runtime, sync::{mpsc, oneshot}, @@ -26,7 +25,7 @@ use tokio_graceful_shutdown::{ use tracing::{error, info, warn}; use tracing_subscriber::{Layer, filter::LevelFilter, prelude::*}; -use crate::{conf::SeeleWorkMode, shared::metrics::METRICS_RESOURCE, worker::action}; +use crate::{conf::SeeleWorkMode, worker::action}; mod cgroup; mod composer; @@ -77,11 +76,7 @@ fn main() { if conf::CONFIG.telemetry.is_some() { spawn_blocking(|| { global::shutdown_tracer_provider(); - shared::metrics::METRICS_CONTROLLER - .get() - .unwrap() - .stop(&OpenTelemetryCtx::current()) - .ok(); + shared::metrics::METRICS_PROVIDER.get().unwrap().shutdown().ok(); }) .await .ok(); @@ -175,38 +170,44 @@ async fn setup_telemetry() -> Result<()> { info!("Initializing telemetry"); - let tracer = opentelemetry_otlp::new_pipeline() - .tracing() - .with_exporter(opentelemetry_otlp::new_exporter().tonic().with_export_config( - ExportConfig { - endpoint: telemetry.collector_url.clone(), - timeout: Duration::from_secs(5), - protocol: Protocol::Grpc, - }, - )) - .with_trace_config(trace::config().with_resource(METRICS_RESOURCE.clone())) - .install_batch(opentelemetry::runtime::Tokio) + let span_exporter = SpanExporter::builder() + .with_tonic() + .with_export_config(ExportConfig { + endpoint: Some(telemetry.collector_url.clone()), + timeout: Duration::from_secs(5), + protocol: Protocol::Grpc, + }) + .build() .context("Failed to initialize the tracer")?; - let metrics = opentelemetry_otlp::new_pipeline() - .metrics( - selectors::simple::histogram(telemetry.histogram_boundaries.clone()), - cumulative_temporality_selector(), - opentelemetry::runtime::Tokio, - ) - .with_exporter(opentelemetry_otlp::new_exporter().tonic().with_export_config( - ExportConfig { - endpoint: telemetry.collector_url.clone(), - timeout: Duration::from_secs(5), - protocol: Protocol::Grpc, - }, - )) - .with_resource(METRICS_RESOURCE.clone()) - .with_period(Duration::from_secs(3)) + let tracer_provider = TracerProvider::builder() + .with_batch_exporter(span_exporter, opentelemetry_sdk::runtime::Tokio) + .with_resource(shared::metrics::METRICS_RESOURCE.clone()) + .build(); + + let tracer = tracer_provider.tracer("seele"); + + let metric_exporter = MetricExporter::builder() + .with_temporality(Temporality::Cumulative) + .with_tonic() + .with_export_config(ExportConfig { + endpoint: Some(telemetry.collector_url.clone()), + timeout: Duration::from_secs(5), + protocol: Protocol::Grpc, + }) .build() .context("Failed to initialize the metrics")?; - shared::metrics::METRICS_CONTROLLER.set(metrics).ok(); + let metrics = SdkMeterProvider::builder() + .with_reader( + PeriodicReader::builder(metric_exporter, opentelemetry_sdk::runtime::Tokio) + .with_interval(Duration::from_secs(3)) + .build(), + ) + .with_resource(shared::metrics::METRICS_RESOURCE.clone()) + .build(); + + shared::metrics::METRICS_PROVIDER.set(metrics).ok(); tracing::subscriber::set_global_default( tracing_subscriber::registry() @@ -259,7 +260,6 @@ fn check_env() -> Result<()> { } info!("Registering metrics"); - shared::metrics::register_gauge_metrics().context("Error registering gauge metrics")?; Ok(()) } diff --git a/src/shared/metrics.rs b/src/shared/metrics.rs index 079dcd0..8e956e0 100644 --- a/src/shared/metrics.rs +++ b/src/shared/metrics.rs @@ -1,11 +1,13 @@ -use std::sync::{LazyLock, OnceLock, atomic::Ordering}; +use std::{ + borrow::Cow, + sync::{LazyLock, OnceLock, atomic::Ordering}, +}; -use anyhow::Result; use opentelemetry::{ - KeyValue, global, - metrics::{Histogram, Meter, ObservableGauge, Unit}, - sdk::{Resource, metrics::controllers::BasicController}, + InstrumentationScope, KeyValue, global, + metrics::{Histogram, Meter, ObservableGauge}, }; +use opentelemetry_sdk::{Resource, metrics::SdkMeterProvider}; use super::runner; use crate::conf; @@ -43,24 +45,32 @@ pub static METRICS_RESOURCE: LazyLock = LazyLock::new(|| { Resource::new(pairs) }); -pub static METRICS_CONTROLLER: OnceLock = OnceLock::new(); +pub static METRICS_PROVIDER: OnceLock = OnceLock::new(); + +pub static METER: LazyLock = LazyLock::new(|| { + let scope = InstrumentationScope::builder("seele") + .with_version(Cow::Borrowed(env!("CARGO_PKG_VERSION"))) + .build(); -pub static METER: LazyLock = - LazyLock::new(|| global::meter_with_version("seele", Some("0.1"), None)); + global::meter_with_scope(scope) +}); pub static SUBMISSION_HANDLING_HISTOGRAM: LazyLock> = LazyLock::new(|| { METER .f64_histogram("seele.submission.duration") .with_description("Duration of submissions handling") - .with_unit(Unit::new("s")) - .init() + .with_unit("s") + .build() }); pub static RUNNER_COUNT_GAUGE: LazyLock> = LazyLock::new(|| { METER .u64_observable_gauge("seele.runner.count") .with_description("Count of available runner threads") - .init() + .with_callback(|ctx| { + ctx.observe(conf::CONFIG.thread_counts.runner as u64, &[]); + }) + .build() }); pub static PENDING_CONTAINER_ACTION_COUNT_GAUGE: LazyLock> = @@ -68,21 +78,6 @@ pub static PENDING_CONTAINER_ACTION_COUNT_GAUGE: LazyLock> METER .u64_observable_gauge("seele.action.container.pending.count") .with_description("Count of pending container actions in the worker queue") - .init() + .with_callback(|ctx| ctx.observe(runner::PENDING_TASKS.load(Ordering::SeqCst), &[])) + .build() }); - -pub fn register_gauge_metrics() -> Result<()> { - METER.register_callback(|ctx| { - RUNNER_COUNT_GAUGE.observe(ctx, conf::CONFIG.thread_counts.runner as u64, &[]) - })?; - - METER.register_callback(move |ctx| { - PENDING_CONTAINER_ACTION_COUNT_GAUGE.observe( - ctx, - runner::PENDING_TASKS.load(Ordering::SeqCst), - &[], - ) - })?; - - Ok(()) -}