Loopbackjs 在将opentelemetry跟踪与loopback 4集成时面临多个问题

Loopbackjs 在将opentelemetry跟踪与loopback 4集成时面临多个问题,loopbackjs,loopback4,opentracing,open-telemetry,Loopbackjs,Loopback4,Opentracing,Open Telemetry,我试图在环回4中实现opentelemetry跟踪 根据opentelemetry for HTTP、express、redis、psotgres的自动仪器库,在加载任何此类应用程序模块之前,需要加载所有opentelemetry模块。但当我尝试在应用程序中这样做时,它总是会给出一条信息,上面写着: 一些模块(redis、express)在加载各自的插件时已经是必需的,一些插件可能无法工作。确保在其他模块中需要SDK之前已设置SDK 下面是我尝试过的示例代码 安装以下软件包: @opentele

我试图在环回4中实现opentelemetry跟踪

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

一些模块(redis、express)在加载各自的插件时已经是必需的,一些插件可能无法工作。确保在其他模块中需要SDK之前已设置SDK

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

安装以下软件包:

@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连接器,那么它就不会发生。我已经在应用程序中安装了所有必需的模块

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


任何帮助都将不胜感激。

您必须在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
});

解决了这些问题,并使其发挥作用。以下链接中提供了所有相同的详细信息:


链接中给出了一个简单的指导原则,接下来可以使用loopback 4中的opentelemetry轻松设置跟踪。

对于将来的交叉引用,此问题已重新发布在此处: