【问题标题】:Facing multiple Issues while integrating opentelemetry tracing with loopback 4在将 opentelemetry 跟踪与环回 4 集成时面临多个问题
【发布时间】:2021-02-27 13:17:54
【问题描述】:

我正在尝试在环回 4 中实现 opentelemetry 跟踪。

根据用于 HTTP、express、redis、psotgres 的 opentelemetry 的自动仪器库,在加载任何此类应用程序模块之前需要加载所有 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 请求,那么上下文传播会正确发生,但如果我通过创建一个休息连接器来使用推荐的环回方式,那么它就不会发生。我已经在应用程序中安装了所有必需的模块。

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

任何帮助都将在这里得到赞赏。

【问题讨论】:

标签: loopbackjs loopback4 opentracing open-telemetry


【解决方案1】:

找出问题并使其正常工作。所有相同的细节都在以下链接中:

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

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

【讨论】:

    【解决方案2】:

    您必须在 0.15.0 中为 NodeTracerProvider 和 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
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-02
      • 1970-01-01
      相关资源
      最近更新 更多