0.10.2 • Published 2 years ago

@donews/nestjs-tracing v0.10.2

Weekly downloads
3
License
MIT
Repository
github
Last release
2 years ago

nest open tracing

描述

nest http tracing 工具

待支持

  1. websocket

install

$ npm i @donews/nestjs-tracing jaeger-client opentracing
$ npm i -D @types/jaeger-client

参数解释

  • tracingConfig&tracingOption: jaeger-client
  • tracingOption 增加 contextKey,baggagePrefix,自定义 tracingId Key 字段,baggage 前缀字段

quick start

1. 同步模块导入

import { TracingModule } from '@donews/nestjs-tracing';
import { Module } from '@nestjs/common';

@Module({
  imports: [
    TracingModule.forRoot({
      tracingConfig: {
        serviceName: 'tracing-service',
        sampler: {
          param: 1,
          type: 'const',
        },
      },
      tracingOption: {
        tags: {},
      },
    }),
  ],
})
export class AppModule {}

2. 异步模块导入

import { TracingModule, TracingModuleOptions } from '@donews/nestjs-tracing';
import { Module } from '@nestjs/common';

@Module({
  imports: [
    TracingModule.forRootAsync({
      useFactory(configService: ConfigService) {
        return {
          tracingConfig: {
            serviceName: configService.get<string>('APP_NAME'),
            sampler: {
              param: 1,
              type: 'const',
            },
          },
          tracingOption: {
            tags: {},
          },
        } as TracingModuleOptions;
      },
      inject: [ConfigService],
    }),
  ],
})
export class AppModule {}

3. http server receive request interceptor

HttpModule 上的 HttpService 设置 interceptors

import { HttpServiceInterceptors } from '@donews/nestjs-tracing/lib/http-service.interceptors';
import { HttpModule, HttpService } from '@nestjs/axios';

@Module({})
export class AdModule implements OnApplicationBootstrap {
  constructor(private readonly httpService: HttpService) {}
  /**
   * 设置axios拦截器,增加tracing信息
   */
  onApplicationBootstrap(): void {
    this.httpService.axiosRef.interceptors.request.use(
      ...HttpServiceInterceptors.interceptRequest(),
    );
    this.httpService.axiosRef.interceptors.response.use(
      ...HttpServiceInterceptors.interceptResponse(),
    );
  }
}

http-request-tracing 会自动读取 header 和 query 上的 tracingId,如果自定义了 tracingId key 值,请在模块导入 tracingOption 进行修改

import { TracingHttpInterceptor } from '@donews/nestjs-tracing';
import { UseInterceptors } from '@nestjs/common';

@UseInterceptors(TracingHttpInterceptor)
export class AppController {}

4. grpc client request interceptor

import { tracingGrpcInterceptor } from '@donews/nestjs-tracing';
import { ClientProxyFactory } from '@nestjs/microservices';
import { FactoryProvider } from '@nestjs/common';

export const RawGrpcProvider: FactoryProvider = {
  provide: 'RAW_SERVICE',
  useFactory: () => {
    return ClientProxyFactory.create({
      transport: Transport.GRPC,
      options: {
        channelOptions: {
          interceptors: [tracingGrpcInterceptor] as any,
        },
      },
    });
  },
};

online example

License

Nest is MIT licensed.

0.10.2

2 years ago

0.10.0

2 years ago

0.9.3

3 years ago

0.9.2

3 years ago

0.9.0

3 years ago

0.9.1

3 years ago

0.8.4

3 years ago

0.8.3

3 years ago

0.8.2

3 years ago

0.8.1

3 years ago

0.8.0

3 years ago

0.5.0

4 years ago

0.4.1

4 years ago

0.3.2

4 years ago

0.4.0

4 years ago

0.3.1

4 years ago

0.3.0

4 years ago

0.1.10

4 years ago