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

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

@@ -1,4 +1,3 @@
-import type { Attributes } from '@opentelemetry/api';
 import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node';
 import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-grpc';
 import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-grpc';
@@ -7,7 +6,6 @@ import { resourceFromAttributes } from '@opentelemetry/resources';
 import { PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics';
 import type { NodeSDKConfiguration } from '@opentelemetry/sdk-node';
 import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
-import { ATTR_SERVICE_INSTANCE_ID } from '@opentelemetry/semantic-conventions/incubating';
 
 import { configManager } from '~/server/service/config-manager';
 import { getGrowiVersion } from '~/utils/growi-version';
@@ -16,6 +14,7 @@ import { httpInstrumentationConfig as httpInstrumentationConfigForAnonymize } fr
 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 = {
   enableAnonymization?: boolean,

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

@@ -1,6 +1,5 @@
 import { ConfigSource } from '@growi/core/dist/interfaces';
 import type { NodeSDK } from '@opentelemetry/sdk-node';
-import { ATTR_SERVICE_INSTANCE_ID } from '@opentelemetry/semantic-conventions/incubating';
 
 import { configManager } from '~/server/service/config-manager';
 import loggerFactory from '~/utils/logger';

+ 39 - 0
apps/app/src/features/opentelemetry/server/semconv.ts

@@ -0,0 +1,39 @@
+/* eslint-disable max-len */
+/*
+### Unstable SemConv
+
+<!-- Dev Note: ^^ This '#unstable-semconv' anchor is being used in jsdoc links in the code. -->
+
+Because the "incubating" entry-point may include breaking changes in minor versions, it is recommended that instrumentation libraries **not** import `@opentelemetry/semantic-conventions/incubating` in runtime code, but instead **copy relevant definitions into their own code base**. (This is the same [recommendation](https://opentelemetry.io/docs/specs/semconv/non-normative/code-generation/#stability-and-versioning) as for other languages.)
+
+For example, create a "src/semconv.ts" (or "lib/semconv.js" if implementing in JavaScript) file that copies from [experimental_attributes.ts](./src/experimental_attributes.ts) or [experimental_metrics.ts](./src/experimental_metrics.ts):
+
+```ts
+// src/semconv.ts
+export const ATTR_DB_NAMESPACE = 'db.namespace';
+export const ATTR_DB_OPERATION_NAME = 'db.operation.name';
+```
+
+```ts
+// src/instrumentation.ts
+import {
+  ATTR_SERVER_PORT,
+  ATTR_SERVER_ADDRESS,
+} from '@opentelemetry/semantic-conventions';
+import {
+  ATTR_DB_NAMESPACE,
+  ATTR_DB_OPERATION_NAME,
+} from './semconv';
+
+span.setAttributes({
+  [ATTR_DB_NAMESPACE]: ...,
+  [ATTR_DB_OPERATION_NAME]: ...,
+  [ATTR_SERVER_PORT]: ...,
+  [ATTR_SERVER_ADDRESS]: ...,
+})
+```
+
+Occasionally, one should review changes to `@opentelemetry/semantic-conventions` to see if any used unstable conventions have changed or been stabilized. However, an update to a newer minor version of the package will never be breaking.
+*/
+
+export declare const ATTR_SERVICE_INSTANCE_ID: 'service.instance.id';