MCPcopy
hub / github.com/inkeep/open-knowledge / initTelemetry

Function initTelemetry

packages/server/src/telemetry.ts:43–132  ·  view source on GitHub ↗
(opts: InitTelemetryOptions = {})

Source from the content-addressed store, hash-verified

41}
42
43export function initTelemetry(opts: InitTelemetryOptions = {}): { tracer: Tracer; meter: Meter } {
44 const fileSinkEnabled = opts.localSink !== undefined;
45 const pushEnabled = process.env.OTEL_SDK_DISABLED === 'false';
46
47 if (!fileSinkEnabled && !pushEnabled) {
48 return noopResult();
49 }
50
51 if (tracerProvider) {
52 return noopResult();
53 }
54
55 try {
56 const resource = resourceFromAttributes({
57 [ATTR_SERVICE_NAME]: process.env.OTEL_SERVICE_NAME || 'open-knowledge-server',
58 [ATTR_SERVICE_VERSION]: process.env.OTEL_SERVICE_VERSION || '0.2.0',
59 });
60
61 const contextManager = new AsyncLocalStorageContextManager();
62 context.setGlobalContextManager(contextManager);
63
64 const spanProcessors: SpanProcessor[] = [];
65 const attributeDenylist =
66 opts.localSink?.attributeDenylist ?? DEFAULT_TELEMETRY_ATTRIBUTE_DENYLIST;
67 spanProcessors.push(new ScrubbingSpanProcessor({ attributeDenylist }));
68 if (fileSinkEnabled && opts.localSink !== undefined) {
69 fileSpanExporter = new FileSpanExporter({
70 projectDir: opts.localSink.projectDir,
71 maxBytes: opts.localSink.spansMaxBytes,
72 });
73 spanProcessors.push(new SimpleSpanProcessor(fileSpanExporter));
74 }
75 if (pushEnabled) {
76 spanProcessors.push(new BatchSpanProcessor(new OTLPTraceExporter()));
77 }
78
79 const tp = new BasicTracerProvider({ resource, spanProcessors });
80 trace.setGlobalTracerProvider(tp);
81 tracerProvider = tp;
82
83 try {
84 propagation.setGlobalPropagator(new W3CTraceContextPropagator());
85 } catch (e) {
86 const log = getLogger('telemetry');
87 log.warn(
88 { err: e },
89 'OpenTelemetry propagator init failed — file sink active, distributed trace correlation degraded',
90 );
91 }
92
93 let mp: MeterProvider | null = null;
94 if (pushEnabled) {
95 const metricExporter = new OTLPMetricExporter();
96 mp = new MeterProvider({
97 resource,
98 readers: [new PeriodicExportingMetricReader({ exporter: metricExporter })],
99 });
100 metrics.setGlobalMeterProvider(mp);

Callers 4

telemetry.test.tsFile · 0.90
bootServerFunction · 0.90
createServerFunction · 0.90
beginRootFunction · 0.85

Calls 6

getLoggerFunction · 0.90
noopResultFunction · 0.85
warnMethod · 0.65
infoMethod · 0.65
errorMethod · 0.65
pushMethod · 0.45

Tested by

no test coverage detected