2 years ago
#55339
Amr Akmal
How to export array/list of measurements using openTelemetry in Java
I have an array of metrics, some measurements related to my project written in Java 8. I want to export it using openTelemetry to google to be able to get some statistical information about it. I'm using openTelemetry for instrumentation not for tracing.
This's the code I've so far, it gives error when I start running the main method:
package MyPack;
import com.google.cloud.opentelemetry.trace.TraceConfiguration;
import com.google.cloud.opentelemetry.trace.TraceExporter;
import com.sun.glass.ui.Application;
import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.api.OpenTelemetry;
import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.metrics.BoundLongCounter;
import io.opentelemetry.api.metrics.GlobalMeterProvider;
import io.opentelemetry.api.metrics.LongCounter;
import io.opentelemetry.api.metrics.Meter;
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.api.metrics.MeterProvider;
import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;
import io.opentelemetry.context.Scope;
import io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.exporter.logging.LoggingSpanExporter;
import io.opentelemetry.exporter.otlp.trace.OtlpGrpcSpanExporter;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.metrics.export.MetricExporter;
import io.opentelemetry.sdk.trace.SdkTracerProvider;
import io.opentelemetry.sdk.trace.export.BatchSpanProcessor;
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
import java.io.IOException;
import java.lang.*;
import java.util.Random;
public class MetricsExporterExample {
public static void main(String[] args) throws InterruptedException, IOException {
TraceExporter traceExporter = TraceExporter.createWithDefaultConfiguration();
OpenTelemetrySdk.builder()
.setTracerProvider(
SdkTracerProvider.builder()
.addSpanProcessor(BatchSpanProcessor.builder(traceExporter).build())
.build())
.buildAndRegisterGlobal();
final Tracer TRACER =
GlobalOpenTelemetry.getTracerProvider().get(Application.class.getName());
final Meter METER = GlobalMeterProvider.get().get(Application.class.getName());
final LongCounter MY_COUNTER =
METER.counterBuilder("my-custom-counter").setDescription("A counter to count things").build();
BoundLongCounter someWorkCounter = MY_COUNTER.bind(Attributes.of(AttributeKey.stringKey("Key"), "someWork"));
someWorkCounter.add(123);
MY_COUNTER.add(123, Attributes.of(AttributeKey.stringKey("Key"), "someWork"));
Span span = TRACER.spanBuilder("ping").startSpan();
int sleepTime = new Random().nextInt(200);
Thread.sleep(sleepTime);
MY_COUNTER.add(sleepTime, Attributes.of(AttributeKey.stringKey("method"), "ping"));
System.out.println("-------");
System.out.println(MY_COUNTER);
System.out.println("-------");
System.out.println(someWorkCounter.toString());
System.out.println("-------");
span.end();
}
There's a problem in this line
addSpanProcessor(BatchSpanProcessor.builder(traceExporter).build())
By investigating more and seeing the stack-trace, I found this error in openTelemetry class itself: BatchSpanProcessor.java Class
Here's my build.gradle file for dependencies that I use
plugins {
id 'java-library'
}
repositories {
mavenCentral()
google()
}
dependencies {
implementation(group: 'io.opentelemetry.instrumentation', name: 'opentelemetry-instrumentation-api', version: '1.9.2-alpha')
api 'io.opentelemetry:opentelemetry-api:1.10.0'
implementation (group: 'io.opentelemetry', name: 'opentelemetry-api-metrics', version: '1.9.1-alpha')
api 'io.opentelemetry:opentelemetry-api-metrics'
implementation group: 'io.opentelemetry', name: 'opentelemetry-api', version: '1.10.0'
api 'io.opentelemetry:opentelemetry-sdk:1.10.0'
api 'io.opentelemetry:opentelemetry-sdk-metrics:0.12.0'
api 'io.opentelemetry:opentelemetry-exporter-logging:1.10.0'
api 'io.opentelemetry:opentelemetry-exporter-otlp:1.9.1'
implementation group: 'io.opentelemetry', name: 'opentelemetry-exporter-otlp-metrics', version: '1.10.0-alpha'
implementation group: 'io.opentelemetry', name: 'opentelemetry-exporter-otlp-logs', version: '1.10.0-alpha'
api 'io.opentelemetry:opentelemetry-exporter-otlp-logs'
implementation group: 'io.opentelemetry', name: 'opentelemetry-sdk-metrics', version: '1.9.1-alpha'
implementation group: 'io.opentelemetry', name: 'opentelemetry-sdk-common', version: '1.10.0'
implementation group: 'io.opentelemetry', name: 'opentelemetry-sdk-extension-autoconfigure', version: '1.9.1-alpha'
implementation 'com.google.cloud.opentelemetry:exporter-trace:0.19.0'
}
I've read the docs and read some code examples but they are not clear at all. I've been trying for so long to just export it but I don't know how. Any help on how to be able to export the list I have using openTelemetry for instrumentation?
Thanks in advance.
java
java-8
instrumentation
open-telemetry
0 Answers
Your Answer