|
@@ -1,4 +1,3 @@
|
|
|
-import { diag, type DiagLogger } from '@opentelemetry/api';
|
|
|
|
|
import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node';
|
|
import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node';
|
|
|
import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-grpc';
|
|
import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-grpc';
|
|
|
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-grpc';
|
|
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-grpc';
|
|
@@ -11,83 +10,10 @@ import { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_INSTANCE_ID, SEMRESATTRS_
|
|
|
import { configManager } from '~/server/service/config-manager';
|
|
import { configManager } from '~/server/service/config-manager';
|
|
|
import loggerFactory from '~/utils/logger';
|
|
import loggerFactory from '~/utils/logger';
|
|
|
|
|
|
|
|
|
|
+import { initLogger } from './logger';
|
|
|
|
|
|
|
|
-const logger = loggerFactory('growi:opentelemetry');
|
|
|
|
|
-
|
|
|
|
|
-const loggerForDiag = loggerFactory('growi:opentelemetry:diag');
|
|
|
|
|
-
|
|
|
|
|
-class BunyanOTelLogger implements DiagLogger {
|
|
|
|
|
-
|
|
|
|
|
- private parseMessage(message: string, args: unknown[]): { logMessage: string, data: object } {
|
|
|
|
|
- let logMessage = message;
|
|
|
|
|
- let data = {};
|
|
|
|
|
-
|
|
|
|
|
- // check whether the message is a JSON string
|
|
|
|
|
- try {
|
|
|
|
|
- const parsedMessage = JSON.parse(message);
|
|
|
|
|
- if (typeof parsedMessage === 'object' && parsedMessage !== null) {
|
|
|
|
|
- data = parsedMessage;
|
|
|
|
|
- // if parsed successfully, use 'message' property as log message
|
|
|
|
|
- logMessage = 'message' in data && typeof data.message === 'string'
|
|
|
|
|
- ? data.message
|
|
|
|
|
- : message;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- catch (e) {
|
|
|
|
|
- // do nothing if the message is not a JSON string
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // merge additional data
|
|
|
|
|
- if (args.length > 0) {
|
|
|
|
|
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
|
|
|
- const argsData = (args as any).reduce((acc, arg) => {
|
|
|
|
|
- if (typeof arg === 'string') {
|
|
|
|
|
- try {
|
|
|
|
|
- const parsed = JSON.parse(arg);
|
|
|
|
|
- return { ...acc, ...parsed };
|
|
|
|
|
- }
|
|
|
|
|
- catch (e) {
|
|
|
|
|
- return { ...acc, additionalInfo: arg };
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- return { ...acc, ...arg };
|
|
|
|
|
- }, {});
|
|
|
|
|
- data = { ...data, ...argsData };
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- return { logMessage, data };
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- error(message: string, ...args): void {
|
|
|
|
|
- const { logMessage, data } = this.parseMessage(message, args);
|
|
|
|
|
- loggerForDiag.error(logMessage, data);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- warn(message: string, ...args): void {
|
|
|
|
|
- const { logMessage, data } = this.parseMessage(message, args);
|
|
|
|
|
- loggerForDiag.error(logMessage, data);
|
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
- info(message: string, ...args): void {
|
|
|
|
|
- const { logMessage, data } = this.parseMessage(message, args);
|
|
|
|
|
- loggerForDiag.error(logMessage, data);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- debug(message: string, ...args): void {
|
|
|
|
|
- const { logMessage, data } = this.parseMessage(message, args);
|
|
|
|
|
- loggerForDiag.error(logMessage, data);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- verbose(message: string, ...args): void {
|
|
|
|
|
- const { logMessage, data } = this.parseMessage(message, args);
|
|
|
|
|
- loggerForDiag.error(logMessage, data);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-// Enable global logger for OpenTelemetry
|
|
|
|
|
-diag.setLogger(new BunyanOTelLogger());
|
|
|
|
|
|
|
+const logger = loggerFactory('growi:opentelemetry');
|
|
|
|
|
|
|
|
|
|
|
|
|
let sdkInstance: NodeSDK;
|
|
let sdkInstance: NodeSDK;
|
|
@@ -130,6 +56,8 @@ function overwriteSdkDisabled(): void {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
export const startInstrumentation = (version: string): void => {
|
|
export const startInstrumentation = (version: string): void => {
|
|
|
|
|
+ initLogger();
|
|
|
|
|
+
|
|
|
overwriteSdkDisabled();
|
|
overwriteSdkDisabled();
|
|
|
|
|
|
|
|
if (sdkInstance != null) {
|
|
if (sdkInstance != null) {
|