|
|
@@ -5,6 +5,10 @@ import path from 'path';
|
|
|
import { createTerminus } from '@godaddy/terminus';
|
|
|
import attachmentRoutes from '@growi/remark-attachment-refs/dist/server';
|
|
|
import lsxRoutes from '@growi/remark-lsx/dist/server/index.cjs';
|
|
|
+import { Resource } from '@opentelemetry/resources';
|
|
|
+import { NodeSDK } from '@opentelemetry/sdk-node';
|
|
|
+import { SimpleSpanProcessor, ConsoleSpanExporter } from '@opentelemetry/sdk-trace-node';
|
|
|
+import { SEMRESATTRS_SERVICE_NAME } from '@opentelemetry/semantic-conventions';
|
|
|
import mongoose from 'mongoose';
|
|
|
import next from 'next';
|
|
|
|
|
|
@@ -458,6 +462,15 @@ Crowi.prototype.start = async function() {
|
|
|
await this.init();
|
|
|
await this.buildServer();
|
|
|
|
|
|
+ // setup instrumentation for OpenTelemetry
|
|
|
+ const sdk = new NodeSDK({
|
|
|
+ resource: new Resource({
|
|
|
+ [SEMRESATTRS_SERVICE_NAME]: 'next-app',
|
|
|
+ }),
|
|
|
+ spanProcessor: new SimpleSpanProcessor(new ConsoleSpanExporter()),
|
|
|
+ });
|
|
|
+ sdk.start();
|
|
|
+
|
|
|
// setup Next.js
|
|
|
this.nextApp = next({ dev });
|
|
|
await this.nextApp.prepare();
|