0

i'm implementing tracings in a node (NestJS) application and i'm using opentelemetry and jaeger as my tracing stack. I'm trying to export my application tracing to jaeger "monitor" page. Already configured otel-collector, jaeger, but i still can not see metrics in this "monitor" page.

Here is my tracing code:

import * as process from 'process';
import * as opentelemetry from '@opentelemetry/sdk-node';

import { Resource } from '@opentelemetry/resources';
import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node';
import { SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base';
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
import { JaegerExporter } from '@opentelemetry/exporter-jaeger';

export const initTracing = async (): Promise<void> => {
  const oltpExporter = new OTLPTraceExporter({
    url: 'http://localhost:4317',
  });

  const jaegerExporter = new JaegerExporter({
    endpoint: 'http://jaeger:14268/api/traces',
    maxPacketSize: 65000,
  });

  const openTelemetrySDK = new opentelemetry.NodeSDK({
    resource: new Resource({
      [SemanticResourceAttributes.SERVICE_NAME]: 'nestjs-jaeger-example',
    }),
    instrumentations: [
      getNodeAutoInstrumentations({
        '@opentelemetry/instrumentation-fs': { enabled: false },
      }),
    ],
    spanProcessor: new SimpleSpanProcessor(jaegerExporter),
    traceExporter: oltpExporter,
    autoDetectResources: true,
  });

  try {
    await openTelemetrySDK.start();
    console.log('Tracing initialized');
  } catch (error) {
    console.log('Error initializing tracing', error);
  }

  process.on('SIGTERM', () => {
    openTelemetrySDK
      .shutdown()
      .then(() => console.log('Tracing terminated'))
      .catch((error) => console.log('Error terminating tracing', error))
      .finally(() => process.exit(0));
  });
};

Jaeger monitor page

I believe this problem is not a configuration problem because i tested the example application that Jaeger's github shows in python and it worked!

Here is the python code that worked:

#!/usr/bin/env python3

from opentelemetry import trace
from opentelemetry.trace import SpanKind
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.sdk.resources import Resource

resource = Resource(attributes={
    "service.name": "my_service"
})

trace.set_tracer_provider(TracerProvider(resource=resource))

otlp_exporter = OTLPSpanExporter(endpoint="http://localhost:4317", insecure=True)


trace.get_tracer_provider().add_span_processor(
    BatchSpanProcessor(otlp_exporter)
)

tracer = trace.get_tracer(__name__)

with tracer.start_as_current_span("foo", kind=SpanKind.SERVER):
    with tracer.start_as_current_span("bar", kind=SpanKind.SERVER):
        with tracer.start_as_current_span("baz", kind=SpanKind.SERVER):
            print("Hello world from OpenTelemetry Python!")

Jaeger monitor page with working example data

0 Answers0