@blaxel/telemetry 0.2.18-dev.134 → 0.2.18-dev.137
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 -0
- package/dist/telemetry.js +49 -1
- package/dist/telemetry_provider.d.ts +0 -2
- package/dist/telemetry_provider.js +28 -14
- package/package.json +2 -2
package/dist/telemetry.d.ts
CHANGED
package/dist/telemetry.js
CHANGED
|
@@ -192,22 +192,67 @@ class TelemetryManager {
|
|
|
192
192
|
});
|
|
193
193
|
}
|
|
194
194
|
instrumentApp() {
|
|
195
|
+
// Setup telemetry provider first
|
|
195
196
|
core_1.telemetryRegistry.registerProvider(new telemetry_provider_1.OtelTelemetryProvider());
|
|
197
|
+
// Setup TracerProvider and other providers BEFORE instrumentation
|
|
198
|
+
this.setupProviders();
|
|
196
199
|
const httpInstrumentation = new instrumentation_http_1.HttpInstrumentation({
|
|
197
|
-
requireParentforOutgoingSpans:
|
|
200
|
+
requireParentforOutgoingSpans: false, // Allow spans from incoming headers
|
|
201
|
+
requestHook: (span) => {
|
|
202
|
+
// Debug incoming trace headers
|
|
203
|
+
console.log("=== HTTP INSTRUMENTATION REQUEST HOOK ===");
|
|
204
|
+
// Check current span context after HTTP instrumentation processes headers
|
|
205
|
+
const activeSpan = api_1.trace.getActiveSpan();
|
|
206
|
+
if (activeSpan) {
|
|
207
|
+
console.log("Active span in request hook:", {
|
|
208
|
+
traceId: activeSpan.spanContext().traceId,
|
|
209
|
+
spanId: activeSpan.spanContext().spanId,
|
|
210
|
+
traceFlags: activeSpan.spanContext().traceFlags,
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
console.log("No active span found in request hook");
|
|
215
|
+
}
|
|
216
|
+
console.log("Current span from hook parameter:", {
|
|
217
|
+
traceId: span.spanContext().traceId,
|
|
218
|
+
spanId: span.spanContext().spanId,
|
|
219
|
+
traceFlags: span.spanContext().traceFlags,
|
|
220
|
+
});
|
|
221
|
+
console.log("=== END HTTP INSTRUMENTATION REQUEST HOOK ===");
|
|
222
|
+
},
|
|
198
223
|
});
|
|
199
224
|
(0, instrumentation_1.registerInstrumentations)({
|
|
200
225
|
instrumentations: [httpInstrumentation],
|
|
201
226
|
});
|
|
202
227
|
}
|
|
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
|
+
}
|
|
203
246
|
setExporters() {
|
|
204
247
|
const resource = new BlaxelResource(this.resourceAttributes);
|
|
248
|
+
// Setup logging
|
|
205
249
|
const logExporter = this.getLogExporter();
|
|
206
250
|
this.loggerProvider = new sdk_logs_1.LoggerProvider({
|
|
207
251
|
resource,
|
|
208
252
|
});
|
|
209
253
|
this.loggerProvider.addLogRecordProcessor(new sdk_logs_1.BatchLogRecordProcessor(logExporter));
|
|
210
254
|
api_logs_1.logs.setGlobalLoggerProvider(this.loggerProvider);
|
|
255
|
+
// Recreate TracerProvider with exporters - this ensures proper initialization
|
|
211
256
|
const traceExporter = this.getTraceExporter();
|
|
212
257
|
this.nodeTracerProvider = new sdk_trace_node_1.NodeTracerProvider({
|
|
213
258
|
resource,
|
|
@@ -222,7 +267,10 @@ class TelemetryManager {
|
|
|
222
267
|
new HasBeenProcessedSpanProcessor(traceExporter),
|
|
223
268
|
],
|
|
224
269
|
});
|
|
270
|
+
// Re-register the tracer provider with exporters
|
|
225
271
|
this.nodeTracerProvider.register();
|
|
272
|
+
console.log("TracerProvider re-registered with exporters");
|
|
273
|
+
// Setup metrics
|
|
226
274
|
const metricExporter = this.getMetricExporter();
|
|
227
275
|
this.meterProvider = new sdk_metrics_1.MeterProvider({
|
|
228
276
|
resource,
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { BlaxelSpan, BlaxelSpanOptions, BlaxelTelemetryProvider } from "@blaxel/core";
|
|
2
2
|
export declare class OtelTelemetryProvider implements BlaxelTelemetryProvider {
|
|
3
|
-
private spans;
|
|
4
|
-
retrieveActiveSpanContext(): import("@opentelemetry/api").Context;
|
|
5
3
|
startSpan(name: string, options?: BlaxelSpanOptions): BlaxelSpan;
|
|
6
4
|
flush(): Promise<void>;
|
|
7
5
|
}
|
|
@@ -21,7 +21,7 @@ class OtelSpan {
|
|
|
21
21
|
}
|
|
22
22
|
setStatus(status, message) {
|
|
23
23
|
this.span.setStatus({
|
|
24
|
-
code: status ===
|
|
24
|
+
code: status === "ok" ? api_1.SpanStatusCode.OK : api_1.SpanStatusCode.ERROR,
|
|
25
25
|
message,
|
|
26
26
|
});
|
|
27
27
|
}
|
|
@@ -34,25 +34,39 @@ class OtelSpan {
|
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
class OtelTelemetryProvider {
|
|
37
|
-
spans = [];
|
|
38
|
-
retrieveActiveSpanContext() {
|
|
39
|
-
for (let i = this.spans.length - 1; i >= 0; i--) {
|
|
40
|
-
const span = this.spans[i];
|
|
41
|
-
if (!span.closed) {
|
|
42
|
-
return api_1.trace.setSpanContext(api_1.ROOT_CONTEXT, span.getContext());
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
return api_1.context.active();
|
|
46
|
-
}
|
|
47
37
|
startSpan(name, options) {
|
|
48
38
|
const tracer = api_1.trace.getTracer("blaxel");
|
|
39
|
+
// Get the current active context - this will include any traceparent propagation
|
|
40
|
+
const activeContext = api_1.context.active();
|
|
41
|
+
const activeSpan = api_1.trace.getActiveSpan();
|
|
42
|
+
// Debug logging to help understand context propagation
|
|
43
|
+
console.log("=== CREATING NEW SPAN ===");
|
|
44
|
+
console.log("Span name:", name);
|
|
45
|
+
console.log("Active context span:", activeSpan
|
|
46
|
+
? {
|
|
47
|
+
traceId: activeSpan.spanContext().traceId,
|
|
48
|
+
spanId: activeSpan.spanContext().spanId,
|
|
49
|
+
traceFlags: activeSpan.spanContext().traceFlags,
|
|
50
|
+
}
|
|
51
|
+
: "null");
|
|
52
|
+
// Check if there's a span context in the active context (from traceparent headers)
|
|
53
|
+
const spanContext = api_1.trace.getSpanContext(activeContext);
|
|
54
|
+
if (spanContext) {
|
|
55
|
+
console.log("Span context from active context:", {
|
|
56
|
+
traceId: spanContext.traceId,
|
|
57
|
+
spanId: spanContext.spanId,
|
|
58
|
+
traceFlags: spanContext.traceFlags,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
49
61
|
const otelOptions = {
|
|
50
62
|
attributes: options?.attributes,
|
|
51
63
|
root: options?.isRoot,
|
|
52
64
|
};
|
|
53
|
-
|
|
54
|
-
const
|
|
55
|
-
|
|
65
|
+
// Use the active context unless explicitly requesting a root span
|
|
66
|
+
const contextToUse = options?.isRoot ? api_1.ROOT_CONTEXT : activeContext;
|
|
67
|
+
const span = new OtelSpan(tracer.startSpan(name, otelOptions, contextToUse));
|
|
68
|
+
console.log("Created span context:", span.getContext());
|
|
69
|
+
console.log("=== END CREATING NEW SPAN ===");
|
|
56
70
|
return span;
|
|
57
71
|
}
|
|
58
72
|
async flush() {
|
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.137",
|
|
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.137"
|
|
75
75
|
},
|
|
76
76
|
"devDependencies": {
|
|
77
77
|
"@eslint/js": "^9.26.0",
|