Skip to content
This repository was archived by the owner on Mar 18, 2025. It is now read-only.

Commit 904e842

Browse files
Milan GallasMilan Gallas
authored andcommitted
fix(Observe): missing traces in Mlflow
Signed-off-by: Milan Gallas <Milan.Gallas@ibm.com>
1 parent c1e3c6d commit 904e842

5 files changed

Lines changed: 147 additions & 19 deletions

File tree

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@
8484
},
8585
"devDependencies": {
8686
"@mikro-orm/cli": "6.2.9",
87+
"@opentelemetry/exporter-trace-otlp-proto": "^0.57.0",
8788
"@release-it/conventional-changelog": "^9.0.2",
8889
"@types/jsonwebtoken": "^9.0.6",
8990
"@types/node": "^20.14.1",

pnpm-lock.yaml

Lines changed: 116 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/opentelemetry.ts

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,38 +18,46 @@ import 'dotenv/config';
1818

1919
import { setTimeout } from 'node:timers/promises';
2020

21-
import { NodeSDK, resources, metrics } from '@opentelemetry/sdk-node';
21+
import { NodeSDK, resources, metrics, tracing } from '@opentelemetry/sdk-node';
2222
import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node';
2323
import { ATTR_SERVICE_NAME } from '@opentelemetry/semantic-conventions';
2424
import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';
2525
import { ATTR_DEPLOYMENT_ENVIRONMENT_NAME } from '@opentelemetry/semantic-conventions/incubating';
26+
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto';
2627

2728
const ENV = process.env.ENVIRONMENT;
2829

30+
export const isOpenTelemetryEnabled = Boolean(process.env.NODE_ENV === 'production');
31+
export const batchSpanProcessor = new tracing.BatchSpanProcessor(new OTLPTraceExporter({}));
32+
2933
export const opentelemetrySDK = new NodeSDK({
3034
resource: new resources.Resource({
3135
[ATTR_SERVICE_NAME]: `bee-api`,
3236
[ATTR_DEPLOYMENT_ENVIRONMENT_NAME]: ENV
3337
}),
38+
spanProcessors: [batchSpanProcessor],
3439
metricReader: new metrics.PeriodicExportingMetricReader({ exporter: new OTLPMetricExporter() }),
3540
instrumentations: [...getNodeAutoInstrumentations()]
3641
});
37-
opentelemetrySDK.start();
38-
39-
let isShuttingDown = false;
40-
const { promise, resolve } = Promise.withResolvers<void>();
41-
42-
for (const event of ['beforeExit', 'SIGINT', 'SIGTERM']) {
43-
process.once(event, () => {
44-
if (!isShuttingDown) {
45-
isShuttingDown = true;
46-
Promise.race([opentelemetrySDK.shutdown(), setTimeout(5_000, null, { ref: false })])
47-
.catch((err) => {
48-
// eslint-disable-next-line no-console
49-
console.error(`Failed to execute shutdown hook`, err);
50-
})
51-
.finally(() => resolve());
52-
}
53-
return promise;
54-
});
42+
43+
if (isOpenTelemetryEnabled) {
44+
opentelemetrySDK.start();
45+
46+
let isShuttingDown = false;
47+
const { promise, resolve } = Promise.withResolvers<void>();
48+
49+
for (const event of ['beforeExit', 'SIGINT', 'SIGTERM']) {
50+
process.once(event, () => {
51+
if (!isShuttingDown) {
52+
isShuttingDown = true;
53+
Promise.race([opentelemetrySDK.shutdown(), setTimeout(5_000, null, { ref: false })])
54+
.catch((err) => {
55+
// eslint-disable-next-line no-console
56+
console.error(`Failed to execute shutdown hook`, err);
57+
})
58+
.finally(() => resolve());
59+
}
60+
return promise;
61+
});
62+
}
5563
}

src/runs/execution/execute.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ import { LoadedRun } from '@/runs/execution/types.js';
4646
import { UserResource } from '@/tools/entities/tool-resources/user-resource.entity.js';
4747
import { SystemResource } from '@/tools/entities/tool-resources/system-resource.entity.js';
4848
import { Attachment } from '@/messages/attachment.entity';
49+
import { batchSpanProcessor, isOpenTelemetryEnabled } from '@/opentelemetry.js';
4950

5051
const agentExecutionTime = new Summary({
5152
name: 'agent_execution_time_seconds',
@@ -144,6 +145,7 @@ export async function executeRun(run: LoadedRun) {
144145
);
145146

146147
await agentRun;
148+
if (isOpenTelemetryEnabled) await batchSpanProcessor.forceFlush();
147149

148150
endAgentExecutionTimer();
149151
run.complete();

src/server.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17+
import './opentelemetry.js';
1718
import '@/ui/auth-server.js';
1819

1920
import { JsonSchemaToTsProvider } from '@fastify/type-provider-json-schema-to-ts';

0 commit comments

Comments
 (0)