2024-09-19 19:22:43 -05:00
|
|
|
import { context, diag, DiagConsoleLogger, DiagLogLevel, propagation, trace } from "@opentelemetry/api"
|
|
|
|
|
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-proto"
|
|
|
|
|
import { Resource } from "@opentelemetry/resources"
|
|
|
|
|
import { BatchSpanProcessor } from "@opentelemetry/sdk-trace-base"
|
|
|
|
|
import { NodeTracerProvider } from "@opentelemetry/sdk-trace-node"
|
2023-04-21 12:11:00 +02:00
|
|
|
import { registerOTel } from "@vercel/otel"
|
|
|
|
|
|
2024-09-19 19:22:43 -05:00
|
|
|
// Configuración del logger de diagnóstico
|
|
|
|
|
diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.ERROR)
|
|
|
|
|
|
|
|
|
|
// Verificación de registro previo de OpenTelemetry
|
|
|
|
|
function isAlreadyRegistered() {
|
|
|
|
|
return trace.getTracerProvider() || context.active() || propagation.setGlobalPropagator
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Inicialización de OpenTelemetry
|
|
|
|
|
function initializeOpenTelemetry() {
|
|
|
|
|
const resource = new Resource({
|
|
|
|
|
"service.name": "next-app", // Cambia el nombre del servicio según tu proyecto
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
const provider = new NodeTracerProvider({
|
|
|
|
|
resource,
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
const traceExporter = new OTLPTraceExporter({
|
|
|
|
|
url: "http://localhost:4318/v1/traces", // Asegúrate de que el servicio OTLP esté corriendo
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
provider.addSpanProcessor(new BatchSpanProcessor(traceExporter))
|
|
|
|
|
provider.register()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Registrar OpenTelemetry si no está registrado
|
|
|
|
|
if (!isAlreadyRegistered()) {
|
|
|
|
|
initializeOpenTelemetry()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Registrar la configuración de OpenTelemetry
|
2023-04-21 12:11:00 +02:00
|
|
|
export function register() {
|
2024-09-19 19:22:43 -05:00
|
|
|
registerOTel("next-app") // Mismo nombre de servicio
|
2023-04-21 12:11:00 +02:00
|
|
|
}
|