enable auto-configuring the logging metrics exporter (#2580)

* enable auto-configuring the logging metrics exporter

* fix the class name for the metrics exporter

* extract a method for configuring the IMR
This commit is contained in:
John Watson 2021-01-26 12:53:12 -08:00 committed by GitHub
parent 2ba472d0e5
commit 90574a3134
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 2 deletions

View File

@ -5,12 +5,14 @@
package io.opentelemetry.sdk.autoconfigure; package io.opentelemetry.sdk.autoconfigure;
import io.opentelemetry.exporter.logging.LoggingMetricExporter;
import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporter; import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporter;
import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporterBuilder; import io.opentelemetry.exporter.otlp.metrics.OtlpGrpcMetricExporterBuilder;
import io.opentelemetry.exporter.prometheus.PrometheusCollector; import io.opentelemetry.exporter.prometheus.PrometheusCollector;
import io.opentelemetry.sdk.metrics.SdkMeterProvider; import io.opentelemetry.sdk.metrics.SdkMeterProvider;
import io.opentelemetry.sdk.metrics.export.IntervalMetricReader; import io.opentelemetry.sdk.metrics.export.IntervalMetricReader;
import io.opentelemetry.sdk.metrics.export.IntervalMetricReaderBuilder; import io.opentelemetry.sdk.metrics.export.IntervalMetricReaderBuilder;
import io.opentelemetry.sdk.metrics.export.MetricExporter;
import io.prometheus.client.exporter.HTTPServer; import io.prometheus.client.exporter.HTTPServer;
import java.io.IOException; import java.io.IOException;
import java.time.Duration; import java.time.Duration;
@ -28,11 +30,24 @@ final class MetricExporterConfiguration {
case "prometheus": case "prometheus":
configurePrometheusMetrics(config, meterProvider); configurePrometheusMetrics(config, meterProvider);
return; return;
case "logging":
ClasspathUtil.checkClassExists(
"io.opentelemetry.exporter.logging.LoggingMetricExporter",
"Logging Metrics Exporter",
"opentelemetry-exporter-logging");
configureLoggingMetrics(config, meterProvider);
return;
default: default:
return; return;
} }
} }
private static void configureLoggingMetrics(
ConfigProperties config, SdkMeterProvider meterProvider) {
MetricExporter exporter = new LoggingMetricExporter();
configureIntervalMetricReader(config, meterProvider, exporter);
}
// Visible for testing // Visible for testing
static OtlpGrpcMetricExporter configureOtlpMetrics( static OtlpGrpcMetricExporter configureOtlpMetrics(
ConfigProperties config, SdkMeterProvider meterProvider) { ConfigProperties config, SdkMeterProvider meterProvider) {
@ -56,6 +71,13 @@ final class MetricExporterConfiguration {
OtlpGrpcMetricExporter exporter = builder.build(); OtlpGrpcMetricExporter exporter = builder.build();
configureIntervalMetricReader(config, meterProvider, exporter);
return exporter;
}
private static void configureIntervalMetricReader(
ConfigProperties config, SdkMeterProvider meterProvider, MetricExporter exporter) {
IntervalMetricReaderBuilder readerBuilder = IntervalMetricReaderBuilder readerBuilder =
IntervalMetricReader.builder() IntervalMetricReader.builder()
.setMetricProducers(Collections.singleton(meterProvider)) .setMetricProducers(Collections.singleton(meterProvider))
@ -66,8 +88,6 @@ final class MetricExporterConfiguration {
} }
IntervalMetricReader reader = readerBuilder.build(); IntervalMetricReader reader = readerBuilder.build();
Runtime.getRuntime().addShutdownHook(new Thread(reader::shutdown)); Runtime.getRuntime().addShutdownHook(new Thread(reader::shutdown));
return exporter;
} }
private static void configurePrometheusMetrics( private static void configurePrometheusMetrics(

View File

@ -51,6 +51,18 @@ class NotOnClasspathTest {
+ "classpath"); + "classpath");
} }
@Test
void logging_metrics() {
assertThatThrownBy(
() ->
MetricExporterConfiguration.configureExporter(
"logging", EMPTY, SdkMeterProvider.builder().build()))
.isInstanceOf(ConfigurationException.class)
.hasMessageContaining(
"Logging Metrics Exporter enabled but opentelemetry-exporter-logging not found on "
+ "classpath");
}
@Test @Test
void otlpMetrics() { void otlpMetrics() {
assertThatThrownBy( assertThatThrownBy(