如何从 NodeJS 中的传入 http 请求中手动提取上下文或跨度?
How to manually extract context or span from incoming http request in 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-client
和 opentracing
?是否可以在没有自动检测的情况下手动创建子跨度?
您可以通过从请求 headers 中提取 parent 上下文并使用它创建 child 跨度来执行上下文传播,如下所示:
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();
});
我正在尝试将我的 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-client
和 opentracing
?是否可以在没有自动检测的情况下手动创建子跨度?
您可以通过从请求 headers 中提取 parent 上下文并使用它创建 child 跨度来执行上下文传播,如下所示:
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();
});