@blaxel/telemetry 0.2.18-dev.137 → 0.2.18-dev.139
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/telemetry.d.ts +1 -1
- package/dist/telemetry.js +63 -41
- package/package.json +2 -2
package/dist/telemetry.d.ts
CHANGED
|
@@ -34,6 +34,7 @@ declare class TelemetryManager {
|
|
|
34
34
|
private configured;
|
|
35
35
|
constructor();
|
|
36
36
|
initialize(): void;
|
|
37
|
+
setupBasicTracerProvider(): void;
|
|
37
38
|
setConfiguration(): Promise<void>;
|
|
38
39
|
get tracer(): import("@opentelemetry/api").Tracer;
|
|
39
40
|
get enabled(): boolean;
|
|
@@ -59,7 +60,6 @@ declare class TelemetryManager {
|
|
|
59
60
|
*/
|
|
60
61
|
getLogExporter(): OTLPLogExporter;
|
|
61
62
|
instrumentApp(): void;
|
|
62
|
-
setupProviders(): void;
|
|
63
63
|
setExporters(): void;
|
|
64
64
|
shutdownApp(): Promise<void>;
|
|
65
65
|
}
|
package/dist/telemetry.js
CHANGED
|
@@ -78,13 +78,35 @@ class TelemetryManager {
|
|
|
78
78
|
if (!this.enabled || this.initialized) {
|
|
79
79
|
return;
|
|
80
80
|
}
|
|
81
|
+
// Setup basic TracerProvider first - this is critical for context propagation
|
|
82
|
+
this.setupBasicTracerProvider();
|
|
83
|
+
// Now setup instrumentation - it can now extract traceparent headers
|
|
81
84
|
this.instrumentApp();
|
|
82
85
|
this.setupSignalHandler();
|
|
83
86
|
this.initialized = true;
|
|
87
|
+
// Add exporters later asynchronously
|
|
84
88
|
this.setConfiguration().catch((error) => {
|
|
85
89
|
core_1.logger.error("Error setting configuration:", error);
|
|
86
90
|
});
|
|
87
91
|
}
|
|
92
|
+
setupBasicTracerProvider() {
|
|
93
|
+
const resource = new BlaxelResource(this.resourceAttributes);
|
|
94
|
+
// Create TracerProvider with minimal setup for context propagation
|
|
95
|
+
this.nodeTracerProvider = new sdk_trace_node_1.NodeTracerProvider({
|
|
96
|
+
resource,
|
|
97
|
+
sampler: new sdk_trace_node_1.AlwaysOnSampler(),
|
|
98
|
+
spanProcessors: [
|
|
99
|
+
new DefaultAttributesSpanProcessor({
|
|
100
|
+
"workload.id": core_1.settings.name || "",
|
|
101
|
+
"workload.type": core_1.settings.type ? core_1.settings.type + "s" : "",
|
|
102
|
+
workspace: core_1.settings.workspace || "",
|
|
103
|
+
}),
|
|
104
|
+
],
|
|
105
|
+
});
|
|
106
|
+
// Register immediately - this enables context propagation
|
|
107
|
+
this.nodeTracerProvider.register();
|
|
108
|
+
console.log("🚀 TracerProvider registered BEFORE instrumentation - context propagation enabled");
|
|
109
|
+
}
|
|
88
110
|
async setConfiguration() {
|
|
89
111
|
if (!this.enabled || this.configured) {
|
|
90
112
|
return;
|
|
@@ -194,24 +216,39 @@ class TelemetryManager {
|
|
|
194
216
|
instrumentApp() {
|
|
195
217
|
// Setup telemetry provider first
|
|
196
218
|
core_1.telemetryRegistry.registerProvider(new telemetry_provider_1.OtelTelemetryProvider());
|
|
197
|
-
// Setup TracerProvider and other providers BEFORE instrumentation
|
|
198
|
-
this.setupProviders();
|
|
199
219
|
const httpInstrumentation = new instrumentation_http_1.HttpInstrumentation({
|
|
200
|
-
requireParentforOutgoingSpans:
|
|
220
|
+
requireParentforOutgoingSpans: true, // Maintain parent-child relationships
|
|
201
221
|
requestHook: (span) => {
|
|
202
222
|
// Debug incoming trace headers
|
|
203
223
|
console.log("=== HTTP INSTRUMENTATION REQUEST HOOK ===");
|
|
224
|
+
// Check if TracerProvider is registered
|
|
225
|
+
const tracer = api_1.trace.getTracer("debug");
|
|
226
|
+
console.log("TracerProvider available:", !!tracer);
|
|
227
|
+
// Check active context
|
|
228
|
+
const activeContext = api_1.context.active();
|
|
229
|
+
const spanContext = api_1.trace.getSpanContext(activeContext);
|
|
230
|
+
console.log("Span context from active context:", spanContext
|
|
231
|
+
? {
|
|
232
|
+
traceId: spanContext.traceId,
|
|
233
|
+
spanId: spanContext.spanId,
|
|
234
|
+
traceFlags: spanContext.traceFlags,
|
|
235
|
+
}
|
|
236
|
+
: "null");
|
|
204
237
|
// Check current span context after HTTP instrumentation processes headers
|
|
205
238
|
const activeSpan = api_1.trace.getActiveSpan();
|
|
206
239
|
if (activeSpan) {
|
|
207
|
-
console.log("Active span in request hook:", {
|
|
240
|
+
console.log("✅ Active span found in request hook:", {
|
|
208
241
|
traceId: activeSpan.spanContext().traceId,
|
|
209
242
|
spanId: activeSpan.spanContext().spanId,
|
|
210
243
|
traceFlags: activeSpan.spanContext().traceFlags,
|
|
211
244
|
});
|
|
212
245
|
}
|
|
213
246
|
else {
|
|
214
|
-
console.log("No active span found in request hook");
|
|
247
|
+
console.log("❌ No active span found in request hook");
|
|
248
|
+
console.log("Possible causes:");
|
|
249
|
+
console.log("1. TracerProvider not registered before HTTP instrumentation");
|
|
250
|
+
console.log("2. Traceparent header not properly extracted");
|
|
251
|
+
console.log("3. Context lost across async boundaries");
|
|
215
252
|
}
|
|
216
253
|
console.log("Current span from hook parameter:", {
|
|
217
254
|
traceId: span.spanContext().traceId,
|
|
@@ -225,24 +262,6 @@ class TelemetryManager {
|
|
|
225
262
|
instrumentations: [httpInstrumentation],
|
|
226
263
|
});
|
|
227
264
|
}
|
|
228
|
-
setupProviders() {
|
|
229
|
-
const resource = new BlaxelResource(this.resourceAttributes);
|
|
230
|
-
// Setup TracerProvider first - this is critical for context propagation
|
|
231
|
-
this.nodeTracerProvider = new sdk_trace_node_1.NodeTracerProvider({
|
|
232
|
-
resource,
|
|
233
|
-
sampler: new sdk_trace_node_1.AlwaysOnSampler(),
|
|
234
|
-
spanProcessors: [
|
|
235
|
-
new DefaultAttributesSpanProcessor({
|
|
236
|
-
"workload.id": core_1.settings.name || "",
|
|
237
|
-
"workload.type": core_1.settings.type ? core_1.settings.type + "s" : "",
|
|
238
|
-
workspace: core_1.settings.workspace || "",
|
|
239
|
-
}),
|
|
240
|
-
],
|
|
241
|
-
});
|
|
242
|
-
// Register the tracer provider BEFORE any instrumentation
|
|
243
|
-
this.nodeTracerProvider.register();
|
|
244
|
-
console.log("TracerProvider registered - ready for context propagation");
|
|
245
|
-
}
|
|
246
265
|
setExporters() {
|
|
247
266
|
const resource = new BlaxelResource(this.resourceAttributes);
|
|
248
267
|
// Setup logging
|
|
@@ -252,24 +271,27 @@ class TelemetryManager {
|
|
|
252
271
|
});
|
|
253
272
|
this.loggerProvider.addLogRecordProcessor(new sdk_logs_1.BatchLogRecordProcessor(logExporter));
|
|
254
273
|
api_logs_1.logs.setGlobalLoggerProvider(this.loggerProvider);
|
|
255
|
-
//
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
new
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
274
|
+
// Add exporters to existing TracerProvider (don't recreate!)
|
|
275
|
+
if (this.nodeTracerProvider) {
|
|
276
|
+
const traceExporter = this.getTraceExporter();
|
|
277
|
+
// Create new TracerProvider with exporters but keep context continuity
|
|
278
|
+
const newTracerProvider = new sdk_trace_node_1.NodeTracerProvider({
|
|
279
|
+
resource,
|
|
280
|
+
sampler: new sdk_trace_node_1.AlwaysOnSampler(),
|
|
281
|
+
spanProcessors: [
|
|
282
|
+
new DefaultAttributesSpanProcessor({
|
|
283
|
+
"workload.id": core_1.settings.name || "",
|
|
284
|
+
"workload.type": core_1.settings.type ? core_1.settings.type + "s" : "",
|
|
285
|
+
workspace: core_1.settings.workspace || "",
|
|
286
|
+
}),
|
|
287
|
+
new sdk_trace_node_1.BatchSpanProcessor(traceExporter),
|
|
288
|
+
new HasBeenProcessedSpanProcessor(traceExporter),
|
|
289
|
+
],
|
|
290
|
+
});
|
|
291
|
+
this.nodeTracerProvider = newTracerProvider;
|
|
292
|
+
this.nodeTracerProvider.register();
|
|
293
|
+
console.log("📡 Exporters added to TracerProvider - spans will now be sent to backend");
|
|
294
|
+
}
|
|
273
295
|
// Setup metrics
|
|
274
296
|
const metricExporter = this.getMetricExporter();
|
|
275
297
|
this.meterProvider = new sdk_metrics_1.MeterProvider({
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blaxel/telemetry",
|
|
3
|
-
"version": "0.2.18-dev.
|
|
3
|
+
"version": "0.2.18-dev.139",
|
|
4
4
|
"description": "Blaxel SDK for TypeScript",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Blaxel, INC (https://blaxel.ai)",
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
"@opentelemetry/sdk-trace-base": "^2.0.0",
|
|
72
72
|
"@opentelemetry/sdk-trace-node": "^2.0.0",
|
|
73
73
|
"ai": "^4.3.13",
|
|
74
|
-
"@blaxel/core": "0.2.18-dev.
|
|
74
|
+
"@blaxel/core": "0.2.18-dev.139"
|
|
75
75
|
},
|
|
76
76
|
"devDependencies": {
|
|
77
77
|
"@eslint/js": "^9.26.0",
|