1
0
mirror of https://github.com/matrix-org/matrix-authentication-service.git synced 2025-08-07 17:03:01 +03:00

Upgrade OTEL and remove support for Jaeger and Zipkin exporters

This commit is contained in:
Quentin Gliech
2024-03-18 14:02:04 +01:00
parent 61a69f5af4
commit eb950151af
21 changed files with 101 additions and 555 deletions

193
Cargo.lock generated
View File

@@ -2282,18 +2282,6 @@ dependencies = [
"tokio-rustls",
]
[[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",
"tokio",
"tokio-io-timeout",
]
[[package]]
name = "iana-time-zone"
version = "0.1.60"
@@ -2666,12 +2654,6 @@ 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 = "io-lifetimes"
version = "1.0.11"
@@ -3026,12 +3008,11 @@ dependencies = [
"oauth2-types",
"opentelemetry",
"opentelemetry-http",
"opentelemetry-jaeger",
"opentelemetry-jaeger-propagator",
"opentelemetry-otlp",
"opentelemetry-prometheus",
"opentelemetry-semantic-conventions",
"opentelemetry-stdout",
"opentelemetry-zipkin",
"opentelemetry_sdk",
"prometheus",
"rand 0.8.5",
@@ -3933,13 +3914,12 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
[[package]]
name = "opentelemetry"
version = "0.21.0"
version = "0.22.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e32339a5dc40459130b3bd269e9892439f55b33e772d2a9d402a789baaf4e8a"
checksum = "900d57987be3f2aeb70d385fff9b27fb74c5723cc9a52d904d4f9c807a0667bf"
dependencies = [
"futures-core",
"futures-sink",
"indexmap 2.2.2",
"js-sys",
"once_cell",
"pin-project-lite",
@@ -3949,9 +3929,9 @@ dependencies = [
[[package]]
name = "opentelemetry-http"
version = "0.10.0"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f51189ce8be654f9b5f7e70e49967ed894e84a06fc35c6c042e64ac1fc5399e"
checksum = "7cbfa5308166ca861434f0b0913569579b8e587430a3d6bcd7fd671921ec145a"
dependencies = [
"async-trait",
"bytes",
@@ -3962,47 +3942,37 @@ dependencies = [
]
[[package]]
name = "opentelemetry-jaeger"
version = "0.20.0"
name = "opentelemetry-jaeger-propagator"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e617c66fd588e40e0dbbd66932fdc87393095b125d4459b1a3a10feb1712f8a1"
checksum = "beb4ec62efc537b60aaa89b92624f986f2523d3a609079f3511cc8ee73490826"
dependencies = [
"async-trait",
"futures-core",
"futures-util",
"http 0.2.11",
"opentelemetry",
"opentelemetry-http",
"opentelemetry-semantic-conventions",
"opentelemetry_sdk",
"thrift",
"tokio",
]
[[package]]
name = "opentelemetry-otlp"
version = "0.14.0"
version = "0.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f24cda83b20ed2433c68241f918d0f6fdec8b1d43b7a9590ab4420c5095ca930"
checksum = "1a016b8d9495c639af2145ac22387dcb88e44118e45320d9238fbf4e7889abcb"
dependencies = [
"async-trait",
"futures-core",
"http 0.2.11",
"opentelemetry",
"opentelemetry-http",
"opentelemetry-proto",
"opentelemetry-semantic-conventions",
"opentelemetry_sdk",
"prost",
"thiserror",
"tokio",
"tonic",
]
[[package]]
name = "opentelemetry-prometheus"
version = "0.14.1"
version = "0.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6f8f082da115b0dcb250829e3ed0b8792b8f963a1ad42466e48422fbe6a079bd"
checksum = "30bbcf6341cab7e2193e5843f0ac36c446a5b3fccb28747afaeda17996dcd02e"
dependencies = [
"once_cell",
"opentelemetry",
@@ -4013,9 +3983,9 @@ dependencies = [
[[package]]
name = "opentelemetry-proto"
version = "0.4.0"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2e155ce5cc812ea3d1dffbd1539aed653de4bf4882d60e6e04dcf0901d674e1"
checksum = "3a8fddc9b68f5b80dae9d6f510b88e02396f006ad48cac349411fbecc80caae4"
dependencies = [
"opentelemetry",
"opentelemetry_sdk",
@@ -4025,54 +3995,31 @@ dependencies = [
[[package]]
name = "opentelemetry-semantic-conventions"
version = "0.13.0"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f5774f1ef1f982ef2a447f6ee04ec383981a3ab99c8e77a1a7b30182e65bbc84"
dependencies = [
"opentelemetry",
]
checksum = "f9ab5bd6c42fb9349dcf28af2ba9a0667f697f9bdcca045d39f2cec5543e2910"
[[package]]
name = "opentelemetry-stdout"
version = "0.2.0"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c13b2df4cd59c176099ac82806725ba340c8fa7b1a7004c0912daad30470f63e"
checksum = "4bdf28b381f23afcd150afc0b38a4183dd321fc96320c1554752b6b761648f78"
dependencies = [
"async-trait",
"chrono",
"futures-util",
"opentelemetry",
"opentelemetry_sdk",
"ordered-float 4.2.0",
"ordered-float",
"serde",
"serde_json",
]
[[package]]
name = "opentelemetry-zipkin"
version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c2bee3ec1be4d0088378e0eb1dd54c113cbd7ec5622cc4f26181debf1d4d7b5"
dependencies = [
"async-trait",
"futures-core",
"http 0.2.11",
"once_cell",
"opentelemetry",
"opentelemetry-http",
"opentelemetry-semantic-conventions",
"opentelemetry_sdk",
"serde",
"serde_json",
"thiserror",
"typed-builder",
]
[[package]]
name = "opentelemetry_sdk"
version = "0.21.2"
version = "0.22.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2f16aec8a98a457a52664d69e0091bac3a0abd18ead9b641cb00202ba4e0efe4"
checksum = "9e90c7113be649e31e9a0f8b5ee24ed7a16923b322c3c5ab6367469c049d6b7e"
dependencies = [
"async-trait",
"crossbeam-channel",
@@ -4082,7 +4029,7 @@ dependencies = [
"glob",
"once_cell",
"opentelemetry",
"ordered-float 4.2.0",
"ordered-float",
"percent-encoding",
"rand 0.8.5",
"thiserror",
@@ -4090,15 +4037,6 @@ dependencies = [
"tokio-stream",
]
[[package]]
name = "ordered-float"
version = "2.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c"
dependencies = [
"num-traits",
]
[[package]]
name = "ordered-float"
version = "4.2.0"
@@ -4589,9 +4527,9 @@ dependencies = [
[[package]]
name = "prost"
version = "0.11.9"
version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd"
checksum = "146c289cda302b98a28d40c8b3b90498d6e526dd24ac2ecea73e4e491685b94a"
dependencies = [
"bytes",
"prost-derive",
@@ -4599,15 +4537,15 @@ dependencies = [
[[package]]
name = "prost-derive"
version = "0.11.9"
version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4"
checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e"
dependencies = [
"anyhow",
"itertools 0.10.5",
"proc-macro2",
"quote",
"syn 1.0.109",
"syn 2.0.48",
]
[[package]]
@@ -6026,28 +5964,6 @@ 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 2.10.1",
"threadpool",
]
[[package]]
name = "time"
version = "0.3.34"
@@ -6123,16 +6039,6 @@ dependencies = [
"windows-sys 0.48.0",
]
[[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.2.0"
@@ -6221,27 +6127,20 @@ dependencies = [
[[package]]
name = "tonic"
version = "0.9.2"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3082666a3a6433f7f511c7192923fa1fe07c69332d3c6a2e6bb040b569199d5a"
checksum = "76c4eb7a4e9ef9d4763600161f12f5070b92a578e1b634db88a6887844c91a13"
dependencies = [
"async-trait",
"axum",
"base64 0.21.7",
"bytes",
"futures-core",
"futures-util",
"h2",
"http 0.2.11",
"http-body",
"hyper",
"hyper-timeout",
"percent-encoding",
"pin-project",
"prost",
"tokio",
"tokio-stream",
"tower",
"tower-layer",
"tower-service",
"tracing",
@@ -6255,11 +6154,8 @@ checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
dependencies = [
"futures-core",
"futures-util",
"indexmap 1.9.3",
"pin-project",
"pin-project-lite",
"rand 0.8.5",
"slab",
"tokio",
"tokio-util",
"tower-layer",
@@ -6376,9 +6272,9 @@ dependencies = [
[[package]]
name = "tracing-opentelemetry"
version = "0.22.0"
version = "0.23.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c67ac25c5407e7b961fafc6f7e9aa5958fd297aada2d20fa2ae1737357e55596"
checksum = "a9be14ba1bbe4ab79e9229f7f89fab8d120b865859f10527f31c033e599d2284"
dependencies = [
"js-sys",
"once_cell",
@@ -6387,7 +6283,7 @@ dependencies = [
"tracing",
"tracing-core",
"tracing-subscriber",
"web-time 0.2.4",
"web-time",
]
[[package]]
@@ -6414,17 +6310,6 @@ version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
[[package]]
name = "typed-builder"
version = "0.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6179333b981641242a768f30f371c9baccbfcc03749627000c500ab88bf4528b"
dependencies = [
"proc-macro2",
"quote",
"syn 1.0.109",
]
[[package]]
name = "typenum"
version = "1.17.0"
@@ -6447,7 +6332,7 @@ dependencies = [
"rand 0.8.5",
"serde",
"uuid",
"web-time 1.0.0",
"web-time",
]
[[package]]
@@ -7006,16 +6891,6 @@ dependencies = [
"wasm-bindgen",
]
[[package]]
name = "web-time"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aa30049b1c872b72c89866d458eae9f20380ab280ffd1b1e18df2d3e2d98cfe0"
dependencies = [
"js-sys",
"wasm-bindgen",
]
[[package]]
name = "web-time"
version = "1.0.0"

View File

@@ -55,6 +55,10 @@ mas-templates = { path = "./crates/templates/", version = "=0.8.0" }
mas-tower = { path = "./crates/tower/", version = "=0.8.0" }
oauth2-types = { path = "./crates/oauth2-types/", version = "=0.8.0" }
# Utility to write and implement async traits
[workspace.dependencies.async-trait]
version = "0.1.77"
# High-level error handling
[workspace.dependencies.anyhow]
version = "1.0.79"
@@ -132,12 +136,15 @@ version = "0.3.18"
# OpenTelemetry
[workspace.dependencies.opentelemetry]
version = "0.21.0"
features = ["trace", "metrics"]
[workspace.dependencies.opentelemetry-semantic-conventions]
version = "0.13.0"
[workspace.dependencies.tracing-opentelemetry]
version = "0.22.0"
features = ["trace", "metrics"]
[workspace.dependencies.opentelemetry-http]
version = "0.11.0"
features = ["hyper", "tokio"]
[workspace.dependencies.opentelemetry-semantic-conventions]
version = "0.14.0"
[workspace.dependencies.tracing-opentelemetry]
version = "0.23.0"
default-features = false
# URL manipulation

View File

@@ -12,7 +12,7 @@ publish = false
workspace = true
[dependencies]
async-trait = "0.1.77"
async-trait.workspace = true
axum = { version = "0.6.20", features = ["headers"] }
axum-extra = { version = "0.8.0", features = ["cookie-private", "cookie-key-expansion"] }
chrono.workspace = true

View File

@@ -39,14 +39,13 @@ tracing-appender = "0.2.3"
tracing-subscriber = { workspace = true, features = ["env-filter"] }
tracing-opentelemetry.workspace = true
opentelemetry.workspace = true
opentelemetry-http = { version = "0.10.0", features = ["tokio", "hyper"] }
opentelemetry-jaeger = { version = "0.20.0", features = ["rt-tokio", "collector_client"] }
opentelemetry-otlp = { version = "0.14.0", features = ["trace", "metrics"] }
opentelemetry-prometheus = "0.14.1"
opentelemetry-http.workspace = true
opentelemetry-jaeger-propagator = "0.1.0"
opentelemetry-otlp = { version = "0.15.0", default-features = false, features = ["trace", "metrics", "http-proto"] }
opentelemetry-prometheus = "0.15.0"
opentelemetry-semantic-conventions.workspace = true
opentelemetry-stdout = { version = "0.2.0", features = ["trace", "metrics"] }
opentelemetry_sdk = { version = "0.21.2", features = ["trace", "metrics", "rt-tokio"] }
opentelemetry-zipkin = { version = "0.19.0", default-features = false }
opentelemetry-stdout = { version = "0.3.0", features = ["trace", "metrics"] }
opentelemetry_sdk = { version = "0.22.1", features = ["trace", "metrics", "rt-tokio"] }
prometheus = "0.13.3"
sentry = { version = "0.31.8", default-features = false, features = ["backtrace", "contexts", "panic", "tower"] }
sentry-tracing = "0.31.8"

View File

@@ -160,16 +160,22 @@ fn make_http_span<B>(req: &Request<B>) -> Span {
fn on_http_request_labels<B>(request: &Request<B>) -> Vec<KeyValue> {
vec![
NETWORK_PROTOCOL_NAME.string("http"),
NETWORK_PROTOCOL_VERSION.string(otel_net_protocol_version(request)),
HTTP_REQUEST_METHOD.string(otel_http_method(request)),
HTTP_ROUTE.string(otel_http_route(request).unwrap_or("FALLBACK").to_owned()),
URL_SCHEME.string(otel_url_scheme(request).as_ref()),
KeyValue::new(NETWORK_PROTOCOL_NAME, "http"),
KeyValue::new(NETWORK_PROTOCOL_VERSION, otel_net_protocol_version(request)),
KeyValue::new(HTTP_REQUEST_METHOD, otel_http_method(request)),
KeyValue::new(
HTTP_ROUTE,
otel_http_route(request).unwrap_or("FALLBACK").to_owned(),
),
KeyValue::new(URL_SCHEME, otel_url_scheme(request)),
]
}
fn on_http_response_labels<B>(res: &Response<B>) -> Vec<KeyValue> {
vec![HTTP_RESPONSE_STATUS_CODE.i64(res.status().as_u16().into())]
vec![KeyValue::new(
HTTP_RESPONSE_STATUS_CODE,
i64::from(res.status().as_u16()),
)]
}
pub fn build_router<B>(

View File

@@ -16,31 +16,31 @@ use std::time::Duration;
use anyhow::Context as _;
use hyper::{header::CONTENT_TYPE, Body, Response};
use mas_config::{
JaegerExporterProtocolConfig, MetricsExporterConfig, Propagator, TelemetryConfig,
TracingExporterConfig,
use mas_config::{MetricsExporterConfig, Propagator, TelemetryConfig, TracingExporterConfig};
use opentelemetry::{
global,
propagation::{TextMapCompositePropagator, TextMapPropagator},
trace::TracerProvider as _,
KeyValue,
};
use opentelemetry::{global, propagation::TextMapPropagator, trace::TracerProvider as _};
use opentelemetry_jaeger::Propagator as JaegerPropagator;
use opentelemetry_otlp::MetricsExporterBuilder;
use opentelemetry_prometheus::PrometheusExporter;
use opentelemetry_sdk::{
self,
metrics::{
reader::{DefaultAggregationSelector, DefaultTemporalitySelector},
ManualReader, MeterProvider, PeriodicReader,
ManualReader, PeriodicReader, SdkMeterProvider,
},
propagation::{BaggagePropagator, TextMapCompositePropagator, TraceContextPropagator},
propagation::{BaggagePropagator, TraceContextPropagator},
trace::{Sampler, Tracer, TracerProvider},
Resource,
};
use opentelemetry_semantic_conventions as semcov;
use opentelemetry_zipkin::{B3Encoding, Propagator as ZipkinPropagator};
use prometheus::Registry;
use tokio::sync::OnceCell;
use url::Url;
static METER_PROVIDER: OnceCell<MeterProvider> = OnceCell::const_new();
static METER_PROVIDER: OnceCell<SdkMeterProvider> = OnceCell::const_new();
static PROMETHEUS_REGISTRY: OnceCell<Registry> = OnceCell::const_new();
pub fn setup(config: &TelemetryConfig) -> anyhow::Result<Option<Tracer>> {
@@ -72,9 +72,7 @@ fn match_propagator(propagator: Propagator) -> Box<dyn TextMapPropagator + Send
match propagator {
P::TraceContext => Box::new(TraceContextPropagator::new()),
P::Baggage => Box::new(BaggagePropagator::new()),
P::Jaeger => Box::new(JaegerPropagator::new()),
P::B3 => Box::new(ZipkinPropagator::with_encoding(B3Encoding::SingleHeader)),
P::B3Multi => Box::new(ZipkinPropagator::with_encoding(B3Encoding::MultipleHeader)),
P::Jaeger => Box::new(opentelemetry_jaeger_propagator::Propagator::new()),
}
}
@@ -99,7 +97,9 @@ fn stdout_tracer_provider() -> TracerProvider {
fn otlp_tracer(endpoint: Option<&Url>) -> anyhow::Result<Tracer> {
use opentelemetry_otlp::WithExportConfig;
let mut exporter = opentelemetry_otlp::new_exporter().tonic();
let mut exporter = opentelemetry_otlp::new_exporter()
.http()
.with_http_client(http_client());
if let Some(endpoint) = endpoint {
exporter = exporter.with_endpoint(endpoint.to_string());
}
@@ -114,65 +114,6 @@ fn otlp_tracer(endpoint: Option<&Url>) -> anyhow::Result<Tracer> {
Ok(tracer)
}
fn jaeger_agent_tracer_provider(host: &str, port: u16) -> anyhow::Result<TracerProvider> {
let pipeline = opentelemetry_jaeger::new_agent_pipeline()
.with_service_name(env!("CARGO_PKG_NAME"))
.with_trace_config(trace_config())
.with_endpoint(format!("{host}:{port}"));
let tracer_provider = pipeline
.build_batch(opentelemetry_sdk::runtime::Tokio)
.context("Failed to configure Jaeger agent exporter")?;
Ok(tracer_provider)
}
fn jaeger_collector_tracer_provider(
endpoint: &str,
username: Option<&str>,
password: Option<&str>,
) -> anyhow::Result<TracerProvider> {
let http_client = http_client();
let mut pipeline = opentelemetry_jaeger::new_collector_pipeline()
.with_service_name(env!("CARGO_PKG_NAME"))
.with_trace_config(trace_config())
.with_http_client(http_client)
.with_endpoint(endpoint);
if let Some(username) = username {
pipeline = pipeline.with_username(username);
}
if let Some(password) = password {
pipeline = pipeline.with_password(password);
}
let tracer_provider = pipeline
.build_batch(opentelemetry_sdk::runtime::Tokio)
.context("Failed to configure Jaeger collector exporter")?;
Ok(tracer_provider)
}
fn zipkin_tracer(collector_endpoint: &Option<Url>) -> anyhow::Result<Tracer> {
let http_client = http_client();
let mut pipeline = opentelemetry_zipkin::new_pipeline()
.with_http_client(http_client)
.with_service_name(env!("CARGO_PKG_NAME"))
.with_trace_config(trace_config());
if let Some(collector_endpoint) = collector_endpoint {
pipeline = pipeline.with_collector_endpoint(collector_endpoint.as_str());
}
let tracer = pipeline
.install_batch(opentelemetry_sdk::runtime::Tokio)
.context("Failed to configure Zipkin exporter")?;
Ok(tracer)
}
fn tracer(config: &TracingExporterConfig) -> anyhow::Result<Option<Tracer>> {
let tracer_provider = match config {
TracingExporterConfig::None => return Ok(None),
@@ -181,19 +122,6 @@ fn tracer(config: &TracingExporterConfig) -> anyhow::Result<Option<Tracer>> {
// The OTLP exporter already creates a tracer and installs it
return Ok(Some(otlp_tracer(endpoint.as_ref())?));
}
TracingExporterConfig::Jaeger(JaegerExporterProtocolConfig::UdpThriftCompact {
agent_host,
agent_port,
}) => jaeger_agent_tracer_provider(agent_host, *agent_port)?,
TracingExporterConfig::Jaeger(JaegerExporterProtocolConfig::HttpThriftBinary {
endpoint,
username,
password,
}) => jaeger_collector_tracer_provider(endpoint, username.as_deref(), password.as_deref())?,
TracingExporterConfig::Zipkin { collector_endpoint } => {
// The Zipkin exporter already creates a tracer and installs it
return Ok(Some(zipkin_tracer(collector_endpoint)?));
}
};
let tracer = tracer_provider.versioned_tracer(
@@ -210,7 +138,9 @@ fn tracer(config: &TracingExporterConfig) -> anyhow::Result<Option<Tracer>> {
fn otlp_metric_reader(endpoint: Option<&url::Url>) -> anyhow::Result<PeriodicReader> {
use opentelemetry_otlp::WithExportConfig;
let mut exporter = opentelemetry_otlp::new_exporter().tonic();
let mut exporter = opentelemetry_otlp::new_exporter()
.http()
.with_http_client(http_client());
if let Some(endpoint) = endpoint {
exporter = exporter.with_endpoint(endpoint.to_string());
}
@@ -279,7 +209,7 @@ fn prometheus_metric_reader() -> anyhow::Result<PrometheusExporter> {
}
fn init_meter(config: &MetricsExporterConfig) -> anyhow::Result<()> {
let meter_provider_builder = MeterProvider::builder();
let meter_provider_builder = SdkMeterProvider::builder();
let meter_provider_builder = match config {
MetricsExporterConfig::None => meter_provider_builder.with_reader(ManualReader::default()),
MetricsExporterConfig::Stdout => meter_provider_builder.with_reader(stdout_metric_reader()),
@@ -306,9 +236,9 @@ fn trace_config() -> opentelemetry_sdk::trace::Config {
}
fn resource() -> Resource {
let resource = Resource::new(vec![
semcov::resource::SERVICE_NAME.string(env!("CARGO_PKG_NAME")),
semcov::resource::SERVICE_VERSION.string(env!("CARGO_PKG_VERSION")),
let resource = Resource::new([
KeyValue::new(semcov::resource::SERVICE_NAME, env!("CARGO_PKG_NAME")),
KeyValue::new(semcov::resource::SERVICE_VERSION, env!("CARGO_PKG_VERSION")),
]);
let detected = Resource::from_detectors(

View File

@@ -14,7 +14,7 @@ workspace = true
[dependencies]
tokio = { version = "1.35.1", features = ["fs", "rt"] }
tracing.workspace = true
async-trait = "0.1.77"
async-trait.workspace = true
thiserror.workspace = true
anyhow.workspace = true

View File

@@ -46,8 +46,8 @@ pub use self::{
policy::PolicyConfig,
secrets::SecretsConfig,
telemetry::{
JaegerExporterProtocolConfig, MetricsConfig, MetricsExporterConfig, Propagator,
TelemetryConfig, TracingConfig, TracingExporterConfig,
MetricsConfig, MetricsExporterConfig, Propagator, TelemetryConfig, TracingConfig,
TracingExporterConfig,
},
templates::TemplatesConfig,
upstream_oauth2::{

View File

@@ -12,14 +12,11 @@
// See the License for the specific language governing permissions and
// limitations under the License.
use std::num::NonZeroU16;
use async_trait::async_trait;
use rand::Rng;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use serde_with::skip_serializing_none;
use thiserror::Error;
use url::Url;
use super::ConfigurationSection;
@@ -36,138 +33,10 @@ pub enum Propagator {
/// Propagate trace context with Jaeger compatible headers
Jaeger,
/// Propagate trace context with Zipkin compatible headers (single `b3`
/// header variant)
B3,
/// Propagate trace context with Zipkin compatible headers (multiple
/// `x-b3-*` headers variant)
B3Multi,
}
fn otlp_endpoint_example() -> &'static str {
"https://localhost:4317"
}
fn zipkin_collector_endpoint_example() -> &'static str {
"http://127.0.0.1:9411/api/v2/spans"
}
/// The protocol to use by the Jaeger exporter
///
/// Defaults to `udp/thrift.compact`
#[derive(Clone, Debug, Serialize, Deserialize, JsonSchema)]
#[serde(tag = "protocol", try_from = "JaegerExporterKitchenSink")]
pub enum JaegerExporterProtocolConfig {
/// Thrift over HTTP
#[serde(rename = "http/thrift.binary")]
HttpThriftBinary {
/// Full URL of the Jaeger HTTP endpoint
///
/// Defaults to `http://localhost:14268/api/traces`
endpoint: String,
/// Username to be used for HTTP basic authentication
username: Option<String>,
/// Password to be used for HTTP basic authentication
password: Option<String>,
},
/// Thrift with compact encoding over UDP
#[serde(rename = "udp/thrift.compact")]
UdpThriftCompact {
/// Hostname of the Jaeger agent
///
/// Defaults to `localhost`
agent_host: String,
/// `udp/thrift.compact` port of the Jaeger agent
///
/// Defaults to `6831`
agent_port: u16,
},
}
#[derive(Clone, Debug, Deserialize)]
enum JaegerProtocol {
#[serde(rename = "http/thrift.binary")]
HttpThriftBinary,
#[serde(rename = "grpc")]
Grpc,
#[serde(rename = "udp/thrift.compact")]
UdpThriftCompact,
#[serde(rename = "udp/thrift.binary")]
UdpThriftBinary,
}
#[derive(Clone, Debug, Deserialize)]
#[serde(deny_unknown_fields)]
struct JaegerExporterKitchenSink {
protocol: Option<JaegerProtocol>,
endpoint: Option<Url>,
username: Option<String>,
password: Option<String>,
agent_host: Option<String>,
agent_port: Option<NonZeroU16>,
}
#[derive(Error, Debug)]
#[error("Invalid Jaeger exporter config")]
enum InvalidJaegerConfig {
UnsupportedProtocol,
UnsupportedField,
}
impl TryFrom<JaegerExporterKitchenSink> for JaegerExporterProtocolConfig {
type Error = InvalidJaegerConfig;
fn try_from(value: JaegerExporterKitchenSink) -> Result<Self, Self::Error> {
match value {
JaegerExporterKitchenSink {
protocol: Some(JaegerProtocol::UdpThriftCompact) | None,
endpoint: None,
username: None,
password: None,
agent_host: host,
agent_port: port,
} => Ok(Self::UdpThriftCompact {
agent_host: host.unwrap_or_else(|| "localhost".into()),
agent_port: port.map_or(6831, u16::from),
}),
JaegerExporterKitchenSink {
protocol: Some(JaegerProtocol::HttpThriftBinary),
endpoint,
username,
password,
agent_host: None,
agent_port: None,
} => Ok(Self::HttpThriftBinary {
endpoint: endpoint.map_or_else(
|| "http://localhost:14268/api/traces".into(),
|u| u.to_string(),
),
username,
password,
}),
JaegerExporterKitchenSink {
protocol:
Some(JaegerProtocol::HttpThriftBinary | JaegerProtocol::UdpThriftCompact) | None,
..
} => Err(InvalidJaegerConfig::UnsupportedField),
JaegerExporterKitchenSink {
protocol: Some(JaegerProtocol::Grpc | JaegerProtocol::UdpThriftBinary),
..
} => Err(InvalidJaegerConfig::UnsupportedProtocol),
}
}
"https://localhost:4318"
}
/// Exporter to use when exporting traces
@@ -188,17 +57,6 @@ pub enum TracingExporterConfig {
#[serde(default)]
endpoint: Option<Url>,
},
/// Export traces to a Jaeger agent
Jaeger(JaegerExporterProtocolConfig),
/// Export traces to a Zipkin collector
Zipkin {
/// Zipkin collector endpoint
#[schemars(url, example = "zipkin_collector_endpoint_example")]
#[serde(default)]
collector_endpoint: Option<Url>,
},
}
impl Default for TracingExporterConfig {

View File

@@ -12,7 +12,7 @@ publish = false
workspace = true
[dependencies]
async-trait = "0.1.77"
async-trait.workspace = true
tracing.workspace = true
thiserror.workspace = true
headers = "0.3.9"

View File

@@ -14,7 +14,7 @@ workspace = true
[dependencies]
anyhow.workspace = true
async-graphql = { version = "6.0.11", features = ["chrono", "url"] }
async-trait = "0.1.77"
async-trait.workspace = true
chrono.workspace = true
lettre = { version = "0.11.4", default-features = false }
serde.workspace = true

View File

@@ -13,7 +13,7 @@ workspace = true
[dependencies]
anyhow.workspace = true
async-trait = "0.1.77"
async-trait.workspace = true
camino.workspace = true
convert_case = "0.6.0"
csv = "1.3.0"

View File

@@ -13,7 +13,7 @@ workspace = true
[dependencies]
anyhow.workspace = true
async-trait = "0.1.77"
async-trait.workspace = true
http.workspace = true
serde.workspace = true
tower.workspace = true

View File

@@ -14,7 +14,7 @@ workspace = true
[dependencies]
anyhow.workspace = true
serde.workspace = true
async-trait = "0.1.77"
async-trait.workspace = true
http.workspace = true
tokio = { version = "1.35.1", features = ["sync", "macros", "rt"] }
url.workspace = true

View File

@@ -12,7 +12,7 @@ publish = false
workspace = true
[dependencies]
async-trait = "0.1.77"
async-trait.workspace = true
sqlx = { version = "0.7.3", features = ["runtime-tokio-rustls", "postgres", "migrate", "chrono", "json", "uuid", "ipnetwork"] }
sea-query = { version = "0.30.7", features = ["derive", "attr", "with-uuid", "with-chrono", "postgres-array"] }
sea-query-binder = { version = "0.5.0", features = ["sqlx-postgres", "with-uuid", "with-chrono", "postgres-array"] }

View File

@@ -12,7 +12,7 @@ publish = false
workspace = true
[dependencies]
async-trait = "0.1.77"
async-trait.workspace = true
chrono.workspace = true
thiserror.workspace = true
futures-util = "0.3.30"

View File

@@ -16,7 +16,7 @@ anyhow.workspace = true
apalis-core = { version = "0.4.9", features = ["extensions", "tokio-comp", "storage"] }
apalis-cron = "0.4.9"
async-stream = "0.3.5"
async-trait = "0.1.77"
async-trait.workspace = true
chrono.workspace = true
event-listener = "4.0.3"
futures-lite = "2.2.0"

View File

@@ -18,6 +18,6 @@ tracing-opentelemetry.workspace = true
tower.workspace = true
tokio = { version = "1.35.1", features = ["time"] }
opentelemetry.workspace = true
opentelemetry-http = "0.10.0"
opentelemetry-http.workspace = true
opentelemetry-semantic-conventions.workspace = true
pin-project-lite = "0.2.13"

View File

@@ -64,7 +64,6 @@ skip = [
{ name = "event-listener", version = "2.5.3" }, # async-channel (wiremock) and sqlx-core depend on the old version
{ name = "regex-syntax", version = "0.6.29" }, # tracing-subscriber[env-filter] -> matchers depends on the old version
{ name = "regex-automata", version = "0.1.10" }, # ^
{ name = "ordered-float", version = "2.10.0" }, # opentelemetry-jaeger -> thrift depends on the old version
{ name = "itertools", version = "0.10.5" }, # wasmtime & others depends on the old version
{ name = "bitflags", version = "1.3.2" }, # axum depends on an old version
{ name = "hashbrown" }, # Too many versions :(

View File

@@ -1253,104 +1253,7 @@
"endpoint": {
"description": "OTLP compatible endpoint",
"examples": [
"https://localhost:4317"
],
"type": "string",
"format": "uri"
}
},
"additionalProperties": false
},
{
"description": "Export traces to a Jaeger agent",
"type": "object",
"oneOf": [
{
"description": "Thrift over HTTP",
"type": "object",
"required": [
"endpoint",
"protocol"
],
"properties": {
"protocol": {
"type": "string",
"enum": [
"http/thrift.binary"
]
},
"endpoint": {
"description": "Full URL of the Jaeger HTTP endpoint\n\nDefaults to `http://localhost:14268/api/traces`",
"type": "string"
},
"username": {
"description": "Username to be used for HTTP basic authentication",
"type": "string"
},
"password": {
"description": "Password to be used for HTTP basic authentication",
"type": "string"
}
}
},
{
"description": "Thrift with compact encoding over UDP",
"type": "object",
"required": [
"agent_host",
"agent_port",
"protocol"
],
"properties": {
"protocol": {
"type": "string",
"enum": [
"udp/thrift.compact"
]
},
"agent_host": {
"description": "Hostname of the Jaeger agent\n\nDefaults to `localhost`",
"type": "string"
},
"agent_port": {
"description": "`udp/thrift.compact` port of the Jaeger agent\n\nDefaults to `6831`",
"type": "integer",
"format": "uint16",
"minimum": 0.0
}
}
}
],
"required": [
"exporter"
],
"properties": {
"exporter": {
"type": "string",
"enum": [
"jaeger"
]
}
},
"additionalProperties": false
},
{
"description": "Export traces to a Zipkin collector",
"type": "object",
"required": [
"exporter"
],
"properties": {
"exporter": {
"type": "string",
"enum": [
"zipkin"
]
},
"collector_endpoint": {
"description": "Zipkin collector endpoint",
"examples": [
"http://127.0.0.1:9411/api/v2/spans"
"https://localhost:4318"
],
"type": "string",
"format": "uri"
@@ -1395,20 +1298,6 @@
"enum": [
"jaeger"
]
},
{
"description": "Propagate trace context with Zipkin compatible headers (single `b3` header variant)",
"type": "string",
"enum": [
"b3"
]
},
{
"description": "Propagate trace context with Zipkin compatible headers (multiple `x-b3-*` headers variant)",
"type": "string",
"enum": [
"b3multi"
]
}
]
},
@@ -1462,7 +1351,7 @@
"endpoint": {
"description": "OTLP compatible endpoint",
"examples": [
"https://localhost:4317"
"https://localhost:4318"
],
"type": "string",
"format": "uri"

View File

@@ -293,30 +293,13 @@ telemetry:
- baggage
# Propagate trace context with Jaeger compatible headers
- jaeger
# Propagate trace context with Zipkin compatible headers (single `b3` header variant)
- b3
# Propagate trace context with Zipkin compatible headers (multiple `x-b3-*` headers variant)
- b3multi
# The default: don't export traces
exporter: none
# Export traces to an OTLP-compatible endpoint
#exporter: otlp
#endpoint: https://localhost:4317
# Export traces to a Jaeger endpoint
#exporter: jaeger
#protocol: http/thrift.binary | udp/thrift.compact
#endpoint: http://localhost:14268/api/traces # for http/thrift.binary
#username: username # for http/thrift.binary
#password: password # for http/thrift.binary
#agent_host: localhost # for udp/thrift.compact
#agent_port: 6831 # for udp/thrift.compact
# Export traces to a Zipkin endpoint
#exporter: zipkin
#collector_endpoint: http://localhost:9411/api/v2/spans
#endpoint: https://localhost:4318
metrics:
# The default: don't export metrics