diff options
Diffstat (limited to 'packages/core/src')
| -rw-r--r-- | packages/core/src/config/config.ts | 3 | ||||
| -rw-r--r-- | packages/core/src/telemetry/sdk.ts | 73 |
2 files changed, 59 insertions, 17 deletions
diff --git a/packages/core/src/config/config.ts b/packages/core/src/config/config.ts index 3bb9815f..a54b51a1 100644 --- a/packages/core/src/config/config.ts +++ b/packages/core/src/config/config.ts @@ -141,8 +141,7 @@ export class Config { this.telemetry = params.telemetry ?? false; this.telemetryLogUserPromptsEnabled = params.telemetryLogUserPromptsEnabled ?? true; - this.telemetryOtlpEndpoint = - params.telemetryOtlpEndpoint ?? 'http://localhost:4317'; + this.telemetryOtlpEndpoint = params.telemetryOtlpEndpoint ?? ''; this.fileFilteringRespectGitIgnore = params.fileFilteringRespectGitIgnore ?? true; this.fileFilteringAllowBuildArtifacts = diff --git a/packages/core/src/telemetry/sdk.ts b/packages/core/src/telemetry/sdk.ts index 61f501a6..e1750a86 100644 --- a/packages/core/src/telemetry/sdk.ts +++ b/packages/core/src/telemetry/sdk.ts @@ -71,34 +71,77 @@ export function initializeTelemetry(config: Config): void { 'session.id': config.getSessionId(), }); - const otlpEndpoint = config.getTelemetryOtlpEndpoint(); - const grpcParsedEndpoint = parseGrpcEndpoint(otlpEndpoint); - const useOtlp = !!grpcParsedEndpoint; + const otlpEndpointSetting = config.getTelemetryOtlpEndpoint(); + const gcpProjectId = process.env.GOOGLE_CLOUD_PROJECT; - const spanExporter = useOtlp - ? new OTLPTraceExporter({ + let spanExporter; + let logExporter; + let metricReader; + + if (otlpEndpointSetting && otlpEndpointSetting.trim() !== '') { + const grpcParsedEndpoint = parseGrpcEndpoint(otlpEndpointSetting); + if (grpcParsedEndpoint) { + diag.info(`Using user-configured OTLP endpoint: ${grpcParsedEndpoint}`); + spanExporter = new OTLPTraceExporter({ url: grpcParsedEndpoint, compression: CompressionAlgorithm.GZIP, - }) - : new ConsoleSpanExporter(); - const logExporter = useOtlp - ? new OTLPLogExporter({ + }); + logExporter = new OTLPLogExporter({ url: grpcParsedEndpoint, compression: CompressionAlgorithm.GZIP, - }) - : new ConsoleLogRecordExporter(); - const metricReader = useOtlp - ? new PeriodicExportingMetricReader({ + }); + metricReader = new PeriodicExportingMetricReader({ exporter: new OTLPMetricExporter({ url: grpcParsedEndpoint, compression: CompressionAlgorithm.GZIP, }), exportIntervalMillis: 10000, - }) - : new PeriodicExportingMetricReader({ + }); + } else { + diag.warn( + `Invalid user-configured OTLP endpoint: "${otlpEndpointSetting}". Falling back to console exporter.`, + ); + spanExporter = new ConsoleSpanExporter(); + logExporter = new ConsoleLogRecordExporter(); + metricReader = new PeriodicExportingMetricReader({ exporter: new ConsoleMetricExporter(), exportIntervalMillis: 10000, }); + } + } else if (gcpProjectId) { + diag.info( + `No OTLP endpoint configured, GOOGLE_CLOUD_PROJECT detected (${gcpProjectId}). Exporting telemetry to Google Cloud.`, + ); + const gcpTraceUrl = 'https://trace.googleapis.com:443'; + const gcpMetricUrl = 'https://monitoring.googleapis.com:443'; + const gcpLogUrl = 'https://logging.googleapis.com:443'; + + spanExporter = new OTLPTraceExporter({ + url: gcpTraceUrl, + compression: CompressionAlgorithm.GZIP, + }); + logExporter = new OTLPLogExporter({ + url: gcpLogUrl, + compression: CompressionAlgorithm.GZIP, + }); + metricReader = new PeriodicExportingMetricReader({ + exporter: new OTLPMetricExporter({ + url: gcpMetricUrl, + compression: CompressionAlgorithm.GZIP, + }), + exportIntervalMillis: 10000, + }); + } else { + diag.info( + 'No OTLP endpoint or GOOGLE_CLOUD_PROJECT detected. Using console exporters.', + ); + spanExporter = new ConsoleSpanExporter(); + logExporter = new ConsoleLogRecordExporter(); + metricReader = new PeriodicExportingMetricReader({ + exporter: new ConsoleMetricExporter(), + exportIntervalMillis: 10000, + }); + } sdk = new NodeSDK({ resource, |
