Wire up tracing crate to opentelemetry

Still need to

- Set a trace level and target via environment to avoid massive noise from other libraries
- Trace the operations we care about
This commit is contained in:
Nathan Sobo 2022-04-27 11:48:43 -06:00
parent 36b462182b
commit 6a21a0f6b8
3 changed files with 95 additions and 20 deletions

76
Cargo.lock generated
View file

@ -52,6 +52,15 @@ dependencies = [
"winapi 0.3.9", "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]] [[package]]
name = "anyhow" name = "anyhow"
version = "1.0.42" version = "1.0.42"
@ -690,7 +699,7 @@ version = "2.33.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002"
dependencies = [ dependencies = [
"ansi_term", "ansi_term 0.11.0",
"atty", "atty",
"bitflags", "bitflags",
"strsim 0.8.0", "strsim 0.8.0",
@ -865,6 +874,9 @@ dependencies = [
"toml", "toml",
"tonic", "tonic",
"tower", "tower",
"tracing",
"tracing-opentelemetry",
"tracing-subscriber",
"util", "util",
"workspace", "workspace",
] ]
@ -4252,6 +4264,15 @@ dependencies = [
"digest 0.10.3", "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]] [[package]]
name = "shlex" name = "shlex"
version = "1.0.0" version = "1.0.0"
@ -4814,9 +4835,9 @@ checksum = "3bf63baf9f5039dadc247375c29eb13706706cfde997d0330d05aa63a77d8820"
[[package]] [[package]]
name = "thread_local" name = "thread_local"
version = "1.1.3" version = "1.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8018d24e04c95ac8790716a5987d0fec4f8b27249ffa0f7d33f1369bdfb88cbd" checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180"
dependencies = [ dependencies = [
"once_cell", "once_cell",
] ]
@ -5167,11 +5188,12 @@ dependencies = [
[[package]] [[package]]
name = "tracing-core" name = "tracing-core"
version = "0.1.18" version = "0.1.26"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a9ff14f98b1a4b289c6248a023c1c2fa1491062964e9fed67ab29c4e4da4a052" checksum = "f54c8ca710e81886d498c2fd3331b56c93aa248d49de2222ad2742247c60072f"
dependencies = [ dependencies = [
"lazy_static", "lazy_static",
"valuable",
] ]
[[package]] [[package]]
@ -5184,6 +5206,44 @@ dependencies = [
"tracing", "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]] [[package]]
name = "tree-sitter" name = "tree-sitter"
version = "0.20.4" version = "0.20.4"
@ -5483,6 +5543,12 @@ dependencies = [
"getrandom 0.2.2", "getrandom 0.2.2",
] ]
[[package]]
name = "valuable"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
[[package]] [[package]]
name = "value-bag" name = "value-bag"
version = "1.0.0-alpha.8" version = "1.0.0-alpha.8"

View file

@ -37,12 +37,15 @@ scrypt = "0.7"
serde = { version = "1.0", features = ["derive"] } serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0" serde_json = "1.0"
sha-1 = "0.9" sha-1 = "0.9"
time = "0.2"
tokio = { version = "1", features = ["full"] } tokio = { version = "1", features = ["full"] }
tokio-tungstenite = "0.17" tokio-tungstenite = "0.17"
tonic = "0.6" tonic = "0.6"
tower = "0.4" tower = "0.4"
time = "0.2"
toml = "0.5.8" toml = "0.5.8"
tracing = "0.1"
tracing-opentelemetry = "0.17"
tracing-subscriber = "0.3"
[dependencies.sqlx] [dependencies.sqlx]
version = "0.5.2" version = "0.5.2"

View file

@ -6,10 +6,6 @@ mod rpc;
use axum::{body::Body, http::StatusCode, response::IntoResponse, Router}; use axum::{body::Body, http::StatusCode, response::IntoResponse, Router};
use db::{Db, PostgresDb}; use db::{Db, PostgresDb};
use opentelemetry::{
trace::{get_active_span, Tracer},
KeyValue,
};
use serde::Deserialize; use serde::Deserialize;
use std::{ use std::{
net::{SocketAddr, TcpListener}, net::{SocketAddr, TcpListener},
@ -60,13 +56,11 @@ async fn main() -> Result<()> {
init_tracing(&config); init_tracing(&config);
let state = AppState::new(&config).await?; let state = AppState::new(&config).await?;
let tracer = opentelemetry::global::tracer(""); {
tracer.in_span("testing", |_| { let root = tracing::span!(tracing::Level::TRACE, "testing_1", work_units = 2_i32);
get_active_span(|span| { let _enter = root.enter();
span.set_attribute(KeyValue::new("foo", "bar")); tracing::error!("test_error_1");
}); }
log::info!("testing in span");
});
let listener = TcpListener::bind(&format!("0.0.0.0:{}", config.http_port)) let listener = TcpListener::bind(&format!("0.0.0.0:{}", config.http_port))
.expect("failed to bind TCP listener"); .expect("failed to bind TCP listener");
@ -128,7 +122,11 @@ impl std::fmt::Display for Error {
} }
pub fn init_tracing(config: &Config) -> Option<()> { pub fn init_tracing(config: &Config) -> Option<()> {
use opentelemetry::KeyValue;
use opentelemetry_otlp::WithExportConfig; use opentelemetry_otlp::WithExportConfig;
use tracing_opentelemetry::OpenTelemetryLayer;
use tracing_subscriber::layer::SubscriberExt;
let (honeycomb_api_key, honeycomb_dataset) = config let (honeycomb_api_key, honeycomb_dataset) = config
.honeycomb_api_key .honeycomb_api_key
.clone() .clone()
@ -136,8 +134,7 @@ pub fn init_tracing(config: &Config) -> Option<()> {
let mut metadata = tonic::metadata::MetadataMap::new(); let mut metadata = tonic::metadata::MetadataMap::new();
metadata.insert("x-honeycomb-team", honeycomb_api_key.parse().unwrap()); metadata.insert("x-honeycomb-team", honeycomb_api_key.parse().unwrap());
metadata.insert("x-honeycomb-dataset", honeycomb_dataset.parse().unwrap()); let tracer = opentelemetry_otlp::new_pipeline()
opentelemetry_otlp::new_pipeline()
.tracing() .tracing()
.with_exporter( .with_exporter(
opentelemetry_otlp::new_exporter() opentelemetry_otlp::new_exporter()
@ -146,10 +143,19 @@ pub fn init_tracing(config: &Config) -> Option<()> {
.with_metadata(metadata), .with_metadata(metadata),
) )
.with_trace_config(opentelemetry::sdk::trace::config().with_resource( .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) .install_batch(opentelemetry::runtime::Tokio)
.expect("failed to initialize tracing"); .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 None
} }