Skip to content

Commit fee82b1

Browse files
committed
feat: allow to specif a service.instance.id; fix service.name usage
Signed-off-by: jeluard <jeluard@users.noreply.github.com>
1 parent 345e74b commit fee82b1

File tree

3 files changed

+15
-10
lines changed

3 files changed

+15
-10
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ opentelemetry-otlp = { version = "0.31.0", features = [
4747
"http-proto",
4848
"reqwest-blocking-client",
4949
] }
50-
opentelemetry-semantic-conventions = "0.31.0"
50+
opentelemetry-semantic-conventions = { version = "0.31.0", features = ["semconv_experimental"] }
5151
opentelemetry_sdk = "0.31.0"
5252
pallas-addresses = "0.34.0"
5353
pallas-codec = "0.34.0" # When updating, double check that minicbor doesn't need to be updated too (see https://github.com/txpipe/pallas/blob/v0.32.0/pallas-codec/Cargo.toml#L22)

crates/amaru/src/observability.rs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
// limitations under the License.
1414

1515
use std::{
16-
env::VarError,
16+
env::{VarError, var},
1717
error::Error,
1818
fmt,
1919
io::{self, IsTerminal},
@@ -25,7 +25,7 @@ use std::{
2525
use opentelemetry::trace::TracerProvider;
2626
use opentelemetry_otlp::WithExportConfig;
2727
use opentelemetry_sdk::{metrics::SdkMeterProvider, trace::SdkTracerProvider};
28-
use opentelemetry_semantic_conventions::resource::SERVICE_NAME;
28+
use opentelemetry_semantic_conventions::resource::{SERVICE_INSTANCE_ID, SERVICE_NAME};
2929
use tracing::{Metadata, Subscriber, info, level_filters::LevelFilter, span, subscriber::Interest, warn};
3030
use tracing_subscriber::{
3131
EnvFilter, Registry,
@@ -267,17 +267,21 @@ impl Default for OpenTelemetryHandle {
267267
}
268268
}
269269

270-
pub const DEFAULT_OTLP_SERVICE_NAME: &str = "amaru";
271-
272-
pub const DEFAULT_OTLP_METRIC_URL: &str = "http://localhost:4318/v1/metrics";
270+
const DEFAULT_OTLP_SERVICE_NAME: &str = "amaru";
271+
const DEFAULT_OTLP_METRIC_URL: &str = "http://localhost:4318/v1/metrics";
273272

274273
#[expect(clippy::panic)]
275274
pub fn setup_open_telemetry(subscriber: &mut TracingSubscriber<Registry>) -> (OpenTelemetryHandle, DelayedWarning) {
276275
use opentelemetry::KeyValue;
277276
use opentelemetry_sdk::{Resource, metrics::Temporality};
278277

279-
let service_name = std::env::var("OTEL_SERVICE_NAME").unwrap_or_else(|_| DEFAULT_OTLP_SERVICE_NAME.to_string());
280-
let resource = Resource::builder().with_attribute(KeyValue::new(SERVICE_NAME, service_name)).build();
278+
let service_name = var("OTEL_SERVICE_NAME").unwrap_or_else(|_| DEFAULT_OTLP_SERVICE_NAME.to_string());
279+
let service_instance_id = var("OTEL_SERVICE_INSTANCE_ID").ok();
280+
let mut attributes = vec![KeyValue::new(SERVICE_NAME, service_name.clone())];
281+
if let Some(id) = service_instance_id {
282+
attributes.push(KeyValue::new(SERVICE_INSTANCE_ID, id));
283+
}
284+
let resource = Resource::builder().with_attributes(attributes).build();
281285

282286
// Traces & span
283287
let opentelemetry_provider = SdkTracerProvider::builder()
@@ -313,7 +317,7 @@ pub fn setup_open_telemetry(subscriber: &mut TracingSubscriber<Registry>) -> (Op
313317
opentelemetry::global::set_meter_provider(metrics_provider.clone());
314318

315319
// Subscriber
316-
let opentelemetry_tracer = opentelemetry_provider.tracer(DEFAULT_OTLP_SERVICE_NAME);
320+
let opentelemetry_tracer = opentelemetry_provider.tracer(service_name);
317321
let (default_filter, warning) = new_default_filter(AMARU_TRACE_VAR, DEFAULT_AMARU_TRACE_FILTER);
318322

319323
let opentelemetry_layer =

monitoring/README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,8 @@ Coming soon.
9191

9292
Amaru recognizes standard OpenTelemetry env variable for its configuration:
9393

94-
- `OTEL_SERVICE_NAME`: Sets the `service.name` key used to identify metrics and traces. This is useful when a single OTLP service stack collects telemetry from several Amaru instances
94+
- `OTEL_SERVICE_NAME`: Sets the [service.name](https://opentelemetry.io/docs/specs/semconv/registry/attributes/service/#service-name) key used to identify metrics and traces. Defaults to `amaru`.
95+
- `OTEL_SERVICE_INSTANCE_ID`: Sets the [service.instance.id](https://opentelemetry.io/docs/specs/semconv/registry/attributes/service/#service-instance-id) key used to identify this specific amaru instance
9596
- `OTEL_EXPORTER_OTLP_ENDPOINT`: Sets the endpoint used to send spans, defaults to `http://localhost:4317`
9697
- `OTEL_EXPORTER_OTLP_METRICS_ENDPOINT`: Sets the endpoint used to send metrics, defaults to `http://localhost:4318/v1/metrics`
9798

0 commit comments

Comments
 (0)