mirror of
https://github.com/encounter/adk-python.git
synced 2026-07-09 18:19:28 -07:00
feat(otel): Add GenAI Instrumentation if --otel_to_cloud is enabled
PiperOrigin-RevId: 808460137
This commit is contained in:
committed by
Copybara-Service
parent
712da1bd36
commit
cee365a13d
+1
-4
@@ -151,10 +151,7 @@ extensions = [
|
||||
]
|
||||
|
||||
otel-gcp = [
|
||||
"opentelemetry-exporter-gcp-logging>=1.9.0a0, <2.0.0",
|
||||
"opentelemetry-exporter-gcp-monitoring>=1.9.0a0, <2.0.0",
|
||||
"opentelemetry-exporter-gcp-trace>=1.9.0, <2.0.0",
|
||||
"opentelemetry-resourcedetector-gcp>=1.9.0a0, <2.0.0",
|
||||
"opentelemetry-instrumentation-google-genai>=0.3b0, <1.0.0",
|
||||
]
|
||||
|
||||
|
||||
|
||||
@@ -267,9 +267,7 @@ def _setup_telemetry(
|
||||
# TODO - remove the condition and else branch here once
|
||||
# maybe_set_otel_providers is no longer experimental.
|
||||
if otel_to_cloud:
|
||||
_setup_telemetry_experimental(
|
||||
otel_to_cloud=otel_to_cloud, internal_exporters=internal_exporters
|
||||
)
|
||||
_setup_telemetry_experimental(internal_exporters=internal_exporters)
|
||||
else:
|
||||
# Old logic - to be removed when above leaves experimental.
|
||||
tracer_provider = TracerProvider()
|
||||
@@ -279,7 +277,6 @@ def _setup_telemetry(
|
||||
|
||||
|
||||
def _setup_telemetry_experimental(
|
||||
otel_to_cloud: bool = False,
|
||||
internal_exporters: list[SpanProcessor] = None,
|
||||
):
|
||||
from ..telemetry.setup import maybe_set_otel_providers
|
||||
@@ -293,25 +290,37 @@ def _setup_telemetry_experimental(
|
||||
# Register ADK-specific exporters in trace provider.
|
||||
otel_hooks_to_add.append(OTelHooks(span_processors=internal_exporters))
|
||||
|
||||
if otel_to_cloud:
|
||||
from ..telemetry.google_cloud import get_gcp_exporters
|
||||
from ..telemetry.google_cloud import get_gcp_resource
|
||||
from ..telemetry.google_cloud import get_gcp_exporters
|
||||
from ..telemetry.google_cloud import get_gcp_resource
|
||||
|
||||
otel_hooks_to_add.append(
|
||||
get_gcp_exporters(
|
||||
# TODO - use trace_to_cloud here as well once otel_to_cloud is no
|
||||
# longer experimental.
|
||||
enable_cloud_tracing=True,
|
||||
enable_cloud_metrics=True,
|
||||
enable_cloud_logging=True,
|
||||
)
|
||||
)
|
||||
otel_resource = get_gcp_resource()
|
||||
otel_hooks_to_add.append(
|
||||
get_gcp_exporters(
|
||||
# TODO - use trace_to_cloud here as well once otel_to_cloud is no
|
||||
# longer experimental.
|
||||
enable_cloud_tracing=True,
|
||||
enable_cloud_metrics=True,
|
||||
enable_cloud_logging=True,
|
||||
)
|
||||
)
|
||||
otel_resource = get_gcp_resource()
|
||||
|
||||
maybe_set_otel_providers(
|
||||
otel_hooks_to_setup=otel_hooks_to_add, otel_resource=otel_resource
|
||||
)
|
||||
|
||||
# Set instrumentation to enable emitting OTel data from GenAISDK
|
||||
# Currently the instrumentation lib is in extras dependencies, make sure to
|
||||
# warn the user if it's not installed.
|
||||
try:
|
||||
from opentelemetry.instrumentation.google_genai import GoogleGenAiSdkInstrumentor
|
||||
|
||||
GoogleGenAiSdkInstrumentor().instrument()
|
||||
except ImportError:
|
||||
logger.warning(
|
||||
"Unable to import GoogleGenAiSdkInstrumentor - some"
|
||||
" telemetry will be disabled. Make sure to install google-adk[otel-gcp]"
|
||||
)
|
||||
|
||||
|
||||
class AdkWebServer:
|
||||
"""Helper class for setting up and running the ADK web server on FastAPI.
|
||||
|
||||
@@ -18,9 +18,11 @@ from dataclasses import dataclass
|
||||
from dataclasses import field
|
||||
from typing import Optional
|
||||
|
||||
from opentelemetry import _events
|
||||
from opentelemetry import _logs
|
||||
from opentelemetry import metrics
|
||||
from opentelemetry import trace
|
||||
from opentelemetry.sdk._events import EventLoggerProvider
|
||||
from opentelemetry.sdk._logs import LoggerProvider
|
||||
from opentelemetry.sdk._logs import LogRecordProcessor
|
||||
from opentelemetry.sdk.metrics import MeterProvider
|
||||
@@ -104,6 +106,9 @@ def maybe_set_otel_providers(
|
||||
for exporter in log_record_processors:
|
||||
new_logger_provider.add_log_record_processor(exporter)
|
||||
_logs.set_logger_provider(new_logger_provider)
|
||||
# Add event provider to logger provider to support gen_ai events.
|
||||
event_logger_provider = EventLoggerProvider(new_logger_provider)
|
||||
_events.set_event_logger_provider(event_logger_provider)
|
||||
|
||||
|
||||
def _get_otel_resource() -> Resource:
|
||||
|
||||
Reference in New Issue
Block a user