feat(observability): Replace Prometheus package with OpenTelemetry

This commit is contained in:
Julian Tölle 2022-02-27 17:57:33 +01:00
parent f67383b761
commit 6b1640b753
22 changed files with 2391 additions and 568 deletions

View file

@ -1,9 +1,18 @@
import { Module, Global } from "@nestjs/common";
import { Logger } from "./logger.service";
import { Module, RequestMethod } from "@nestjs/common";
import { LoggerModule as PinoLoggerModule } from "nestjs-pino";
import { logger } from "./logger";
@Global()
@Module({
providers: [Logger],
exports: [Logger],
imports: [
PinoLoggerModule.forRoot({
pinoHttp: {
logger: logger,
autoLogging: true,
quietReqLogger: true,
redact: ["req.headers", "res.headers"],
},
exclude: [{ method: RequestMethod.ALL, path: "/" }],
}),
],
})
export class LoggerModule {}

View file

@ -1,4 +0,0 @@
import { Injectable, Scope, ConsoleLogger } from "@nestjs/common";
@Injectable({ scope: Scope.TRANSIENT })
export class Logger extends ConsoleLogger {}

32
src/logger/logger.ts Normal file
View file

@ -0,0 +1,32 @@
import { context, trace } from "@opentelemetry/api";
import Pino, { Logger, LoggerOptions } from "pino";
export const loggerOptions: LoggerOptions = {
level: "debug",
formatters: {
level(label) {
return { level: label };
},
log(object) {
const span = trace.getSpan(context.active());
if (!span) return { ...object };
const { spanId, traceId } = trace
.getSpan(context.active())
?.spanContext();
return { ...object, spanId, traceId };
},
},
transport:
process.env.NODE_ENV === "local"
? {
target: "pino-pretty",
options: {
colorize: true,
levelFirst: true,
translateTime: true,
},
}
: null,
};
export const logger: Logger = Pino(loggerOptions);