diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/DefaultMongoHandlerObservationConvention.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/DefaultMongoHandlerObservationConvention.java index 550a71b301..ec3a8838cf 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/DefaultMongoHandlerObservationConvention.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/DefaultMongoHandlerObservationConvention.java @@ -15,6 +15,7 @@ */ package org.springframework.data.mongodb.observability; +import io.micrometer.common.KeyValue; import io.micrometer.common.KeyValues; import org.springframework.data.mongodb.observability.MongoObservation.LowCardinalityCommandKeyNames; @@ -63,6 +64,8 @@ public KeyValues getLowCardinalityKeyValues(MongoHandlerContext context) { if (!ObjectUtils.isEmpty(context.getCollectionName())) { keyValues = keyValues .and(LowCardinalityCommandKeyNames.MONGODB_COLLECTION.withValue(context.getCollectionName())); + } else { + keyValues = keyValues.and(LowCardinalityCommandKeyNames.MONGODB_COLLECTION.withValue(KeyValue.NONE_VALUE)); } if(context.getCommandStartedEvent() == null) { diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/observability/MongoObservationCommandListenerTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/observability/MongoObservationCommandListenerTests.java index 5c2cb0b701..981e48a8e1 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/observability/MongoObservationCommandListenerTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/observability/MongoObservationCommandListenerTests.java @@ -20,6 +20,7 @@ import io.micrometer.common.KeyValues; import io.micrometer.core.instrument.MeterRegistry; +import io.micrometer.core.instrument.Tags; import io.micrometer.core.instrument.observation.DefaultMeterObservationHandler; import io.micrometer.core.instrument.simple.SimpleMeterRegistry; import io.micrometer.observation.Observation; @@ -98,6 +99,20 @@ void commandStartedShouldNotInstrumentWhenNoParentSampleInRequestContext() { assertThat(meterRegistry).hasMeterWithName("spring.data.mongodb.command.active"); } + @Test + void commandStartedShouldIncludeCollectionIfMissing() { + + // when + listener.commandStarted(new CommandStartedEvent(new MapRequestContext(), 0, 0, null, "some name", "hello", null)); + + // then + // although command 'hello' is collection-less, metric must have tag "db.mongodb.collection" + assertThat(meterRegistry).hasMeterWithNameAndTags( + "spring.data.mongodb.command.active", + Tags.of("db.mongodb.collection", "none")); + + } + @Test void successfullyCompletedCommandShouldCreateTimerWhenParentSampleInRequestContext() {