Skip to content

Commit a776d91

Browse files
authored
Fix metrics exporter integration (GoogleCloudPlatform#207)
* Fix metrics exporter example * Add metrics-exporter example with OpenTelemetrySdk usage * Update GoogleCloudMetricExporter to return generic types * Implement deferred initialization of metrics exporter * Update examples to use the deferred exporters * Lazy loads default project ID initialization * Fix failing tests MetricConfigurationTest had a test that directly invoked a static method, the state of which is preserved b/w test classes, this lead to an intermittent failure in one of the tests run in GoogleCloudMetricConfigurationTest, which made some assumptions about the state affected by the invocation of the said method. * Update documentation * Add readme for metrics exporter example * Make NoopMetricExport return the same AggregationTemporality as GoogleCloudMetricExporter * Undo accidental dependency version downgrade * Fix documentation errors * Remove the additional example
1 parent 51a0d39 commit a776d91

File tree

12 files changed

+584
-293
lines changed

12 files changed

+584
-293
lines changed

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

+17-21
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919
import io.opentelemetry.api.metrics.LongCounter;
2020
import io.opentelemetry.api.metrics.Meter;
2121
import io.opentelemetry.sdk.metrics.SdkMeterProvider;
22+
import io.opentelemetry.sdk.metrics.export.MetricExporter;
2223
import io.opentelemetry.sdk.metrics.export.PeriodicMetricReader;
23-
import java.io.IOException;
2424
import java.util.Random;
2525

2626
public class MetricsExporterExample {
@@ -30,25 +30,20 @@ public class MetricsExporterExample {
3030
private static final Random RANDOM = new Random();
3131

3232
private static void setupMetricExporter() {
33-
try {
34-
GoogleCloudMetricExporter metricExporter =
35-
GoogleCloudMetricExporter.createWithDefaultConfiguration();
36-
METER_PROVIDER =
37-
SdkMeterProvider.builder()
38-
.registerMetricReader(
39-
PeriodicMetricReader.builder(metricExporter)
40-
.setInterval(java.time.Duration.ofSeconds(30))
41-
.build())
42-
.build();
33+
MetricExporter metricExporter = GoogleCloudMetricExporter.createWithDefaultConfiguration();
34+
METER_PROVIDER =
35+
SdkMeterProvider.builder()
36+
.registerMetricReader(
37+
PeriodicMetricReader.builder(metricExporter)
38+
.setInterval(java.time.Duration.ofSeconds(30))
39+
.build())
40+
.build();
4341

44-
METER =
45-
METER_PROVIDER
46-
.meterBuilder("instrumentation-library-name")
47-
.setInstrumentationVersion("semver:1.0.0")
48-
.build();
49-
} catch (IOException e) {
50-
throw new RuntimeException(e);
51-
}
42+
METER =
43+
METER_PROVIDER
44+
.meterBuilder("instrumentation-library-name")
45+
.setInstrumentationVersion("semver:1.0.0")
46+
.build();
5247
}
5348

5449
private static void myUseCase() {
@@ -72,15 +67,16 @@ private static void doWork(LongCounter counter) {
7267
}
7368
}
7469

70+
// to run this from command line, execute `gradle run`
7571
public static void main(String[] args) throws InterruptedException {
7672
System.out.println("Starting the metrics-example application");
7773
setupMetricExporter();
7874
try {
7975
int i = 0;
80-
while (true) {
76+
while (i < 2) {
8177
System.out.println("Running example use case: #" + i);
8278
myUseCase();
83-
Thread.sleep(10000);
79+
Thread.sleep(5000);
8480
i++;
8581
}
8682
} finally {

exporters/auto/src/main/java/com/google/cloud/opentelemetry/auto/GoogleCloudMetricExporterFactory.java

+3-7
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,13 @@
1919
import com.google.cloud.opentelemetry.metric.GoogleCloudMetricExporter;
2020
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
2121
import io.opentelemetry.sdk.autoconfigure.spi.metrics.ConfigurableMetricExporterProvider;
22-
import java.io.IOException;
22+
import io.opentelemetry.sdk.metrics.export.MetricExporter;
2323

2424
@AutoService(ConfigurableMetricExporterProvider.class)
2525
public class GoogleCloudMetricExporterFactory implements ConfigurableMetricExporterProvider {
2626
@Override
27-
public GoogleCloudMetricExporter createExporter(ConfigProperties config) {
28-
try {
29-
return GoogleCloudMetricExporter.createWithDefaultConfiguration();
30-
} catch (IOException ex) {
31-
throw new RuntimeException(ex);
32-
}
27+
public MetricExporter createExporter(ConfigProperties config) {
28+
return GoogleCloudMetricExporter.createWithDefaultConfiguration();
3329
}
3430

3531
@Override

exporters/metrics/build.gradle

+4-2
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,17 @@ description = 'Cloud Monitoring Exporter for OpenTelemetry'
1818
dependencies {
1919
api(libraries.auto_value_annotations)
2020
api(libraries.slf4j)
21-
annotationProcessor(libraries.auto_value)
2221
api(libraries.opentelemetry_api)
23-
api(libraries.opentelemetry_sdk_metrics)
2422
api(libraries.google_cloud_core)
2523
api(libraries.google_cloud_monitoring)
24+
api(libraries.opentelemetry_sdk_metrics)
25+
annotationProcessor(libraries.auto_value)
2626
implementation(project(':shared-resourcemapping'))
2727
testImplementation(libraries.opentelemetry_semconv)
2828
testImplementation(testLibraries.junit)
2929
testImplementation(testLibraries.mockito)
3030
testImplementation(testLibraries.slf4j_simple)
3131
testImplementation(testLibraries.test_containers)
32+
testImplementation(testLibraries.opentelemetry_sdk_testing)
33+
testImplementation(testLibraries.opencensus_shim)
3234
}

exporters/metrics/src/main/java/com/google/cloud/opentelemetry/metric/AggregateByLabelMetricTimeSeriesBuilder.java

-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import static com.google.cloud.opentelemetry.metric.ResourceTranslator.mapResource;
2323

2424
import com.google.api.MetricDescriptor;
25-
import com.google.cloud.opentelemetry.metric.GoogleCloudMetricExporter.MetricWithLabels;
2625
import com.google.monitoring.v3.TimeSeries;
2726
import com.google.monitoring.v3.TypedValue;
2827
import io.opentelemetry.api.common.Attributes;

0 commit comments

Comments
 (0)