2 years ago

#55339

test-img

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

Accepted video resources