Skip to content

Commit 82db4ad

Browse files
vertex-sdk-botcopybara-github
authored andcommitted
feat: Update the ADK template to export logs directly to Cloud Logging when OTEL_SEMCONV_STABILITY_OPT_IN is set to "gen_ai_latest_experimental".
PiperOrigin-RevId: 869724527
1 parent 7572601 commit 82db4ad

File tree

2 files changed

+56
-18
lines changed
  • vertexai
    • agent_engines/templates
    • preview/reasoning_engines/templates

2 files changed

+56
-18
lines changed

vertexai/agent_engines/templates/adk.py

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -454,17 +454,36 @@ def force_flush(
454454
return True
455455

456456
logger_provider = opentelemetry.sdk._logs.LoggerProvider(resource=resource)
457-
logger_provider.add_log_record_processor(
458-
_SimpleLogRecordProcessor(
459-
opentelemetry.exporter.cloud_logging.CloudLoggingExporter(
460-
project_id=project_id,
461-
default_log_name=os.getenv(
462-
"GCP_DEFAULT_LOG_NAME", "adk-on-agent-engine"
457+
# Use the legacy log processor when experimental semconv is enabled.
458+
# Exporting JSON logs to stdout is bugged; Agent Engine fails to
459+
# correctly parse the `gen_ai.client.inference.operation.details`
460+
# messages.
461+
# TODO: b/480102541 - Unify both branches once the regression is fixed.
462+
if "gen_ai_latest_experimental" in os.getenv(
463+
"OTEL_SEMCONV_STABILITY_OPT_IN", ""
464+
).split(","):
465+
logger_provider.add_log_record_processor(
466+
opentelemetry.sdk._logs.export.BatchLogRecordProcessor(
467+
opentelemetry.exporter.cloud_logging.CloudLoggingExporter(
468+
project_id=project_id,
469+
default_log_name=os.getenv(
470+
"GCP_DEFAULT_LOG_NAME", "adk-on-agent-engine"
471+
),
463472
),
464-
structured_json_file=sys.stdout,
465-
),
473+
)
474+
)
475+
else:
476+
logger_provider.add_log_record_processor(
477+
_SimpleLogRecordProcessor(
478+
opentelemetry.exporter.cloud_logging.CloudLoggingExporter(
479+
project_id=project_id,
480+
default_log_name=os.getenv(
481+
"GCP_DEFAULT_LOG_NAME", "adk-on-agent-engine"
482+
),
483+
structured_json_file=sys.stdout,
484+
),
485+
)
466486
)
467-
)
468487
event_logger_provider = opentelemetry.sdk._events.EventLoggerProvider(
469488
logger_provider=logger_provider
470489
)

vertexai/preview/reasoning_engines/templates/adk.py

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -456,17 +456,36 @@ def force_flush(
456456
return True
457457

458458
logger_provider = opentelemetry.sdk._logs.LoggerProvider(resource=resource)
459-
logger_provider.add_log_record_processor(
460-
_SimpleLogRecordProcessor(
461-
opentelemetry.exporter.cloud_logging.CloudLoggingExporter(
462-
project_id=project_id,
463-
default_log_name=os.getenv(
464-
"GCP_DEFAULT_LOG_NAME", "adk-on-agent-engine"
459+
# Use the legacy log processor when experimental semconv is enabled.
460+
# Exporting JSON logs to stdout is bugged; Agent Engine fails to
461+
# correctly parse the `gen_ai.client.inference.operation.details`
462+
# messages.
463+
# TODO: b/480102541 - Unify both branches once the regression is fixed.
464+
if "gen_ai_latest_experimental" in os.getenv(
465+
"OTEL_SEMCONV_STABILITY_OPT_IN", ""
466+
).split(","):
467+
logger_provider.add_log_record_processor(
468+
opentelemetry.sdk._logs.export.BatchLogRecordProcessor(
469+
opentelemetry.exporter.cloud_logging.CloudLoggingExporter(
470+
project_id=project_id,
471+
default_log_name=os.getenv(
472+
"GCP_DEFAULT_LOG_NAME", "adk-on-agent-engine"
473+
),
465474
),
466-
structured_json_file=sys.stdout,
467-
),
475+
)
476+
)
477+
else:
478+
logger_provider.add_log_record_processor(
479+
_SimpleLogRecordProcessor(
480+
opentelemetry.exporter.cloud_logging.CloudLoggingExporter(
481+
project_id=project_id,
482+
default_log_name=os.getenv(
483+
"GCP_DEFAULT_LOG_NAME", "adk-on-agent-engine"
484+
),
485+
structured_json_file=sys.stdout,
486+
),
487+
)
468488
)
469-
)
470489
event_logger_provider = opentelemetry.sdk._events.EventLoggerProvider(
471490
logger_provider=logger_provider
472491
)

0 commit comments

Comments
 (0)