如何手动提取上下文或跨度从传入的http请求在NodeJS?



我试图将我的Node.js应用程序从jaeger-client迁移到@opentelemetry/*

在我的Node.js应用程序中,我有一个简单的http服务器,我想在每个响应上创建跨度。

对于jaeger-client,我是这样做的:

import { FORMAT_HTTP_HEADERS } from 'opentracing';
import { initTracerFromEnv } from 'jaeger-client';
const tracer = initTracerFromEnv(/* some options here */);
// app is expressjs app
app.get('/home', req => {
const rootSpan = tracer.startSpan('response', {
childOf: tracer.extract(FORMAT_HTTP_HEADERS, req.headers),
});
// ...make child spans of rootSpan
});

我想连接我的根跨度的响应与跨度从其他应用程序,执行请求到我的Node.js应用服务器。和jaeger-client差不多。

我怎么能使它与OpenTelemetry而不是jeager-clientopentracing?是否有可能手动创建子跨度,而不进行自动检测?

您可以通过从请求头中提取父上下文并使用它创建子跨度来进行上下文传播,如下所示:

const opentelemetry = require('@opentelemetry/api');
const {SpanKind, ROOT_CONTEXT} = require("@opentelemetry/api");

app.get('/home', req => {
// Get incoming context from headers
const remoteCtx = opentelemetry.propagation.extract(ROOT_CONTEXT, req.headers);
// ...make child spans of remoteSpan
// Create child span passing parent context 
const childSpan = tracer.startSpan(
'childSpan',
remoteCtx
);
// ... Do important stuff

// End the span
childSpan.end();
});

最新更新