1

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

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

加载各自的插件时已经需要某些模块(redis,express),某些插件可能无法正常工作。确保在需要其他模块之前设置 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 文件中的 main 函数的顶部

  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 请求,那么上下文传播会正确发生,但是如果我通过创建一个休息连接器来使用推荐的环回方式,那么它就不会发生。我已经在应用程序中安装了所有必需的模块。

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

任何帮助将不胜感激。

4

2 回答 2

1

找出问题并使它们也起作用。相同的所有详细信息都在以下链接中:

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

链接中给出了一个简单的指导方针,然后可以很容易地在环回 4 中使用 opentelemetry 设置跟踪。

于 2021-02-23T08:09:01.200 回答
0

您必须NodeTracerProvider在 0.15.0 中为和 registerInstrumentation 提供配置,如下所示

// 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
});
于 2021-02-22T01:11:06.573 回答