0

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.

  • What is the error you are running into? – Srikanth Chekuri Jan 15 '22 at 23:26
  • @dalalstreetboi3739 First of all thanks for your reply. Secondly here's the stack-tarce ``` Exception in thread "main" java.lang.NoSuchMethodError: io.opentelemetry.api.metrics.LongGaugeBuilder.buildWithCallback(Ljava/util/function/Consumer;)Lio/opentelemetry/api/metrics/ObservableLongGauge; at io.opentelemetry.sdk.trace.export.BatchSpanProcessor$Worker.(BatchSpanProcessor.java:187) at io.opentelemetry.sdk.trace.export.BatchSpanProcessor$Worker.(BatchSpanProcessor.java:140) at io.opentelemetry.sdk.trace.export.BatchSpanProcessor.(BatchSpanProcessor.java:80) – Amr Akmal Jan 16 '22 at 05:55
  • I am not really familiar with java but this looks like dependencies conflict. The span processor is instrumenting itself with metrics sdk and it seems like there is some breaking change. – Srikanth Chekuri Jan 16 '22 at 16:06

0 Answers0