diff options
Diffstat (limited to 'crates/common/src/config/telemetry.rs')
-rw-r--r-- | crates/common/src/config/telemetry.rs | 179 |
1 files changed, 90 insertions, 89 deletions
diff --git a/crates/common/src/config/telemetry.rs b/crates/common/src/config/telemetry.rs index 5d264f84..59d5e91e 100644 --- a/crates/common/src/config/telemetry.rs +++ b/crates/common/src/config/telemetry.rs @@ -128,11 +128,13 @@ impl Telemetry { // Parse metrics if config - .property_or_default("metrics.prometheus.enable", "true") - .unwrap_or(true) - || config - .property_or_default("metrics.open-telemetry.enable", "false") - .unwrap_or(false) + .property_or_default("metrics.prometheus.enable", "false") + .unwrap_or(false) + || ["http", "grpc"].contains( + &config + .value("metrics.open-telemetry.transport") + .unwrap_or("disabled"), + ) { apply_events( config @@ -141,7 +143,9 @@ impl Telemetry { .map(|(_, e)| e), false, |event_type| { - telemetry.metrics.set(event_type); + if event_type.is_metric() { + telemetry.metrics.set(event_type); + } }, ); } @@ -577,10 +581,21 @@ impl Metrics { }); } - if config - .property_or_default("metrics.open-telemetry.enable", "false") - .unwrap_or(false) + let otel_enabled = match config + .value("metrics.open-telemetry.transport") + .unwrap_or("disable") { + "grpc" => true.into(), + "http" | "https" => false.into(), + "disable" | "disabled" => None, + transport => { + let err = format!("Invalid transport: {transport}"); + config.new_parse_error("metrics.open-telemetry.transport", err); + None + } + }; + + if let Some(is_grpc) = otel_enabled { let timeout = config .property::<Duration>("metrics.open-telemetry.timeout") .unwrap_or(Duration::from_secs( @@ -597,92 +612,78 @@ impl Metrics { .with_version(env!("CARGO_PKG_VERSION")) .build(); - match config - .value_require("metrics.open-telemetry.transport") - .unwrap_or_default() - { - "grpc" => { - let mut exporter = opentelemetry_otlp::new_exporter() - .tonic() - .with_protocol(opentelemetry_otlp::Protocol::Grpc) - .with_timeout(timeout); - if let Some(endpoint) = config.value("metrics.open-telemetry.endpoint") { - exporter = exporter.with_endpoint(endpoint); - } + if is_grpc { + let mut exporter = opentelemetry_otlp::new_exporter() + .tonic() + .with_protocol(opentelemetry_otlp::Protocol::Grpc) + .with_timeout(timeout); + if let Some(endpoint) = config.value("metrics.open-telemetry.endpoint") { + exporter = exporter.with_endpoint(endpoint); + } - match exporter.build_metrics_exporter( - Box::new(DefaultAggregationSelector::new()), - Box::new(DefaultTemporalitySelector::new()), - ) { - Ok(exporter) => { - metrics.otel = Some(Arc::new(OtelMetrics { - exporter: Box::new(exporter), - interval, - resource, - instrumentation, - })); - } - Err(err) => { - config.new_build_error( - "metrics.open-telemetry", - format!("Failed to build OpenTelemetry metrics exporter: {err}"), - ); - } + match exporter.build_metrics_exporter( + Box::new(DefaultAggregationSelector::new()), + Box::new(DefaultTemporalitySelector::new()), + ) { + Ok(exporter) => { + metrics.otel = Some(Arc::new(OtelMetrics { + exporter: Box::new(exporter), + interval, + resource, + instrumentation, + })); + } + Err(err) => { + config.new_build_error( + "metrics.open-telemetry", + format!("Failed to build OpenTelemetry metrics exporter: {err}"), + ); } } - "http" => { - if let Some(endpoint) = config - .value_require("metrics.open-telemetry.endpoint") - .map(|s| s.to_string()) - { - let mut headers = HashMap::new(); - let mut err = None; - for (_, value) in config.values("metrics.open-telemetry.headers") { - if let Some((key, value)) = value.split_once(':') { - headers.insert(key.trim().to_string(), value.trim().to_string()); - } else { - err = format!("Invalid open-telemetry header {value:?}").into(); - break; - } - } - if let Some(err) = err { - config.new_parse_error("metrics.open-telemetry.headers", err); - } + } else if let Some(endpoint) = config + .value_require("metrics.open-telemetry.endpoint") + .map(|s| s.to_string()) + { + let mut headers = HashMap::new(); + let mut err = None; + for (_, value) in config.values("metrics.open-telemetry.headers") { + if let Some((key, value)) = value.split_once(':') { + headers.insert(key.trim().to_string(), value.trim().to_string()); + } else { + err = format!("Invalid open-telemetry header {value:?}").into(); + break; + } + } + if let Some(err) = err { + config.new_parse_error("metrics.open-telemetry.headers", err); + } - let mut exporter = opentelemetry_otlp::new_exporter() - .http() - .with_endpoint(&endpoint) - .with_timeout(timeout); - if !headers.is_empty() { - exporter = exporter.with_headers(headers); - } + let mut exporter = opentelemetry_otlp::new_exporter() + .http() + .with_endpoint(&endpoint) + .with_timeout(timeout); + if !headers.is_empty() { + exporter = exporter.with_headers(headers); + } - match exporter.build_metrics_exporter( - Box::new(DefaultAggregationSelector::new()), - Box::new(DefaultTemporalitySelector::new()), - ) { - Ok(exporter) => { - metrics.otel = Some(Arc::new(OtelMetrics { - exporter: Box::new(exporter), - interval, - resource, - instrumentation, - })); - } - Err(err) => { - config.new_build_error( - "metrics.open-telemetry", - format!( - "Failed to build OpenTelemetry metrics exporter: {err}" - ), - ); - } - } + match exporter.build_metrics_exporter( + Box::new(DefaultAggregationSelector::new()), + Box::new(DefaultTemporalitySelector::new()), + ) { + Ok(exporter) => { + metrics.otel = Some(Arc::new(OtelMetrics { + exporter: Box::new(exporter), + interval, + resource, + instrumentation, + })); + } + Err(err) => { + config.new_build_error( + "metrics.open-telemetry", + format!("Failed to build OpenTelemetry metrics exporter: {err}"), + ); } - } - transport => { - let err = format!("Invalid transport: {transport}"); - config.new_parse_error("metrics.open-telemetry.transport", err); } } } |