diff --git a/Cargo.lock b/Cargo.lock index 3735b3e7d5..05a70f6230 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -52,6 +52,15 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi 0.3.9", +] + [[package]] name = "anyhow" version = "1.0.42" @@ -690,7 +699,7 @@ version = "2.33.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" dependencies = [ - "ansi_term", + "ansi_term 0.11.0", "atty", "bitflags", "strsim 0.8.0", @@ -865,6 +874,9 @@ dependencies = [ "toml", "tonic", "tower", + "tracing", + "tracing-opentelemetry", + "tracing-subscriber", "util", "workspace", ] @@ -4252,6 +4264,15 @@ dependencies = [ "digest 0.10.3", ] +[[package]] +name = "sharded-slab" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +dependencies = [ + "lazy_static", +] + [[package]] name = "shlex" version = "1.0.0" @@ -4814,9 +4835,9 @@ checksum = "3bf63baf9f5039dadc247375c29eb13706706cfde997d0330d05aa63a77d8820" [[package]] name = "thread_local" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8018d24e04c95ac8790716a5987d0fec4f8b27249ffa0f7d33f1369bdfb88cbd" +checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" dependencies = [ "once_cell", ] @@ -5167,11 +5188,12 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.18" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9ff14f98b1a4b289c6248a023c1c2fa1491062964e9fed67ab29c4e4da4a052" +checksum = "f54c8ca710e81886d498c2fd3331b56c93aa248d49de2222ad2742247c60072f" dependencies = [ "lazy_static", + "valuable", ] [[package]] @@ -5184,6 +5206,44 @@ dependencies = [ "tracing", ] +[[package]] +name = "tracing-log" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" +dependencies = [ + "lazy_static", + "log", + "tracing-core", +] + +[[package]] +name = "tracing-opentelemetry" +version = "0.17.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f9378e96a9361190ae297e7f3a8ff644aacd2897f244b1ff81f381669196fa6" +dependencies = [ + "opentelemetry", + "tracing", + "tracing-core", + "tracing-log", + "tracing-subscriber", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bc28f93baff38037f64e6f43d34cfa1605f27a49c34e8a04c5e78b0babf2596" +dependencies = [ + "ansi_term 0.12.1", + "sharded-slab", + "smallvec", + "thread_local", + "tracing-core", + "tracing-log", +] + [[package]] name = "tree-sitter" version = "0.20.4" @@ -5483,6 +5543,12 @@ dependencies = [ "getrandom 0.2.2", ] +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + [[package]] name = "value-bag" version = "1.0.0-alpha.8" diff --git a/crates/collab/Cargo.toml b/crates/collab/Cargo.toml index e1c77ac3ec..741bc72b6c 100644 --- a/crates/collab/Cargo.toml +++ b/crates/collab/Cargo.toml @@ -37,12 +37,15 @@ scrypt = "0.7" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" sha-1 = "0.9" +time = "0.2" tokio = { version = "1", features = ["full"] } tokio-tungstenite = "0.17" tonic = "0.6" tower = "0.4" -time = "0.2" toml = "0.5.8" +tracing = "0.1" +tracing-opentelemetry = "0.17" +tracing-subscriber = "0.3" [dependencies.sqlx] version = "0.5.2" diff --git a/crates/collab/src/main.rs b/crates/collab/src/main.rs index f07c91e272..09467558da 100644 --- a/crates/collab/src/main.rs +++ b/crates/collab/src/main.rs @@ -6,10 +6,6 @@ mod rpc; use axum::{body::Body, http::StatusCode, response::IntoResponse, Router}; use db::{Db, PostgresDb}; -use opentelemetry::{ - trace::{get_active_span, Tracer}, - KeyValue, -}; use serde::Deserialize; use std::{ net::{SocketAddr, TcpListener}, @@ -60,13 +56,11 @@ async fn main() -> Result<()> { init_tracing(&config); let state = AppState::new(&config).await?; - let tracer = opentelemetry::global::tracer(""); - tracer.in_span("testing", |_| { - get_active_span(|span| { - span.set_attribute(KeyValue::new("foo", "bar")); - }); - log::info!("testing in span"); - }); + { + let root = tracing::span!(tracing::Level::TRACE, "testing_1", work_units = 2_i32); + let _enter = root.enter(); + tracing::error!("test_error_1"); + } let listener = TcpListener::bind(&format!("0.0.0.0:{}", config.http_port)) .expect("failed to bind TCP listener"); @@ -128,7 +122,11 @@ impl std::fmt::Display for Error { } pub fn init_tracing(config: &Config) -> Option<()> { + use opentelemetry::KeyValue; use opentelemetry_otlp::WithExportConfig; + use tracing_opentelemetry::OpenTelemetryLayer; + use tracing_subscriber::layer::SubscriberExt; + let (honeycomb_api_key, honeycomb_dataset) = config .honeycomb_api_key .clone() @@ -136,8 +134,7 @@ pub fn init_tracing(config: &Config) -> Option<()> { let mut metadata = tonic::metadata::MetadataMap::new(); metadata.insert("x-honeycomb-team", honeycomb_api_key.parse().unwrap()); - metadata.insert("x-honeycomb-dataset", honeycomb_dataset.parse().unwrap()); - opentelemetry_otlp::new_pipeline() + let tracer = opentelemetry_otlp::new_pipeline() .tracing() .with_exporter( opentelemetry_otlp::new_exporter() @@ -146,10 +143,19 @@ pub fn init_tracing(config: &Config) -> Option<()> { .with_metadata(metadata), ) .with_trace_config(opentelemetry::sdk::trace::config().with_resource( - opentelemetry::sdk::Resource::new(vec![KeyValue::new("service.name", "collab")]), + opentelemetry::sdk::Resource::new(vec![KeyValue::new( + "service.name", + honeycomb_dataset, + )]), )) .install_batch(opentelemetry::runtime::Tokio) .expect("failed to initialize tracing"); + let subscriber = tracing_subscriber::Registry::default() + .with(OpenTelemetryLayer::new(tracer)) + .with(tracing_subscriber::fmt::layer()); + + tracing::subscriber::set_global_default(subscriber).unwrap(); + None }