Previously, the child management context was created when the
parent context's web server was initialized and it wasn't stopped
or closed until the parent context was closed. This resulted in
the child context being left running when the parent context was
stopped. This would then cause a failure when the parent context
was started again as another web server initialized event would be
received and a second child management context would be started.
This commit updates the initialization of the child management
context to integrate it with the lifecycle of the parent context.
The management context is now created the first time the parent
context is started. It is stopped when the parent context is
stopped and restarted if the parent context is started again.
This lifecycle management is done using a phase that ensures
that the child context is not started until the parent context's
web server has been started.
Fixes gh-38502
The mocks being static meant that their state was shared across each
test in the class. This resulted in the tests being order dependent.
This commit uses instance variables to hold the mocks, thereby
ensuring that they're recreated for each test as part of the standard
JUnit lifecycle.
Closes gh-38363
This introduces two different attributes for, e.g. the Spring Framework
version: the "normal" one, e.g. 6.1.0-SNAPSHOT, and the Antora one,
e.g. 6.1.
Spring Framework's reference documentation is still broken when using
SNAPSHOT versions, see spring-framework/gh-31480.
See gh-38000
Unfortunately there's no good way to configure connect and read timeout
separately, which works for all supported reactive clients. This
implementation applies a timeout through Reactor's timeout method. The
timeout from the properties is summed together and this is the applied
timeout. While not perfect, this is better than no timeout at all.
Closes gh-31496
Previously auto-configuration of a user details service (imperative
or reactive) would only back off on the presence of certain beans.
This led to situations where the im-memory service was
auto-configured and the default password was logged even though
another authentication mechanism was in use.
This commit updates the auto-configuration so that it backs off
when depending on Spring Security's OAuth2 Client and OAuth2
Resource Server modules. In the imperative case it will also back
off when depending on the SAML 2 provider.
Closes gh-35338
Spring Boot auto-configures both a `JmsTemplate` and a
`JmsMessagingTemplate`. As of Spring Framework 6.2, JMS has
observability support when publishing messages.
This commit creates a bean post-processor that configures an
`ObservationRegistry` on the template, if the registry is present.
Closes gh-37388
OTel has deprecated their semconv module and introduced a new module
with different Maven coordinates. micrometer-metrics/tracing#343 will
move Micrometer Tracing to the new module. Until then, we need to
suppress the deprecation warnings that result from using the old one.
Closes gh-37347
This commit removes the auto-configuration of the
`ServerHttpObservationFilter` bean for WebFlux applications as it's been
deprecated by Spring Framework.
The Observability instrumentation is now handled at the
`WebHttpHandlerBuilder` in Framework directly and doesn't need any
auto-configuration from Spring Boot.
Closes gh-37344
Micrometer introduced extended exemplars functionality that adds
exemplars to _count too not only to histogram buckets,
see: https://github.com/micrometer-metrics/micrometer/pull/3996
Because of this, some verifications should be changed.
The OpenTelemetry bean is now configured in the
OpenTelemetryAutoConfiguration. This method also applies
SdkLoggerProvider and SdkMeterProvider.
Additionally, the OpenTelemetry Resource is now a bean. Resource
attributes can now be configured through properties
The resourceAttributes in OtlpProperties have been deprecated in favor
of the new one in OpenTelemetryProperties.
Closes gh-36544
Closes gh-36545
The new ConnectionFactoryDecorator can be used to decorate the
ConnectionFactory built by the ConnectionFactoryBuilder.
The new R2dbcObservationAutoConfiguration configures a
ConnectionFactoryDecorator to attach a ObservationProxyExecutionListener
to ConnectionFactories. This enables Micrometer Observations for R2DBC
queries.
Closes gh-33768
OTel semantic conventions mandate certain resource attributes to present
on exported spans. This commits make sure that the attribute we add are
merged with the defaults, rather than replacing them.
See gh-36155
Micrometer added a new configuration option to its OTLP registry to
enable configuring the base time unit. These changes provide a
configuration property to support to it.
See gh-36393
This commit knowingly makes breaking API changes to
JerseyHealthEndpointAdditionalPathResourceFactory. We considered
other options but they all had the potential to be backwards
incompatible in one way or another. Faced with that situation we
concluded that the likelihood of anyone using the modified API
directly is small enough to warrant making the breaking changes.
If it becomes apparent that we have misjudged things we can revisit
the changes in the future.
Closes gh-36250
Add support for logging correlation IDs with Logback or Log4J2 whenever
Micrometer tracing is being used.
The `LoggingSystemProperties` class now accepts a defualt value resolver
which will be used whenever a value isn't in the environment. The
`AbstractLoggingSystem` provides a resolver that supports the
`logging.pattern.correlation` property and will return a value whenever
`LoggingSystem.EXPECT_CORRELATION_ID_PROPERTY` is set.
Using `LoggingSystem.EXPECT_CORRELATION_ID_PROPERTY` allows us to
provide a consistent width for the correlation ID, even when it's
missing from the MDC.
The exact correlation pattern returned will depend on the `LoggingSytem`
implementation. Currently Logback and Log4J2 are supported and both
make use of a custom converter which delegates to a new
`CorrelationIdFormatter` class.
Closes gh-33280
@ConditionalOnEnabledTracing is now applied to the minimal amount of
beans. The beans which are annotated with it are beans that will lead
to span sending to backends.
This leaves the majority of the Micrometer Tracing, Brave and
OpenTelemetry infrastructure untouched in tests.
Closes gh-35354
Most notably, this commit splits the tests that use Spring REST Docs
out into a separate task for which predictive test selection is
disabled. This allows it to be cached and use Gradle's built-in
up-to-date checking, thereby avoiding the generation of new snippets
and the need to then run the asciidoctor and asciidoctorPdf tasks.
It also updates spring-boot-smoke-test-junit-vintage to disable
predictive test selection so that we can continue to assert that
the some tests were executed.
See gh-35869
Setting 'management.observations.spring-security.enabled' installs an
ObservationPredicate, which prevents all observations starting with
'spring.security.' to be created.
Closes gh-34802
Update `ReporterConfiguration` so that `spanReporter` back off
if a `Reporter` bean is defined. Prior to this commit, only
`AsyncReporter` beans would be considered.
See gh-35455
Brave has a feature called joint spans that was enabled by default with
Spring Cloud Sleuth (and Boot 2.x). This has changed with
Micrometer Tracing and Boot 3.x. In order to make migration simpler,
joint spans should be set through a property.
This is a Brave+B3-only feature, W3C is not supported by Brave and
OTel does not have this capability.
See gh-35165
Update Tomcat, Jetty, Undertow and Netty servers so that an SslBundle
is used to apply SSL configuration. Existing `Ssl` properties are
internally adapted to an `SslBundle` using the `WebServerSslBundle`
class. Additionally, if `Ssl.getBundle()` returns a non-null value the
the `SslBundles` bean will be used to find a registered bundle by name.
See gh-34814
Update the auto-configuration gradle plugin so that the
configuration-properties plugin is not longer automatically applied.
This allows us to have auto-configuration modules that don't ship
configuration properties.
Closes gh-35028
Update Zipkin auto-configuration so that `ZipkinConnectionDetails`
beans may be optionally used to provide connection details.
See gh-34657
Co-Authored-By: Mortitz Halbritter <mkammerer@vmware.com>
Co-Authored-By: Phillip Webb <pwebb@vmware.com>
Add `management.wavefront.application.custom-tags` property which
populates custom tags in `ApplicationTags` created by
`WavefrontAutoConfiguration`.
See gh-34223
Signed-off-by: Tadaya Tsuyukubo <tadaya@ttddyy.net>
Micrometer Tracing comes with 3 generic interfaces, SpanExportingPredicate,
SpanReporter and SpanFilter, thanks to which you can decide whether you
want to export a span, how you want to report it and how to mutate it
regardless of which tracer library you are using.
Without this change usage of these 3 interfaces is not possible
for OpenTelemetry.
With this change we're putting all SpanExporters to the
CompositeSpanExporter and apply the exporters only after predicates,
filtering and reporting took place.
See gh-34002
Refine the recently introduced `EndpointRequest` matcher `toString()`
to use lower-case item names. Also applied the same logic to the
reactive variant.
See gh-33690
This commit declares an `@Order` for the `ServerHttpObservationFilter`
bean declaration in the Observation WebFlux auto-configuration.
This allows developers to consistently order other `WebFilter` instances
relatively to this one. Here, `@Order(Ordered.HIGHEST_PRECEDENCE + 1)`
has been chosen to align with the order of its MVC counterpart.
Fixes gh-33444
As of spring-projects/spring-graphql#547, Spring GraphQL introduced a
`PropagationWebGraphQlInterceptor` that propagates the incoming tracing
information in HTTP request headers into the GraphQL context.
This commit auto-configures the propagation interceptor if the
application exposes a GraphQL HTTP endpoint and if it is configured for
Tracing support.
Fixes gh-33542
Prior to this commit, the `ClientObservationConventionAdapter` would
fail with an `IllegalArgumentException` when the observation is first
started: at this point, the carrier (the request builder here) is
present, but the full request not yet fully built.
This commit ensures that the convention adapter uses the request and, if
not available, the request builder to adapt to the
`WebClientExchangeTagsProvider`.
Fixes gh-33483
Prior to this commit, we would advise developers, as migration path from
Spring Boot 2.0-x metrics, to create `GlobalObservationConvention` beans
for the observations they want to customize (observation name or key
values).
`GlobalObservationConvention` are currently applied **in addition** to
the chosen convention in some cases, so this does not work well with
this migration path.
Instead, instrumentations always provide a default convention but also a
way to configure a custom convention for their observations. Spring Boot
should inject custom convention beans in the relevant
auto-configurations.
Fixes gh-33285
Relocate `ApplicationTags` `@Bean` method from
`WavefrontTracingAutoConfiguration` to `WavefrontAutoConfiguration`
since it is now shared between tracing and metrics.
The `application-name`, `service-name`, `cluster-name` and `shard-name`
have also been relocated from `management.wavefront.tracing` to
`management.wavefront`.
Fixes gh-33244
Update `application-name` and `service-name` `management.wavefront`
properties to align with Spring Boot 2.x support. The properties now
use the wavefront terminology where `application` refers to an a
collection of (micro)`services`.
This commit also adds `cluster-name` and `shard-name` properties that
can be used to add additional items to the `ApplicationTags`.
See gh-32844
Update `ManagementContextFactory` implementations to create an
appropriate `Environment` type and to apply the `ConversionService`
from the parent context.
Prior to this commit, the management context `Environment` would not
be able to convert values from a `configtree:` source due to a missing
converter.
Fixes gh-32941
Returning a private class from a package-private method causes the
AOT-generated source files to fail to compile as the private class is
not visible.
Closes gh-33106
Update `MeterRegistryPostProcessor` to configure `MeterRegistry` beans
in two distinct sweeps. The first sweep applies customizers and filters
as the `MeterRegistry` bean is initialized, the second sweep applies
`MeterBinder` beans once all singletons have been instantiated.
Prior to this commit, it was not possible for a `MeterBinder` bean to
directly or indirectly use a `MeterRegistry`. It was also possible for
bound meters to cause a deadlock during refresh processing if those
meters could be updated on a thread other than main, such as GC
notifications.
Fixes gh-30636
Fixes gh-33070
Update types returned from endpoints to implement the
`OperationResponseBody` interface. This ensures that they will be
serialized using the isolated actuator `ObjectMapper`.
See gh-20291
Add `OperationResponseBody` tagging interface that can be used
to trigger the use of an isolated ObjectMapper specifically for
actuator responses.
The isolated mapper is provided by an `EndpointObjectMapper`
bean which is auto-configured unless specifically disabled
by the user.
WebMVC, WebFlux and Jersey integrations have been updated
to provide a link between the `OperationResponseBody` type
and the endpoint `ObjectMapper`.
See gh-20291