Add 'logging' as new metric export type
Signed-off-by: Vasily Pelikh <2010720+vasilypelikh@users.noreply.github.com>
This commit is contained in:
parent
33038d3e1e
commit
4a5d42e560
|
|
@ -0,0 +1,63 @@
|
|||
/*
|
||||
* Copyright 2012-present the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.micrometer.metrics.autoconfigure.export.logging;
|
||||
|
||||
import io.micrometer.core.instrument.Clock;
|
||||
import io.micrometer.core.instrument.logging.LoggingMeterRegistry;
|
||||
import io.micrometer.core.instrument.logging.LoggingRegistryConfig;
|
||||
|
||||
import org.springframework.boot.autoconfigure.AutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.boot.micrometer.metrics.autoconfigure.CompositeMeterRegistryAutoConfiguration;
|
||||
import org.springframework.boot.micrometer.metrics.autoconfigure.MetricsAutoConfiguration;
|
||||
import org.springframework.boot.micrometer.metrics.autoconfigure.export.ConditionalOnEnabledMetricsExport;
|
||||
import org.springframework.boot.micrometer.metrics.autoconfigure.export.simple.SimpleMetricsExportAutoConfiguration;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
|
||||
/**
|
||||
* {@link EnableAutoConfiguration Auto-configuration} for exporting metrics to a
|
||||
* {@link LoggingMeterRegistry}.
|
||||
*
|
||||
* @author Vasily Pelikh
|
||||
* @since 4.0.0
|
||||
*/
|
||||
@AutoConfiguration(
|
||||
before = { CompositeMeterRegistryAutoConfiguration.class, SimpleMetricsExportAutoConfiguration.class },
|
||||
after = MetricsAutoConfiguration.class)
|
||||
@ConditionalOnBean(Clock.class)
|
||||
@ConditionalOnClass(LoggingMeterRegistry.class)
|
||||
@ConditionalOnEnabledMetricsExport("logging")
|
||||
@EnableConfigurationProperties(LoggingMetricsExportProperties.class)
|
||||
public final class LoggingMetricsExportAutoConfiguration {
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
LoggingRegistryConfig loggingRegistryConfig(LoggingMetricsExportProperties loggingMetricsExportProperties) {
|
||||
return new LoggingMetricsExportPropertiesConfigAdapter(loggingMetricsExportProperties);
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
LoggingMeterRegistry loggingMeterRegistry(LoggingRegistryConfig config, Clock clock) {
|
||||
return new LoggingMeterRegistry(config, clock);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
/*
|
||||
* Copyright 2012-present the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.micrometer.metrics.autoconfigure.export.logging;
|
||||
|
||||
import io.micrometer.core.instrument.logging.LoggingMeterRegistry;
|
||||
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.boot.micrometer.metrics.autoconfigure.export.properties.StepRegistryProperties;
|
||||
|
||||
/**
|
||||
* {@link ConfigurationProperties @ConfigurationProperties} for configuring metrics export
|
||||
* to a {@link LoggingMeterRegistry}.
|
||||
*
|
||||
* @author Vasily Pelikh
|
||||
* @since 4.0.0
|
||||
*/
|
||||
@ConfigurationProperties("management.logging.metrics.export")
|
||||
public class LoggingMetricsExportProperties extends StepRegistryProperties {
|
||||
|
||||
/**
|
||||
* Whether counters and timers that have no activity in an interval are still logged.
|
||||
*/
|
||||
private boolean logInactive = false;
|
||||
|
||||
public boolean isLogInactive() {
|
||||
return this.logInactive;
|
||||
}
|
||||
|
||||
public void setLogInactive(boolean logInactive) {
|
||||
this.logInactive = logInactive;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
/*
|
||||
* Copyright 2012-present the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.micrometer.metrics.autoconfigure.export.logging;
|
||||
|
||||
import io.micrometer.core.instrument.logging.LoggingRegistryConfig;
|
||||
|
||||
import org.springframework.boot.micrometer.metrics.autoconfigure.export.properties.StepRegistryPropertiesConfigAdapter;
|
||||
|
||||
/**
|
||||
* Adapter to convert {@link LoggingMetricsExportProperties} to a
|
||||
* {@link LoggingRegistryConfig}.
|
||||
*
|
||||
* @author Vasily Pelikh
|
||||
* @since 4.0.0
|
||||
*/
|
||||
public class LoggingMetricsExportPropertiesConfigAdapter
|
||||
extends StepRegistryPropertiesConfigAdapter<LoggingMetricsExportProperties> implements LoggingRegistryConfig {
|
||||
|
||||
public LoggingMetricsExportPropertiesConfigAdapter(LoggingMetricsExportProperties properties) {
|
||||
super(properties);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String prefix() {
|
||||
return "management.logging.metrics.export";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean logInactive() {
|
||||
return obtain(LoggingMetricsExportProperties::isLogInactive, LoggingRegistryConfig.super::logInactive);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
/*
|
||||
* Copyright 2012-present the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Support for exporting actuator metrics to a log.
|
||||
*/
|
||||
@NullMarked
|
||||
package org.springframework.boot.micrometer.metrics.autoconfigure.export.logging;
|
||||
|
||||
import org.jspecify.annotations.NullMarked;
|
||||
|
|
@ -13,6 +13,7 @@ org.springframework.boot.micrometer.metrics.autoconfigure.export.humio.HumioMetr
|
|||
org.springframework.boot.micrometer.metrics.autoconfigure.export.influx.InfluxMetricsExportAutoConfiguration
|
||||
org.springframework.boot.micrometer.metrics.autoconfigure.export.jmx.JmxMetricsExportAutoConfiguration
|
||||
org.springframework.boot.micrometer.metrics.autoconfigure.export.kairos.KairosMetricsExportAutoConfiguration
|
||||
org.springframework.boot.micrometer.metrics.autoconfigure.export.logging.LoggingMetricsExportAutoConfiguration
|
||||
org.springframework.boot.micrometer.metrics.autoconfigure.export.newrelic.NewRelicMetricsExportAutoConfiguration
|
||||
org.springframework.boot.micrometer.metrics.autoconfigure.export.otlp.OtlpMetricsExportAutoConfiguration
|
||||
org.springframework.boot.micrometer.metrics.autoconfigure.export.prometheus.PrometheusMetricsExportAutoConfiguration
|
||||
|
|
|
|||
|
|
@ -0,0 +1,118 @@
|
|||
/*
|
||||
* Copyright 2012-present the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.micrometer.metrics.autoconfigure.export.logging;
|
||||
|
||||
import io.micrometer.core.instrument.Clock;
|
||||
import io.micrometer.core.instrument.logging.LoggingMeterRegistry;
|
||||
import io.micrometer.core.instrument.logging.LoggingRegistryConfig;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.boot.autoconfigure.AutoConfigurations;
|
||||
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Import;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Tests for {@link LoggingMetricsExportAutoConfiguration}.
|
||||
*
|
||||
* @author Vasily Pelikh
|
||||
*/
|
||||
class LoggingMetricsExportAutoConfigurationTests {
|
||||
|
||||
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
|
||||
.withConfiguration(AutoConfigurations.of(LoggingMetricsExportAutoConfiguration.class));
|
||||
|
||||
@Test
|
||||
void backsOffWithoutAClock() {
|
||||
this.contextRunner.run((context) -> assertThat(context).doesNotHaveBean(LoggingMeterRegistry.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
void autoConfiguresConfigAndMeterRegistry() {
|
||||
this.contextRunner.withUserConfiguration(BaseConfiguration.class)
|
||||
.run((context) -> assertThat(context).hasSingleBean(LoggingMeterRegistry.class)
|
||||
.hasSingleBean(LoggingRegistryConfig.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
void autoConfigurationCanBeDisabledWithDefaultsEnabledProperty() {
|
||||
this.contextRunner.withUserConfiguration(BaseConfiguration.class)
|
||||
.withPropertyValues("management.defaults.metrics.export.enabled=false")
|
||||
.run((context) -> assertThat(context).doesNotHaveBean(LoggingMeterRegistry.class)
|
||||
.doesNotHaveBean(LoggingRegistryConfig.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
void autoConfigurationCanBeDisabledWithSpecificEnabledProperty() {
|
||||
this.contextRunner.withUserConfiguration(BaseConfiguration.class)
|
||||
.withPropertyValues("management.logging.metrics.export.enabled=false")
|
||||
.run((context) -> assertThat(context).doesNotHaveBean(LoggingMeterRegistry.class)
|
||||
.doesNotHaveBean(LoggingRegistryConfig.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
void allowsCustomConfigToBeUsed() {
|
||||
this.contextRunner.withUserConfiguration(CustomConfigConfiguration.class)
|
||||
.run((context) -> assertThat(context).hasSingleBean(LoggingMeterRegistry.class)
|
||||
.hasSingleBean(LoggingRegistryConfig.class)
|
||||
.hasBean("customConfig"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void allowsRegistryToBeCustomized() {
|
||||
this.contextRunner.withUserConfiguration(CustomRegistryConfiguration.class)
|
||||
.run((context) -> assertThat(context).hasSingleBean(LoggingMeterRegistry.class)
|
||||
.hasSingleBean(LoggingRegistryConfig.class)
|
||||
.hasBean("customRegistry"));
|
||||
}
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
static class BaseConfiguration {
|
||||
|
||||
@Bean
|
||||
Clock customClock() {
|
||||
return Clock.SYSTEM;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@Import(BaseConfiguration.class)
|
||||
static class CustomConfigConfiguration {
|
||||
|
||||
@Bean
|
||||
LoggingRegistryConfig customConfig() {
|
||||
return (key) -> null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@Import(BaseConfiguration.class)
|
||||
static class CustomRegistryConfiguration {
|
||||
|
||||
@Bean
|
||||
LoggingMeterRegistry customRegistry(LoggingRegistryConfig config, Clock clock) {
|
||||
return new LoggingMeterRegistry(config, clock);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
/*
|
||||
* Copyright 2012-present the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.micrometer.metrics.autoconfigure.export.logging;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Tests for {@link LoggingMetricsExportPropertiesConfigAdapter}.
|
||||
*
|
||||
* @author Vasily Pelikh
|
||||
*/
|
||||
class LoggingMetricsExportPropertiesConfigAdapterTests {
|
||||
|
||||
private LoggingMetricsExportProperties properties;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
this.properties = new LoggingMetricsExportProperties();
|
||||
}
|
||||
|
||||
@Test
|
||||
void whenPropertiesAggregationTemporalityIsNotSetAdapterAggregationTemporalityReturnsCumulative() {
|
||||
assertThat(createAdapter().logInactive()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
void whenPropertiesAggregationTemporalityIsSetAdapterAggregationTemporalityReturnsIt() {
|
||||
this.properties.setLogInactive(true);
|
||||
assertThat(createAdapter().logInactive()).isTrue();
|
||||
}
|
||||
|
||||
private LoggingMetricsExportPropertiesConfigAdapter createAdapter() {
|
||||
return new LoggingMetricsExportPropertiesConfigAdapter(this.properties);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
/*
|
||||
* Copyright 2012-present the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.micrometer.metrics.autoconfigure.export.logging;
|
||||
|
||||
import io.micrometer.core.instrument.logging.LoggingRegistryConfig;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.boot.micrometer.metrics.autoconfigure.export.properties.StepRegistryPropertiesTests;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Tests for {@link LoggingMetricsExportProperties}.
|
||||
*
|
||||
* @author Vasily Pelikh
|
||||
*/
|
||||
class LoggingMetricsExportPropertiesTests extends StepRegistryPropertiesTests {
|
||||
|
||||
@Test
|
||||
void defaultValuesAreConsistent() {
|
||||
LoggingMetricsExportProperties properties = new LoggingMetricsExportProperties();
|
||||
LoggingRegistryConfig config = LoggingRegistryConfig.DEFAULT;
|
||||
assertStepRegistryDefaultValues(properties, config);
|
||||
assertThat(properties.isLogInactive()).isSameAs(config.logInactive());
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue