Skip to content

Commit f17f6d6

Browse files
committed
Configure OTLP metric export in examples/metrics using autoconfigure
Modified the metrics example to export metrics via both the custom GoogleCloudMetricExporter (configured manually) and the OTLP exporter (configured via autoconfigure). Leveraged AutoConfiguredOpenTelemetrySdk to automatically configure the OTLP exporter and automatically inject GCP credentials using the opentelemetry-gcp-auth-extension. The existing code that configures GoogleCloudMetricExporter remains intact and is registered to the SDK via a MeterProvider customizer. TAG=agy CONV=f9409d85-cca6-4364-9198-2552404e15d8
1 parent 10a062b commit f17f6d6

2 files changed

Lines changed: 40 additions & 20 deletions

File tree

examples/metrics/build.gradle

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,33 @@ jib {
2929
containerizingMode = 'packaged'
3030
}
3131

32-
mainClassName = 'com.google.cloud.opentelemetry.example.metrics.MetricsExporterExample'
32+
def autoconf_config = [
33+
'-Dotel.exporter.otlp.endpoint=https://telemetry.googleapis.com',
34+
'-Dotel.resource.attributes=gcp.project_id=<YOUR_PROJECT_ID>',
35+
'-Dotel.metrics.exporter=otlp',
36+
'-Dotel.logs.exporter=none',
37+
'-Dotel.traces.exporter=none',
38+
'-Dotel.service.name=metrics-example',
39+
'-Dotel.exporter.otlp.protocol=http/protobuf',
40+
'-Dotel.java.global-autoconfigure.enabled=true',
41+
]
42+
43+
application {
44+
mainClassName = 'com.google.cloud.opentelemetry.example.metrics.MetricsExporterExample'
45+
applicationDefaultJvmArgs = autoconf_config
46+
}
3347

3448
description = 'Examples for Cloud Monitoring Exporter'
3549

3650
dependencies {
3751
implementation(libraries.opentelemetry_api)
38-
implementation(libraries.opentelemetry_sdk_metrics)
52+
implementation(libraries.opentelemetry_sdk)
53+
implementation(libraries.opentelemetry_sdk_autoconf)
3954
implementation(libraries.google_cloud_monitoring)
4055
implementation project(':exporter-metrics')
4156
implementation(libraries.opentelemetry_gcp_resources)
57+
implementation(libraries.opentelemetry_otlp_exporter)
58+
implementation(libraries.opentelemetry_gcp_auth_extension)
4259
// required by resource detection
4360
implementation(libraries.opentelemetry_autoconfigure_spi)
4461
// this helps in debugging as it outputs all export to std out

examples/metrics/src/main/java/com/google/cloud/opentelemetry/example/metrics/MetricsExporterExample.java

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -28,20 +28,20 @@
2828
import io.grpc.ManagedChannelBuilder;
2929
import io.opentelemetry.api.metrics.LongCounter;
3030
import io.opentelemetry.api.metrics.Meter;
31-
import io.opentelemetry.contrib.gcp.resource.GCPResourceProvider;
3231
import io.opentelemetry.exporter.logging.LoggingMetricExporter;
32+
import io.opentelemetry.sdk.OpenTelemetrySdk;
33+
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;
3334
import io.opentelemetry.sdk.common.CompletableResultCode;
3435
import io.opentelemetry.sdk.metrics.SdkMeterProvider;
3536
import io.opentelemetry.sdk.metrics.export.MetricExporter;
3637
import io.opentelemetry.sdk.metrics.export.PeriodicMetricReader;
37-
import io.opentelemetry.sdk.resources.Resource;
3838
import java.io.IOException;
3939
import java.time.Duration;
4040
import java.util.Random;
4141
import java.util.concurrent.TimeUnit;
4242

4343
public class MetricsExporterExample {
44-
private static SdkMeterProvider METER_PROVIDER;
44+
private static OpenTelemetrySdk OPEN_TELEMETRY_SDK;
4545

4646
private static Meter METER;
4747
private static final Random RANDOM = new Random();
@@ -81,25 +81,28 @@ private static MetricConfiguration generateMetricExporterConfig(boolean useDefau
8181
}
8282

8383
private static void setupMetricExporter(MetricConfiguration metricConfiguration) {
84-
GCPResourceProvider resourceProvider = new GCPResourceProvider();
8584
MetricExporter metricExporter =
8685
GoogleCloudMetricExporter.createWithConfiguration(metricConfiguration);
8786
MetricExporter metricDebugExporter = LoggingMetricExporter.create();
88-
METER_PROVIDER =
89-
SdkMeterProvider.builder()
90-
.setResource(Resource.create(resourceProvider.getAttributes()))
91-
.registerMetricReader(
92-
PeriodicMetricReader.builder(metricExporter)
93-
.setInterval(Duration.ofSeconds(30))
94-
.build())
95-
.registerMetricReader(
96-
PeriodicMetricReader.builder(metricDebugExporter)
97-
.setInterval(Duration.ofSeconds(30))
98-
.build())
99-
.build();
87+
88+
OPEN_TELEMETRY_SDK =
89+
AutoConfiguredOpenTelemetrySdk.builder()
90+
.addMeterProviderCustomizer(
91+
(meterProviderBuilder, configProperties) ->
92+
meterProviderBuilder
93+
.registerMetricReader(
94+
PeriodicMetricReader.builder(metricExporter)
95+
.setInterval(Duration.ofSeconds(30))
96+
.build())
97+
.registerMetricReader(
98+
PeriodicMetricReader.builder(metricDebugExporter)
99+
.setInterval(Duration.ofSeconds(30))
100+
.build()))
101+
.build()
102+
.getOpenTelemetrySdk();
100103

101104
METER =
102-
METER_PROVIDER
105+
OPEN_TELEMETRY_SDK
103106
.meterBuilder("instrumentation-library-name")
104107
.setInstrumentationVersion("semver:1.0.0")
105108
.build();
@@ -148,7 +151,7 @@ public static void main(String[] args) throws InterruptedException, IOException
148151
} finally {
149152
System.out.println("Shutting down the metrics-example application");
150153

151-
CompletableResultCode resultCode = METER_PROVIDER.shutdown();
154+
CompletableResultCode resultCode = OPEN_TELEMETRY_SDK.getSdkMeterProvider().shutdown();
152155
// Wait upto 60 seconds for job to complete
153156
resultCode.join(60, TimeUnit.SECONDS);
154157
if (resultCode.isSuccess()) {

0 commit comments

Comments
 (0)