Loopbackjs 在将opentelemetry跟踪与loopback 4集成时面临多个问题
我试图在环回4中实现opentelemetry跟踪 根据opentelemetry for HTTP、express、redis、psotgres的自动仪器库,在加载任何此类应用程序模块之前,需要加载所有opentelemetry模块。但当我尝试在应用程序中这样做时,它总是会给出一条信息,上面写着: 一些模块(redis、express)在加载各自的插件时已经是必需的,一些插件可能无法工作。确保在其他模块中需要SDK之前已设置SDK 下面是我尝试过的示例代码 安装以下软件包: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
@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轻松设置跟踪。对于将来的交叉引用,此问题已重新发布在此处: