Introduce opentelemetry to collab

Co-Authored-By: Nathan Sobo <nathan@zed.dev>
This commit is contained in:
Nathan Sobo 2022-04-22 11:55:10 -06:00 committed by Antonio Scandurra
parent 27e693d8f7
commit 2db20c4364
4 changed files with 308 additions and 32 deletions

View file

@ -1 +1 @@
collaborators = ["nathansobo", "as-cii", "maxbrunsfeld", "iamnbutler", "gibusu", "Kethku"] collaborators = ["nathansobo", "as-cii", "maxbrunsfeld", "iamnbutler", "gibusu", "Kethku", "chrismwendt"]

295
Cargo.lock generated
View file

@ -123,7 +123,7 @@ dependencies = [
"futures-core", "futures-core",
"futures-io", "futures-io",
"memchr", "memchr",
"pin-project-lite 0.2.8", "pin-project-lite 0.2.9",
] ]
[[package]] [[package]]
@ -228,6 +228,27 @@ dependencies = [
"syn", "syn",
] ]
[[package]]
name = "async-stream"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dad5c83079eae9969be7fadefe640a1c566901f05ff91ab221de4b6f68d9507e"
dependencies = [
"async-stream-impl",
"futures-core",
]
[[package]]
name = "async-stream-impl"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]] [[package]]
name = "async-task" name = "async-task"
version = "4.0.3" version = "4.0.3"
@ -267,7 +288,7 @@ dependencies = [
"futures-io", "futures-io",
"futures-util", "futures-util",
"log", "log",
"pin-project-lite 0.2.8", "pin-project-lite 0.2.9",
"tungstenite 0.16.0", "tungstenite 0.16.0",
] ]
@ -339,9 +360,9 @@ checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
[[package]] [[package]]
name = "axum" name = "axum"
version = "0.5.3" version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f523b4e98ba6897ae90994bc18423d9877c54f9047b06a00ddc8122a957b1c70" checksum = "f4af7447fc1214c1f3a1ace861d0216a6c8bb13965b64bbad9650f375b67689a"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"axum-core", "axum-core",
@ -358,7 +379,7 @@ dependencies = [
"memchr", "memchr",
"mime", "mime",
"percent-encoding", "percent-encoding",
"pin-project-lite 0.2.8", "pin-project-lite 0.2.9",
"serde", "serde",
"serde_json", "serde_json",
"serde_urlencoded", "serde_urlencoded",
@ -374,9 +395,9 @@ dependencies = [
[[package]] [[package]]
name = "axum-core" name = "axum-core"
version = "0.2.2" version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d3ddbd16eabff8b45f21b98671fddcc93daaa7ac4c84f8473693437226040de5" checksum = "3bdc19781b16e32f8a7200368a336fa4509d4b72ef15dd4e41df5290855ee1e6"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"bytes", "bytes",
@ -816,6 +837,8 @@ dependencies = [
"lipsum", "lipsum",
"log", "log",
"lsp", "lsp",
"opentelemetry",
"opentelemetry-otlp",
"parking_lot", "parking_lot",
"project", "project",
"rand 0.8.3", "rand 0.8.3",
@ -831,6 +854,7 @@ dependencies = [
"tokio", "tokio",
"tokio-tungstenite", "tokio-tungstenite",
"toml", "toml",
"tonic",
"tower", "tower",
"util", "util",
"workspace", "workspace",
@ -1459,6 +1483,12 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d" checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d"
[[package]]
name = "fixedbitset"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "279fb028e20b3c4c320317955b77c5e0c9701f05a1d309905d6fc702cdc5053e"
[[package]] [[package]]
name = "flate2" name = "flate2"
version = "1.0.20" version = "1.0.20"
@ -1676,7 +1706,7 @@ dependencies = [
"futures-io", "futures-io",
"memchr", "memchr",
"parking", "parking",
"pin-project-lite 0.2.8", "pin-project-lite 0.2.9",
"waker-fn", "waker-fn",
] ]
@ -1716,7 +1746,7 @@ dependencies = [
"futures-sink", "futures-sink",
"futures-task", "futures-task",
"memchr", "memchr",
"pin-project-lite 0.2.8", "pin-project-lite 0.2.9",
"pin-utils", "pin-utils",
"slab", "slab",
] ]
@ -1883,6 +1913,25 @@ dependencies = [
"syn", "syn",
] ]
[[package]]
name = "h2"
version = "0.3.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37a82c6d637fc9515a4694bbf1cb2457b79d81ce52b3108bdeea58b07dd34a57"
dependencies = [
"bytes",
"fnv",
"futures-core",
"futures-sink",
"futures-util",
"http",
"indexmap",
"slab",
"tokio",
"tokio-util 0.7.1",
"tracing",
]
[[package]] [[package]]
name = "hashbrown" name = "hashbrown"
version = "0.9.1" version = "0.9.1"
@ -2010,7 +2059,7 @@ checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6"
dependencies = [ dependencies = [
"bytes", "bytes",
"http", "http",
"pin-project-lite 0.2.8", "pin-project-lite 0.2.9",
] ]
[[package]] [[package]]
@ -2047,12 +2096,13 @@ dependencies = [
"futures-channel", "futures-channel",
"futures-core", "futures-core",
"futures-util", "futures-util",
"h2",
"http", "http",
"http-body", "http-body",
"httparse", "httparse",
"httpdate", "httpdate",
"itoa 1.0.1", "itoa 1.0.1",
"pin-project-lite 0.2.8", "pin-project-lite 0.2.9",
"socket2 0.4.0", "socket2 0.4.0",
"tokio", "tokio",
"tower-service", "tower-service",
@ -2060,6 +2110,18 @@ dependencies = [
"want", "want",
] ]
[[package]]
name = "hyper-timeout"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1"
dependencies = [
"hyper",
"pin-project-lite 0.2.9",
"tokio",
"tokio-io-timeout",
]
[[package]] [[package]]
name = "idna" name = "idna"
version = "0.2.3" version = "0.2.3"
@ -2880,6 +2942,45 @@ dependencies = [
"vcpkg", "vcpkg",
] ]
[[package]]
name = "opentelemetry"
version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6105e89802af13fdf48c49d7646d3b533a70e536d818aae7e78ba0433d01acb8"
dependencies = [
"async-trait",
"crossbeam-channel 0.5.0",
"futures-channel",
"futures-executor",
"futures-util",
"js-sys",
"lazy_static",
"percent-encoding",
"pin-project",
"rand 0.8.3",
"thiserror",
"tokio",
"tokio-stream",
]
[[package]]
name = "opentelemetry-otlp"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9d1a6ca9de4c8b00aa7f1a153bd76cb263287155cec642680d79d98706f3d28a"
dependencies = [
"async-trait",
"futures",
"futures-util",
"http",
"opentelemetry",
"prost 0.9.0",
"thiserror",
"tokio",
"tonic",
"tonic-build",
]
[[package]] [[package]]
name = "ordered-float" name = "ordered-float"
version = "2.1.1" version = "2.1.1"
@ -3023,7 +3124,17 @@ version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "467d164a6de56270bd7c4d070df81d07beace25012d5103ced4e9ff08d6afdb7" checksum = "467d164a6de56270bd7c4d070df81d07beace25012d5103ced4e9ff08d6afdb7"
dependencies = [ dependencies = [
"fixedbitset", "fixedbitset 0.2.0",
"indexmap",
]
[[package]]
name = "petgraph"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4a13a2fa9d0b63e5f22328828741e523766fff0ee9e779316902290dff3f824f"
dependencies = [
"fixedbitset 0.4.1",
"indexmap", "indexmap",
] ]
@ -3076,9 +3187,9 @@ checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777"
[[package]] [[package]]
name = "pin-project-lite" name = "pin-project-lite"
version = "0.2.8" version = "0.2.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c" checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
[[package]] [[package]]
name = "pin-utils" name = "pin-utils"
@ -3280,7 +3391,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "de5e2533f59d08fcf364fd374ebda0692a70bd6d7e66ef97f306f45c6c5d8020" checksum = "de5e2533f59d08fcf364fd374ebda0692a70bd6d7e66ef97f306f45c6c5d8020"
dependencies = [ dependencies = [
"bytes", "bytes",
"prost-derive", "prost-derive 0.8.0",
]
[[package]]
name = "prost"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001"
dependencies = [
"bytes",
"prost-derive 0.9.0",
] ]
[[package]] [[package]]
@ -3294,9 +3415,29 @@ dependencies = [
"itertools", "itertools",
"log", "log",
"multimap", "multimap",
"petgraph", "petgraph 0.5.1",
"prost", "prost 0.8.0",
"prost-types", "prost-types 0.8.0",
"tempfile",
"which 4.1.0",
]
[[package]]
name = "prost-build"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62941722fb675d463659e49c4f3fe1fe792ff24fe5bbaa9c08cd3b98a1c354f5"
dependencies = [
"bytes",
"heck 0.3.3",
"itertools",
"lazy_static",
"log",
"multimap",
"petgraph 0.6.0",
"prost 0.9.0",
"prost-types 0.9.0",
"regex",
"tempfile", "tempfile",
"which 4.1.0", "which 4.1.0",
] ]
@ -3314,6 +3455,19 @@ dependencies = [
"syn", "syn",
] ]
[[package]]
name = "prost-derive"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe"
dependencies = [
"anyhow",
"itertools",
"proc-macro2",
"quote",
"syn",
]
[[package]] [[package]]
name = "prost-types" name = "prost-types"
version = "0.8.0" version = "0.8.0"
@ -3321,7 +3475,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "603bbd6394701d13f3f25aada59c7de9d35a6a5887cfc156181234a44002771b" checksum = "603bbd6394701d13f3f25aada59c7de9d35a6a5887cfc156181234a44002771b"
dependencies = [ dependencies = [
"bytes", "bytes",
"prost", "prost 0.8.0",
]
[[package]]
name = "prost-types"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "534b7a0e836e3c482d2693070f982e39e7611da9695d4d1f5a4b186b51faef0a"
dependencies = [
"bytes",
"prost 0.9.0",
] ]
[[package]] [[package]]
@ -3596,8 +3760,8 @@ dependencies = [
"gpui", "gpui",
"log", "log",
"parking_lot", "parking_lot",
"prost", "prost 0.8.0",
"prost-build", "prost-build 0.8.0",
"rand 0.8.3", "rand 0.8.3",
"rsa", "rsa",
"serde", "serde",
@ -4742,12 +4906,22 @@ dependencies = [
"num_cpus", "num_cpus",
"once_cell", "once_cell",
"parking_lot", "parking_lot",
"pin-project-lite 0.2.8", "pin-project-lite 0.2.9",
"signal-hook-registry", "signal-hook-registry",
"tokio-macros", "tokio-macros",
"winapi 0.3.9", "winapi 0.3.9",
] ]
[[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 0.2.9",
"tokio",
]
[[package]] [[package]]
name = "tokio-macros" name = "tokio-macros"
version = "1.7.0" version = "1.7.0"
@ -4777,7 +4951,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "50145484efff8818b5ccd256697f36863f587da82cf8b409c53adf1e840798e3" checksum = "50145484efff8818b5ccd256697f36863f587da82cf8b409c53adf1e840798e3"
dependencies = [ dependencies = [
"futures-core", "futures-core",
"pin-project-lite 0.2.8", "pin-project-lite 0.2.9",
"tokio", "tokio",
] ]
@ -4793,6 +4967,20 @@ dependencies = [
"tungstenite 0.17.2", "tungstenite 0.17.2",
] ]
[[package]]
name = "tokio-util"
version = "0.6.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0"
dependencies = [
"bytes",
"futures-core",
"futures-sink",
"log",
"pin-project-lite 0.2.9",
"tokio",
]
[[package]] [[package]]
name = "tokio-util" name = "tokio-util"
version = "0.7.1" version = "0.7.1"
@ -4802,8 +4990,9 @@ dependencies = [
"bytes", "bytes",
"futures-core", "futures-core",
"futures-sink", "futures-sink",
"pin-project-lite 0.2.8", "pin-project-lite 0.2.9",
"tokio", "tokio",
"tracing",
] ]
[[package]] [[package]]
@ -4815,6 +5004,49 @@ dependencies = [
"serde", "serde",
] ]
[[package]]
name = "tonic"
version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ff08f4649d10a70ffa3522ca559031285d8e421d727ac85c60825761818f5d0a"
dependencies = [
"async-stream",
"async-trait",
"base64 0.13.0",
"bytes",
"futures-core",
"futures-util",
"h2",
"http",
"http-body",
"hyper",
"hyper-timeout",
"percent-encoding",
"pin-project",
"prost 0.9.0",
"prost-derive 0.9.0",
"tokio",
"tokio-stream",
"tokio-util 0.6.9",
"tower",
"tower-layer",
"tower-service",
"tracing",
"tracing-futures",
]
[[package]]
name = "tonic-build"
version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9403f1bafde247186684b230dc6f38b5cd514584e8bec1dd32514be4745fa757"
dependencies = [
"proc-macro2",
"prost-build 0.9.0",
"quote",
"syn",
]
[[package]] [[package]]
name = "tower" name = "tower"
version = "0.4.12" version = "0.4.12"
@ -4823,10 +5055,13 @@ checksum = "9a89fd63ad6adf737582df5db40d286574513c69a11dac5214dc3b5603d6713e"
dependencies = [ dependencies = [
"futures-core", "futures-core",
"futures-util", "futures-util",
"indexmap",
"pin-project", "pin-project",
"pin-project-lite 0.2.8", "pin-project-lite 0.2.9",
"rand 0.8.3",
"slab",
"tokio", "tokio",
"tokio-util", "tokio-util 0.7.1",
"tower-layer", "tower-layer",
"tower-service", "tower-service",
"tracing", "tracing",
@ -4834,9 +5069,9 @@ dependencies = [
[[package]] [[package]]
name = "tower-http" name = "tower-http"
version = "0.2.5" version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aba3f3efabf7fb41fae8534fc20a817013dd1c12cb45441efb6c82e6556b4cd8" checksum = "79dd37121c38240c4b4fe6520332406218bbf876f2f690fe9e406020189366fd"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"bytes", "bytes",
@ -4845,7 +5080,7 @@ dependencies = [
"http", "http",
"http-body", "http-body",
"http-range-header", "http-range-header",
"pin-project-lite 0.2.8", "pin-project-lite 0.2.9",
"tower", "tower",
"tower-layer", "tower-layer",
"tower-service", "tower-service",
@ -4871,7 +5106,7 @@ checksum = "09adeb8c97449311ccd28a427f96fb563e7fd31aabf994189879d9da2394b89d"
dependencies = [ dependencies = [
"cfg-if 1.0.0", "cfg-if 1.0.0",
"log", "log",
"pin-project-lite 0.2.8", "pin-project-lite 0.2.9",
"tracing-attributes", "tracing-attributes",
"tracing-core", "tracing-core",
] ]

View file

@ -29,6 +29,8 @@ json_env_logger = "0.1"
lazy_static = "1.4" lazy_static = "1.4"
lipsum = { version = "0.8", optional = true } lipsum = { version = "0.8", optional = true }
log = { version = "0.4.16", features = ["kv_unstable_serde"] } log = { version = "0.4.16", features = ["kv_unstable_serde"] }
opentelemetry = { version = "0.17", features = ["rt-tokio"] }
opentelemetry-otlp = { version = "0.10" }
parking_lot = "0.11.1" parking_lot = "0.11.1"
rand = "0.8" rand = "0.8"
scrypt = "0.7" scrypt = "0.7"
@ -37,6 +39,7 @@ serde_json = "1.0"
sha-1 = "0.9" sha-1 = "0.9"
tokio = { version = "1", features = ["full"] } tokio = { version = "1", features = ["full"] }
tokio-tungstenite = "0.17" tokio-tungstenite = "0.17"
tonic = "0.6"
tower = "0.4" tower = "0.4"
time = "0.2" time = "0.2"
toml = "0.5.8" toml = "0.5.8"

View file

@ -6,7 +6,10 @@ 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},
@ -18,6 +21,8 @@ pub struct Config {
pub http_port: u16, pub http_port: u16,
pub database_url: String, pub database_url: String,
pub api_token: String, pub api_token: String,
pub honeycomb_api_key: Option<String>,
pub honeycomb_dataset: Option<String>,
} }
pub struct AppState { pub struct AppState {
@ -52,8 +57,17 @@ async fn main() -> Result<()> {
} }
let config = envy::from_env::<Config>().expect("error loading config"); let config = envy::from_env::<Config>().expect("error loading 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", |_| {
get_active_span(|span| {
span.set_attribute(KeyValue::new("foo", "bar"));
});
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");
@ -112,3 +126,27 @@ impl std::fmt::Display for Error {
} }
} }
} }
pub fn init_tracing(config: &Config) -> Option<()> {
use opentelemetry_otlp::WithExportConfig;
let (honeycomb_api_key, honeycomb_dataset) = config
.honeycomb_api_key
.clone()
.zip(config.honeycomb_dataset.clone())?;
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()
.tracing()
.with_exporter(
opentelemetry_otlp::new_exporter()
.tonic()
.with_endpoint("api.honeycomb.io:443")
.with_metadata(metadata),
)
.install_batch(opentelemetry::runtime::Tokio)
.expect("failed to initialize tracing");
None
}