如何解决将传入的 http b3 标头视为自己的跟踪 ID 和跨度 ID
我在接受 HTTP API 请求的后端使用 nestjs
。和 Jaeger-client-node
提供跟踪器和 Span。
我有一个拦截器可以在 HTTP 请求的开始和结束期间开始和结束跨度。
@Injectable()
export class LoggingInterceptor implements NestInterceptor {
intercept(context: ExecutionContext,next: CallHandler): Observable<any> {
const request = context.switchToHttp().getRequest<AuthRequest>();
if (request && request.url.indexOf('/api') == 0) {
const traceId = request?.headers['x-b3-traceid'];
const spanId = request?.headers['x-b3-spanid'];
const span = tracer.startSpan(request.url);
tracer.inject(span,FORMAT_TEXT_MAP,request?.headers); // NOT WORKING
// tracer.inject(span,FORMAT_HTTP_HEADERS,request?.headers); // NOT WORKING
// tracer.extract(FORMAT_TEXT_MAP,request?.headers); // NOT WORKING
// tracer.extract(FORMAT_HTTP_HEADERS,request?.headers); // NOT WORKING
console.log("started");
}
return next
.handle()
.pipe(
tap(() => {
httpContext.get('span').finish();
console.log("ended");
},),);
}
}
基本上,我想做一些类似 spring cloud sleuth
的事情,它可以尊重传入请求的 b3 标头并使用 Sl4j log.info("message")
并通过 b3 传播发出外部 http 请求。
PS:我也尝试过 Zipkin 和 OpenTelemetry 的 nodejs 库
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。