summaryrefslogtreecommitdiff
path: root/packages/core/src
diff options
context:
space:
mode:
authorJerop Kipruto <[email protected]>2025-06-13 03:51:41 -0400
committerGitHub <[email protected]>2025-06-13 03:51:41 -0400
commit95e4a60a83dd8e710ef69f78b3b57de4b4703344 (patch)
treef7dc9806066771f02d1c74789de75c2c458b47f5 /packages/core/src
parentb20c8389f3f483f3972c254ec97fff4004b7c75f (diff)
Telemetry: Auto-export to GCP if GOOGLE_CLOUD_PROJECT is set (#1003)
This change simplifies telemetry setup for users who want to integrate with GCP, as they no longer need to configure a local collector or an explicit endpoint if their project is already set up in the environment. This change updates the telemetry system to automatically export traces, logs, and metrics to Google Cloud Platform (GCP) if the `GOOGLE_CLOUD_PROJECT` environment variable is set and no explicit `telemetryOtlpEndpoint` is configured by the user. Key changes: - The default `telemetryOtlpEndpoint` in `Config` is now an empty string. - The `initializeTelemetry` SDK logic now prioritizes: - User-defined `telemetryOtlpEndpoint`. - `GOOGLE_CLOUD_PROJECT` for direct GCP export. - Console exporters as a fallback. - If an invalid `telemetryOtlpEndpoint` is provided, it falls back to console exporters with a warning. #750
Diffstat (limited to 'packages/core/src')
-rw-r--r--packages/core/src/config/config.ts3
-rw-r--r--packages/core/src/telemetry/sdk.ts73
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,