0

Add dependency of opentelemetry jar in all the docker files Enable promethues for all spring microservices Enable/disable opentelemetry

I wanted to implement opentelemetry-javaagent dependency in my spring boot cloud project in every microservices. here they have used jar files and show the metrics on SigNoz but I wanted to use the dependency for opentelemetry.

The problem is I am getting dependency but they are not working. No metrics are being projected in the SigNoz dashboard.

  • Here is the maven repository link for opentelemetry : https://mvnrepository.com/search?q=opentelemetry+javaagent – Danish Ahmad ansari Apr 25 '22 at 08:51
  • Please provide enough code so others can better understand or reproduce the problem. – Community Apr 25 '22 at 11:19
  • This needs more detail. Do you want to use the java agent dependency directly, as in not as an agent, but as a dependency in your gradle/maven project? If that is the case, you can't do that. The otel agent is an agent, not a dependency in the regular sense. If you want some direct dependencies, I would check out the java library instrumentation, which is from the same repo as the java agent and documented there. – James Moessis Apr 26 '22 at 01:48
  • I would like to use direct dependencies instead of using java agent or I wanted you use docker image for opentelemetry. Dont; which one to use [link](https://hub.docker.com/search?q=opentelemetry)` – Danish Ahmad ansari May 04 '22 at 18:23

1 Answers1

0

If you don't want to use the agent, you may use the direct dependency in your application code.
https://mvnrepository.com/artifact/io.opentelemetry/opentelemetry-api.

<dependency>
    <groupId>io.opentelemetry</groupId>
    <artifactId>opentelemetry-api</artifactId>
</dependency>

And configure the SDK -

Resource resource = Resource.getDefault()
  .merge(Resource.create(Attributes.of(ResourceAttributes.SERVICE_NAME, "logical-service-name")));

SdkTracerProvider sdkTracerProvider = SdkTracerProvider.builder()
  .addSpanProcessor(BatchSpanProcessor.builder(OtlpGrpcSpanExporter.builder().build()).build())
  .setResource(resource)
  .build();

SdkMeterProvider sdkMeterProvider = SdkMeterProvider.builder()
  .registerMetricReader(PeriodicMetricReader.builder(OtlpGrpcMetricExporter.builder().build()).build())
  .setResource(resource)
  .build();

OpenTelemetry openTelemetry = OpenTelemetrySdk.builder()
  .setTracerProvider(sdkTracerProvider)
  .setMeterProvider(sdkMeterProvider)
  .setPropagators(ContextPropagators.create(W3CTraceContextPropagator.getInstance()))
  .buildAndRegisterGlobal();

Then acquire an instance of the tracer -

import io.opentelemetry.api;

//...

Tracer tracer =
    openTelemetry.getTracer("instrumentation-library-name", "1.0.0");

And create spans -

Span span = tracer.spanBuilder("my span").startSpan();

// Make the span the current span
try (Scope ss = span.makeCurrent()) {
  // In this scope, the span is the current/active span
} finally {
    span.end();
}

Taken from here -
https://opentelemetry.io/docs/instrumentation/java/manual/

Jeremy
  • 2,970
  • 1
  • 26
  • 50