You've already forked authentication-service
mirror of
https://github.com/matrix-org/matrix-authentication-service.git
synced 2025-07-07 22:41:18 +03:00
Properly propagate trace contexts
This also fixes a long-running issue where the OTEL context was not properly set in the tracing spans.
This commit is contained in:
@ -22,8 +22,7 @@ use clap::Parser;
|
||||
use mas_config::TelemetryConfig;
|
||||
use sentry_tracing::EventFilter;
|
||||
use tracing_subscriber::{
|
||||
filter::LevelFilter, layer::SubscriberExt, reload, util::SubscriberInitExt, EnvFilter, Layer,
|
||||
Registry,
|
||||
filter::LevelFilter, layer::SubscriberExt, util::SubscriberInitExt, EnvFilter, Layer, Registry,
|
||||
};
|
||||
|
||||
mod commands;
|
||||
@ -59,33 +58,6 @@ async fn try_main() -> anyhow::Result<()> {
|
||||
.or_else(|_| EnvFilter::try_new("info"))
|
||||
.context("could not setup logging filter")?;
|
||||
|
||||
// Don't fill the telemetry layer for now, we want to configure it based on the
|
||||
// app config, so we need to delay that a bit
|
||||
let (telemetry_layer, telemetry_handle) = reload::Layer::new(None);
|
||||
// We only want "INFO" level spans to go through OpenTelemetry
|
||||
let telemetry_layer = telemetry_layer.with_filter(LevelFilter::INFO);
|
||||
|
||||
// Don't fill the Sentry layer for now, we want to configure it based on the
|
||||
// app config, so we need to delay that a bit
|
||||
let (sentry_layer, sentry_handle) = reload::Layer::new(None);
|
||||
|
||||
let subscriber = Registry::default()
|
||||
.with(sentry_layer)
|
||||
.with(telemetry_layer)
|
||||
.with(filter_layer)
|
||||
.with(fmt_layer);
|
||||
subscriber
|
||||
.try_init()
|
||||
.context("could not initialize logging")?;
|
||||
|
||||
// Now that logging is set up, we can log stuff, like if the .env file was
|
||||
// loaded or not
|
||||
match dotenv_path {
|
||||
Ok(Some(path)) => tracing::info!(?path, "Loaded environment variables from file"),
|
||||
Ok(None) => {}
|
||||
Err(err) => tracing::warn!(%err, "failed to load .env file"),
|
||||
}
|
||||
|
||||
// Parse the CLI arguments
|
||||
let opts = self::commands::Options::parse();
|
||||
|
||||
@ -104,8 +76,9 @@ async fn try_main() -> anyhow::Result<()> {
|
||||
..Default::default()
|
||||
},
|
||||
));
|
||||
if sentry.is_enabled() {
|
||||
let layer = sentry_tracing::layer().event_filter(|md| {
|
||||
|
||||
let sentry_layer = sentry.is_enabled().then(|| {
|
||||
sentry_tracing::layer().event_filter(|md| {
|
||||
// All the spans in the handlers module send their data to Sentry themselves, so
|
||||
// we only create breadcrumbs for them, instead of full events
|
||||
if md.target().starts_with("mas_handlers::") {
|
||||
@ -113,22 +86,35 @@ async fn try_main() -> anyhow::Result<()> {
|
||||
} else {
|
||||
sentry_tracing::default_event_filter(md)
|
||||
}
|
||||
});
|
||||
})
|
||||
});
|
||||
|
||||
sentry_handle.reload(layer)?;
|
||||
}
|
||||
|
||||
// Setup OpenTelemtry tracing and metrics
|
||||
// Setup OpenTelemetry tracing and metrics
|
||||
let (tracer, _meter) = telemetry::setup(&telemetry_config)
|
||||
.await
|
||||
.context("failed to setup opentelemetry")?;
|
||||
if let Some(tracer) = tracer {
|
||||
// Now we can swap out the actual opentelemetry tracing layer
|
||||
telemetry_handle.reload(
|
||||
tracing_opentelemetry::layer()
|
||||
.with_tracer(tracer)
|
||||
.with_tracked_inactivity(false),
|
||||
)?;
|
||||
.context("failed to setup OpenTelemetry")?;
|
||||
|
||||
let telemetry_layer = tracer.map(|tracer| {
|
||||
tracing_opentelemetry::layer()
|
||||
.with_tracer(tracer)
|
||||
.with_tracked_inactivity(false)
|
||||
.with_filter(LevelFilter::INFO)
|
||||
});
|
||||
|
||||
let subscriber = Registry::default()
|
||||
.with(sentry_layer)
|
||||
.with(telemetry_layer)
|
||||
.with(filter_layer)
|
||||
.with(fmt_layer);
|
||||
subscriber
|
||||
.try_init()
|
||||
.context("could not initialize logging")?;
|
||||
|
||||
// Log about the .env loading
|
||||
match dotenv_path {
|
||||
Ok(Some(path)) => tracing::info!(?path, "Loaded environment variables from .env file"),
|
||||
Ok(None) => {}
|
||||
Err(e) => tracing::warn!(?e, "Failed to load .env file"),
|
||||
}
|
||||
|
||||
// And run the command
|
||||
|
Reference in New Issue
Block a user