在将 opentelemetry tracing 与 loopback 4 集成时面临多个问题

Facing multiple Issues while integrating opentelemetry tracing with loopback 4

我正在尝试在环回 4 中实施开放遥测跟踪。

根据用于 HTTP、express、redis、psotgres 的 opentelemetry 的自动仪器库,在加载任何此类应用程序模块之前,需要加载所有 opentelemetry 模块。但是当我尝试在应用程序中这样做时,它总是会给出一条消息:

Some modules (redis, express) were already required when their respective plugin was loaded, some plugins might not work. Make sure the SDK is setup before you require in other modules.

下面是我试过的示例代码。

安装以下软件包:

@opentelemetry/node
@opentelemetry/tracing
@opentelemetry/exporter-jaeger
@opentelemetry/plugin-http
@opentelemetry/plugin-https
@opentelemetry/plugin-express

在 index.ts

的顶部
import { JaegerExporter } from '@opentelemetry/exporter-jaeger';
import { NodeTracerProvider } from '@opentelemetry/node';
import { SimpleSpanProcessor, ConsoleSpanExporter } from '@opentelemetry/tracing';

在 index.ts 文件中主要函数的顶部

  const option = {
    serviceName: 'basic-service',
    tags: [], // optional
    // You can use the default UDPSender
    host: 'localhost', // optional
    port: 6832, // optional
    // OR you can use the HTTPSender as follows
    // endpoint: 'http://localhost:14268/api/traces',
  }

  // Configure span processor to send spans to the exporter
  const exporter = new JaegerExporter(option);
  provider.addSpanProcessor(new SimpleSpanProcessor(exporter));
  provider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));
  provider.register();

然后在 application.ts 文件中导入以下内容:

import openTelemetry, { Span, Tracer } from '@opentelemetry/api';

然后我在application.ts

中添加了这个中间件
const middle: Middleware = async (ctx, next) => {
  const trace = openTelemetry.trace.getTracer('loopback:tracer');
  let span: Span;
  span = trace.startSpan(ctx.request.url);
  span.setAttribute('key', 'value');
  span.addEvent('invoking next');
  const res = await next();
  return res;
}

然后在application.ts的构造函数中绑定这个中间件:

this.middleware(middle);

另一件事,如果我使用 Axios 发出 HTTP 请求,则上下文传播会正确发生,但如果我通过创建 rest 连接器使用推荐的环回方式,则不会发生。我已经在应用程序中安装了所有必需的模块。

我有一个基于微服务的架构,其中请求可以从一个服务转到另一个服务,我需要跟踪完整的请求周期。

如有任何帮助,我们将不胜感激。

您必须为 NodeTracerProvider 提供配置并在 0.15.0 中注册仪器,如下所示

// Enable OpenTelemetry exporters to export traces to Grafan Tempo.
const provider = new NodeTracerProvider ({
    plugins: {
        express: {
          enabled: true,
          path: '@opentelemetry/plugin-express',
        },
        http: {
            enabled: true,
            path: '@opentelemetry/plugin-http',
        },
        redis: {
            enabled: true,
            // You may use a package name or absolute path to the file.
            path: '@opentelemetry/plugin-redis',
        },
    },
    logLevel: LogLevel.ERROR,      
});

registerInstrumentations({
    tracerProvider: provider
});

找出问题并使它们正常工作。相同的所有详细信息如下link:

https://github.com/strongloop/loopback-next/issues/6791

link 中给出了一个简单的指导方针,遵循该指导方针,可以非常轻松地在环回 4 中使用 opentelemetry 设置跟踪。