Как отправить данные трассировки в Jaeger через OpenTelemetry во внешнем приложении?

Задний план

Я пытаюсь выполнить трассировку во внешнем приложении.

Я не в состоянии использовать @opentelemetry/ экспортер-егерь, так как я считаю, что это только для Node.js обратно конечного приложения.

Итак, я пытаюсь использовать https://github.com/open-telemetry/opentelemetry-collector.

1. Успешно распечатать в консоли браузера.

Сначала я попытался распечатать данные трассировки в консоли браузера. И приведенный ниже код успешно распечатывает данные трассировки.

import { CollectorTraceExporter } from '@opentelemetry/exporter-collector';
import { DocumentLoad } from '@opentelemetry/plugin-document-load';
import { SimpleSpanProcessor, ConsoleSpanExporter } from '@opentelemetry/tracing';
import { WebTracerProvider } from '@opentelemetry/web';

const provider = new WebTracerProvider({ plugins: [new DocumentLoad()] });
provider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));
provider.register();

2. Не удалось переслать Jaeger

Теперь я хочу переслать их Джагеру.

Я использую Jaeger all-in-one от

docker run -d --name jaeger \
  -e COLLECTOR_ZIPKIN_HTTP_PORT=9411 \
  -p 5775:5775/udp \
  -p 6831:6831/udp \
  -p 6832:6832/udp \
  -p 5778:5778 \
  -p 16686:16686 \
  -p 14268:14268 \
  -p 9411:9411 \
  jaegertracing/all-in-one:1.18

Основываясь на документе порта Jaeger, я мог бы использовать эти два порта (если другие порты работают, это тоже будет здорово!):

14250   HTTP    collector   accept model.proto
9411    HTTP    collector   Zipkin compatible endpoint (optional)

Затем я нашел дополнительную информацию об этом порте:

Zipkin Formats (стабильный)

Jaeger Collector также может принимать интервалы в нескольких форматах данных Zipkin, а именно JSON v1/v2 и Thrift. Сборщик должен быть настроен для включения HTTP-сервера Zipkin, например, на порту 9411, используемом сборщиками Zipkin. Сервер включает две конечные точки, которые ожидают POST-запросы:

/api/v1/spans for submitting spans in Zipkin JSON v1 or Zipkin Thrift format.
/api/v2/spans for submitting spans in Zipkin JSON v2.

Я обновил свои коды на

import { CollectorTraceExporter, CollectorProtocolNode } from '@opentelemetry/exporter-collector';
import { DocumentLoad } from '@opentelemetry/plugin-document-load';
import { SimpleSpanProcessor } from '@opentelemetry/tracing';
import { WebTracerProvider } from '@opentelemetry/web';

const provider = new WebTracerProvider({ plugins: [new DocumentLoad()] });

// The config below currently has issue
const exporter = new CollectorTraceExporter({
    serviceName: 'my-service',
    protocolNode: CollectorProtocolNode.HTTP_JSON,
    url: 'http://localhost:9411/api/v1/spans', // Also tried v2
});

provider.addSpanProcessor(new SimpleSpanProcessor(exporter));
provider.register();

Однако я получил неверный запрос для конечных точек v1 и v2 без возврата тела ответа

POST http://localhost:9411/api/v1/spans 400 (неверный запрос)

POST http: // localhost:9411 / api / v2 / spans 400 (неверный запрос)

Есть идеи, как исправить формат запроса? Благодарность

ОБНОВЛЕНИЕ (19.08.2020)

Я думаю, Эндрю прав, что я должен использовать коллектор OpenTelemetry. Мне также помогли Валентин Маршо и Дениз Гуркайнак из Gitter. Просто добавьте ссылку здесь для других людей, которые сталкиваются с той же проблемой: https://gitter.im/open-telemetry/opentelemetry-node?at=5f3aa9481226fc21335ce61a

Мое окончательное рабочее решение размещено на /questions/54089794/kak-pravilno-ispolzovat-eksporter-opentelemetry-s-kollektorom-opentelemetry-na-k/54089803#54089803

1 ответ

Решение

Дело в том, что вы должны использовать сборщик opentelemetry, если вы используете экспортер opentelemetry.

Пожалуйста, см. Схему в приложении

Также я создал суть, которая поможет вам настроить, пожалуйста, см.

https://gist.github.com/AndrewGrachov/11a18bc7268e43f1a36960d630a0838f

(просто настройте значения, экспортируйте в jaeger-all-in-one вместо отдельных + cassandra и т. д.)

Другие вопросы по тегам