След обработчика в Nest
Корневой след запроса уже виден, но тяжёлая подготовка данных в одном классе сливается с остальными вызовами: по одному автоматическому узлу непонятно, сколько времени ушло на отдельный шаг внутри операции.
Агент и так пишет узлы для
вызовов провайдеров, а для
своего имени и границ шага
служит TracerService
из @nestjs/observe.
createSpan открывает
вложенный след внутри текущего
запроса; в колбек передают
делегат TraceSpanDelegate,
если нужны метки на этом узле.
Покажем на примере постов:
import { Injectable } from '@nestjs/common';
import { TracerService } from '@nestjs/observe';
@Injectable()
export class PostService {
constructor(private tracer: TracerService) {}
async getPosts(): Promise<string> {
return this.tracer.createSpan(
'load-post-list',
async () => {
return 'All posts';
},
);
}
}
Контроллер по-прежнему обращается к сервису; в Observe под узлом запроса появится отдельный именованный фрагмент с длительностью подготовки списка.
import { Controller, Get } from '@nestjs/common';
import { PostService } from './post.service.js';
@Controller()
export class PostController {
constructor(private postService: PostService) {}
@Get('posts')
async getPosts(): Promise<string> {
return this.postService.getPosts();
}
}
Оберните загрузку списка
в WorkerService
в отдельный след.