diff --git a/Cargo.lock b/Cargo.lock index 8b31016..355fc10 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -120,8 +120,8 @@ checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" name = "api" version = "0.3.2" dependencies = [ - "capnp", - "capnpc", + "capnp 0.14.11", + "capnpc 0.14.9", "walkdir", ] @@ -561,13 +561,19 @@ version = "0.14.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2dca085c2c7d9d65ad749d450b19b551efaa8e3476a439bdca07aca8533097f3" +[[package]] +name = "capnp" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18eca1b9aca7e3623dda158213b1b79c1e5c4293fbbf0ead6b9ed28a1763bbff" + [[package]] name = "capnp-futures" version = "0.14.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9821801cc6f199a9d9c3c793504e800c797b536d2befddaffb15144e40a6e63a" dependencies = [ - "capnp", + "capnp 0.14.11", "futures", ] @@ -577,7 +583,7 @@ version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c4f17f96f68f2c1168ed7105d9e5cb4a095a5bef3578aee0f9c0644b85ca95e" dependencies = [ - "capnp", + "capnp 0.14.11", "capnp-futures", "futures", ] @@ -588,7 +594,16 @@ version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bdc9f1dc84666d4ff007b1a16c8f97db80764a624625979be05d869bcff43aaa" dependencies = [ - "capnp", + "capnp 0.14.11", +] + +[[package]] +name = "capnpc" +version = "0.16.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55b72fc31ab0a8fd0420a799737d15e0a5297d695ba6c8b7b578d8cc0ba8360c" +dependencies = [ + "capnp 0.16.1", ] [[package]] @@ -701,7 +716,7 @@ dependencies = [ "async-io", "async-net", "async-oneshot", - "console-api", + "console-api 0.3.0", "crossbeam-channel", "crossbeam-utils", "futures-util", @@ -717,6 +732,14 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "console-api" +version = "0.1.0" +dependencies = [ + "capnp 0.16.1", + "capnpc 0.16.5", +] + [[package]] name = "console-api" version = "0.3.0" @@ -978,6 +1001,19 @@ dependencies = [ "syn", ] +[[package]] +name = "dashmap" +version = "5.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "907076dfda823b0b36d2a1bb5f90c96660a5bbcd7729e10727f07858f22c4edc" +dependencies = [ + "cfg-if", + "hashbrown", + "lock_api", + "once_cell", + "parking_lot_core", +] + [[package]] name = "des" version = "0.7.0" @@ -1087,7 +1123,7 @@ dependencies = [ "async-process", "async-trait", "backtrace", - "capnp", + "capnp 0.14.11", "capnp-rpc", "chrono", "clap 3.2.23", @@ -1113,6 +1149,8 @@ dependencies = [ "miette", "nix", "once_cell", + "opentelemetry", + "opentelemetry-jaeger", "pin-utils", "ptr_meta", "rand", @@ -1136,6 +1174,7 @@ dependencies = [ "toml", "tracing", "tracing-futures", + "tracing-opentelemetry", "tracing-subscriber", "url", "uuid", @@ -1720,6 +1759,12 @@ 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 = "inventory" version = "0.1.11" @@ -2174,6 +2219,86 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +[[package]] +name = "opentelemetry" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f4b8347cc26099d3aeee044065ecc3ae11469796b4d65d065a23a584ed92a6f" +dependencies = [ + "opentelemetry_api", + "opentelemetry_sdk", +] + +[[package]] +name = "opentelemetry-jaeger" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08e028dc9f4f304e9320ce38c80e7cf74067415b1ad5a8750a38bae54a4d450d" +dependencies = [ + "async-trait", + "futures", + "futures-executor", + "once_cell", + "opentelemetry", + "opentelemetry-semantic-conventions", + "thiserror", + "thrift", +] + +[[package]] +name = "opentelemetry-semantic-conventions" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24e33428e6bf08c6f7fcea4ddb8e358fab0fe48ab877a87c70c6ebe20f673ce5" +dependencies = [ + "opentelemetry", +] + +[[package]] +name = "opentelemetry_api" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed41783a5bf567688eb38372f2b7a8530f5a607a4b49d38dd7573236c23ca7e2" +dependencies = [ + "fnv", + "futures-channel", + "futures-util", + "indexmap", + "once_cell", + "pin-project-lite", + "thiserror", + "urlencoding", +] + +[[package]] +name = "opentelemetry_sdk" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b3a2a91fdbfdd4d212c0dcc2ab540de2c2bcbbd90be17de7a7daf8822d010c1" +dependencies = [ + "async-trait", + "crossbeam-channel", + "dashmap", + "fnv", + "futures-channel", + "futures-executor", + "futures-util", + "once_cell", + "opentelemetry_api", + "percent-encoding", + "rand", + "thiserror", +] + +[[package]] +name = "ordered-float" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7940cf2ca942593318d07fcf2596cdca60a85c9e7fab408a5e21a4f9dcd40d87" +dependencies = [ + "num-traits", +] + [[package]] name = "os_str_bytes" version = "6.4.1" @@ -2423,9 +2548,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.51" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6" +checksum = "fa1fb82fc0c281dd9671101b66b771ebbe1eaf967b96ac8740dcba4b70005ca8" dependencies = [ "unicode-ident", ] @@ -2485,9 +2610,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.23" +version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" +checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500" dependencies = [ "proc-macro2", ] @@ -3226,6 +3351,28 @@ 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", + "threadpool", +] + [[package]] name = "time" version = "0.1.45" @@ -3485,6 +3632,20 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-opentelemetry" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00a39dcf9bfc1742fa4d6215253b33a6e474be78275884c216fc2a06267b3600" +dependencies = [ + "once_cell", + "opentelemetry", + "tracing", + "tracing-core", + "tracing-log", + "tracing-subscriber", +] + [[package]] name = "tracing-subscriber" version = "0.3.16" @@ -3608,6 +3769,12 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "urlencoding" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8db7427f936968176eaa7cdf81b7f98b980b18495ec28f1b5791ac3bfe3eea9" + [[package]] name = "uuid" version = "0.8.2" diff --git a/Cargo.toml b/Cargo.toml index 47ff063..febbc4a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -79,6 +79,9 @@ rand = "0.8.4" tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter", "registry", "std"] } tracing-futures = { version = "0.2", features = ["futures-03"] } +tracing-opentelemetry = "0.19.0" +opentelemetry = "0.19.0" +opentelemetry-jaeger = "0.18.0" # API api = { path = "api" } diff --git a/bffhd/lib.rs b/bffhd/lib.rs index ad0c84a..9a27148 100644 --- a/bffhd/lib.rs +++ b/bffhd/lib.rs @@ -37,6 +37,8 @@ pub mod capnp; pub mod utils; +mod metrics; + // Store build information in the `env` module. shadow_rs::shadow!(env); diff --git a/bffhd/logging.rs b/bffhd/logging.rs index 1fdb2c6..eb03c66 100644 --- a/bffhd/logging.rs +++ b/bffhd/logging.rs @@ -44,6 +44,13 @@ pub fn init(config: &LogConfig) -> console::Server { let (console_layer, server) = console::ConsoleLayer::new(); let subscriber = subscriber.with(console_layer); + let tracer = opentelemetry_jaeger::new_agent_pipeline() + .with_service_name("bffhd") + .install_simple() + .expect("failed to setup jaeger tracer"); + let opentelemetry = tracing_opentelemetry::layer().with_tracer(tracer); + let subscriber = subscriber.with(opentelemetry); + let filter = if let Some(ref filter) = config.filter { EnvFilter::new(filter.as_str()) } else { diff --git a/bffhd/metrics/mod.rs b/bffhd/metrics/mod.rs new file mode 100644 index 0000000..74fb131 --- /dev/null +++ b/bffhd/metrics/mod.rs @@ -0,0 +1,4 @@ + +pub fn init_metrics_collector() { + +} \ No newline at end of file