Skip to content

Commit 992c852

Browse files
committed
fix: improve error handling and update temporality logic
Enhanced error messages with specific names and differentiated warnings. Updated temporality method for Prometheus to always return cumulative temporality, aligning with Prometheus behavior.
1 parent e356a6c commit 992c852

File tree

1 file changed

+15
-11
lines changed
  • opentelemetry-prometheus/src

1 file changed

+15
-11
lines changed

opentelemetry-prometheus/src/lib.rs

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@
9797
#![cfg_attr(test, deny(warnings))]
9898

9999
use once_cell::sync::{Lazy, OnceCell};
100-
use opentelemetry::{otel_error, InstrumentationScope, Key, Value};
100+
use opentelemetry::{otel_error, otel_warn, InstrumentationScope, Key, Value};
101101
use opentelemetry_sdk::{
102102
metrics::{
103103
data::{self, ResourceMetrics},
@@ -165,8 +165,10 @@ impl MetricReader for PrometheusExporter {
165165
self.reader.shutdown()
166166
}
167167

168-
fn temporality(&self, kind: InstrumentKind) -> Temporality {
169-
self.reader.temporality(kind)
168+
/// Note: Prometheus only supports cumulative temporality, so this will always be
169+
/// [Temporality::Cumulative].
170+
fn temporality(&self, _kind: InstrumentKind) -> Temporality {
171+
Temporality::Cumulative
170172
}
171173
}
172174

@@ -274,7 +276,7 @@ impl prometheus::core::Collector for Collector {
274276
Ok(guard) => guard,
275277
Err(err) => {
276278
otel_error!(
277-
name: "OpenTelemetry error occurred.",
279+
name: "OpenTelemetryPrometheus.AcquireLockError",
278280
message = err.to_string(),
279281
);
280282
return Vec::new();
@@ -287,7 +289,7 @@ impl prometheus::core::Collector for Collector {
287289
};
288290
if let Err(err) = self.reader.collect(&mut metrics) {
289291
otel_error!(
290-
name: "OpenTelemetry metrics error occurred.",
292+
name: "OpenTelemetryPrometheus.ReaderError",
291293
message = err.to_string(),
292294
);
293295
return vec![];
@@ -419,16 +421,18 @@ fn validate_metrics(
419421
) -> (bool, Option<String>) {
420422
if let Some(existing) = mfs.get(name) {
421423
if existing.get_field_type() != metric_type {
422-
otel_error!(
423-
name: "OpenTelemetry metrics error occurred.",
424-
message = format!("Instrument type conflict, using existing type definition. Instrument {name}, Existing: {:?}, dropped: {:?}", existing.get_field_type(), metric_type).as_str(),
424+
otel_warn!(
425+
name: "OpenTelemetryPrometheus.MetricValidation",
426+
message = "Instrument type conflict, using existing type definition",
427+
metric_type = format!("Instrument {name}, Existing: {:?}, dropped: {:?}", existing.get_field_type(), metric_type).as_str(),
425428
);
426429
return (true, None);
427430
}
428431
if existing.get_help() != description {
429-
otel_error!(
430-
name: "OpenTelemetry metrics error occurred.",
431-
message = format!("Instrument description conflict, using existing. Instrument {name}, Existing: {:?}, dropped: {:?}", existing.get_help().to_string(), description.to_string()).as_str(),
432+
otel_warn!(
433+
name: "OpenTelemetryPrometheus.MetricValidation",
434+
message = "Instrument description conflict, using existing",
435+
metric_description = format!("Instrument {name}, Existing: {:?}, dropped: {:?}", existing.get_help().to_string(), description.to_string()).as_str(),
432436
);
433437
return (false, Some(existing.get_help().to_string()));
434438
}

0 commit comments

Comments
 (0)