Просмотр исходного кода

Implement custom metrics setup in OpenTelemetry integration

Yuki Takei 9 месяцев назад
Родитель
Сommit
52e4203c56

+ 10 - 0
apps/app/src/features/opentelemetry/server/custom-metrics/index.ts

@@ -1 +1,11 @@
 export { addApplicationMetrics } from './application-metrics';
+export { addUserCountsMetrics } from './user-counts-metrics';
+
+export const setupCustomMetrics = async(): Promise<void> => {
+  const { addApplicationMetrics } = await import('./application-metrics');
+  const { addUserCountsMetrics } = await import('./user-counts-metrics');
+
+  // Add custom metrics
+  addApplicationMetrics();
+  addUserCountsMetrics();
+};

+ 2 - 12
apps/app/src/features/opentelemetry/server/node-sdk-configuration.ts

@@ -11,9 +11,6 @@ import { configManager } from '~/server/service/config-manager';
 import { getGrowiVersion } from '~/utils/growi-version';
 
 import { httpInstrumentationConfig as httpInstrumentationConfigForAnonymize } from './anonymization';
-import { addApplicationMetrics } from './custom-metrics';
-import { addUserCountsMetrics } from './custom-metrics/user-counts-metrics';
-import { getOsResourceAttributes } from './custom-resource-attributes';
 import { ATTR_SERVICE_INSTANCE_ID } from './semconv';
 
 type Option = {
@@ -31,14 +28,9 @@ export const generateNodeSDKConfiguration = (opts?: Option): Configuration => {
   if (configuration == null) {
     const version = getGrowiVersion();
 
-    // Collect OS resource attributes
-    const osAttributes = getOsResourceAttributes();
-
     resource = resourceFromAttributes({
       [ATTR_SERVICE_NAME]: 'growi',
       [ATTR_SERVICE_VERSION]: version,
-      // Add OS resource attributes
-      ...osAttributes,
     });
 
     // Data anonymization configuration
@@ -67,9 +59,6 @@ export const generateNodeSDKConfiguration = (opts?: Option): Configuration => {
       })],
     };
 
-    // add custom metrics
-    addApplicationMetrics();
-    addUserCountsMetrics();
   }
 
   return configuration;
@@ -87,10 +76,11 @@ export const generateAdditionalResourceAttributes = async(opts?: Option): Promis
   const serviceInstanceId = configManager.getConfig('otel:serviceInstanceId')
     ?? configManager.getConfig('app:serviceInstanceId');
 
-  const { getApplicationResourceAttributes } = await import('./custom-resource-attributes');
+  const { getApplicationResourceAttributes, getOsResourceAttributes } = await import('./custom-resource-attributes');
 
   return resource.merge(resourceFromAttributes({
     [ATTR_SERVICE_INSTANCE_ID]: serviceInstanceId,
     ...await getApplicationResourceAttributes(),
+    ...await getOsResourceAttributes(),
   }));
 };

+ 4 - 0
apps/app/src/features/opentelemetry/server/node-sdk.ts

@@ -4,6 +4,7 @@ import type { NodeSDK } from '@opentelemetry/sdk-node';
 import { configManager } from '~/server/service/config-manager';
 import loggerFactory from '~/utils/logger';
 
+import { setupCustomMetrics } from './custom-metrics';
 import { setResource } from './node-sdk-resource';
 
 const logger = loggerFactory('growi:opentelemetry:server');
@@ -70,6 +71,9 @@ For more information, see https://docs.growi.org/en/admin-guide/admin-cookbook/t
     const enableAnonymization = configManager.getConfig('otel:anonymizeInBestEffort', ConfigSource.env);
 
     const sdkConfig = generateNodeSDKConfiguration({ enableAnonymization });
+
+    setupCustomMetrics();
+
     sdkInstance = new NodeSDK(sdkConfig);
   }
 };