问题描述
我在接受 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 (将#修改为@)