Skip to content
Open
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
([#3567](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3567))
- `opentelemetry-resource-detector-containerid`: make it more quiet on platforms without cgroups
([#3579](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3579))
- `opentelemetry-instrumentation-google-genai`: migrate off the deprecated events API to use the logs API
([#3625](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3624))

### Added

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

from typing import Any, Collection, Optional

from opentelemetry._events import get_event_logger_provider
from opentelemetry._logs import get_logger_provider
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
from opentelemetry.metrics import get_meter_provider
from opentelemetry.trace import get_tracer_provider
Expand Down Expand Up @@ -49,13 +49,13 @@ def _instrument(self, **kwargs: Any):
tracer_provider = (
kwargs.get("tracer_provider") or get_tracer_provider()
)
event_logger_provider = (
kwargs.get("event_logger_provider") or get_event_logger_provider()
logger_provider = (
kwargs.get("logger_provider") or get_logger_provider()
)
meter_provider = kwargs.get("meter_provider") or get_meter_provider()
otel_wrapper = OTelWrapper.from_providers(
tracer_provider=tracer_provider,
event_logger_provider=event_logger_provider,
logger_provider=logger_provider,
meter_provider=meter_provider,
)
self._generate_content_snapshot = instrument_generate_content(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

import google.genai

from opentelemetry._events import Event
from opentelemetry._logs import LogRecord
from opentelemetry.semconv._incubating.metrics import gen_ai_metrics
from opentelemetry.semconv.schemas import Schemas

Expand All @@ -36,9 +36,9 @@


class OTelWrapper:
def __init__(self, tracer, event_logger, meter):
def __init__(self, tracer, logger_provider, meter):
self._tracer = tracer
self._event_logger = event_logger
self._logger_provider = logger_provider
self._meter = meter
self._operation_duration_metric = (
gen_ai_metrics.create_gen_ai_client_operation_duration(meter)
Expand All @@ -48,12 +48,12 @@ def __init__(self, tracer, event_logger, meter):
)

@staticmethod
def from_providers(tracer_provider, event_logger_provider, meter_provider):
def from_providers(tracer_provider, logger_provider, meter_provider):
return OTelWrapper(
tracer_provider.get_tracer(
_SCOPE_NAME, _LIBRARY_VERSION, _SCHEMA_URL, _SCOPE_ATTRIBUTES
),
event_logger_provider.get_event_logger(
logger_provider.get_logger(
_SCOPE_NAME, _LIBRARY_VERSION, _SCHEMA_URL, _SCOPE_ATTRIBUTES
),
meter=meter_provider.get_meter(
Expand Down Expand Up @@ -88,5 +88,7 @@ def log_response_content(self, attributes, body):
self._log_event(event_name, attributes, body)

def _log_event(self, event_name, attributes, body):
event = Event(event_name, body=body, attributes=attributes)
self._event_logger.emit(event)
event = LogRecord(
event_name=event_name, body=body, attributes=attributes
)
self._logger_provider.emit(event)
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,14 @@
# limitations under the License.


import opentelemetry._events
import opentelemetry._logs._internal
import opentelemetry.metrics._internal
import opentelemetry.trace
from opentelemetry._events import (
get_event_logger_provider,
set_event_logger_provider,
from opentelemetry._logs import (
get_logger_provider,
set_logger_provider,
)
from opentelemetry._logs import get_logger_provider, set_logger_provider
from opentelemetry.metrics import get_meter_provider, set_meter_provider
from opentelemetry.sdk._events import EventLoggerProvider
from opentelemetry.sdk._logs import LoggerProvider
from opentelemetry.sdk._logs.export import (
InMemoryLogExporter,
Expand All @@ -43,22 +40,19 @@
def _bypass_otel_once():
opentelemetry.trace._TRACER_PROVIDER_SET_ONCE = Once()
opentelemetry._logs._internal._LOGGER_PROVIDER_SET_ONCE = Once()
opentelemetry._events._EVENT_LOGGER_PROVIDER_SET_ONCE = Once()
opentelemetry.metrics._internal._METER_PROVIDER_SET_ONCE = Once()


class OTelProviderSnapshot:
def __init__(self):
self._tracer_provider = get_tracer_provider()
self._logger_provider = get_logger_provider()
self._event_logger_provider = get_event_logger_provider()
self._meter_provider = get_meter_provider()

def restore(self):
_bypass_otel_once()
set_tracer_provider(self._tracer_provider)
set_logger_provider(self._logger_provider)
set_event_logger_provider(self._event_logger_provider)
set_meter_provider(self._meter_provider)


Expand All @@ -82,6 +76,10 @@ def attributes(self):
def body(self):
return self._log_data.log_record.body

@property
def event_name(self):
return self._log_data.log_record.event_name

def __str__(self):
return self._log_data.log_record.to_json()

Expand Down Expand Up @@ -175,23 +173,21 @@ def assert_does_not_have_span_named(self, name):
assert span is None, f"Found unexpected span named {name}"

def get_event_named(self, event_name):
for event in self.get_finished_logs():
event_name_attr = event.attributes.get("event.name")
if event_name_attr is None:
continue
if event_name_attr == event_name:
return event
return None
return next(
(
event
for event in self.get_finished_logs()
if event.event_name == event_name
),
None,
)

def get_events_named(self, event_name):
result = []
for event in self.get_finished_logs():
event_name_attr = event.attributes.get("event.name")
if event_name_attr is None:
continue
if event_name_attr == event_name:
result.append(event)
return result
return [
event
for event in self.get_finished_logs()
if event.event_name == event_name
]

def assert_has_event_named(self, name):
event = self.get_event_named(name)
Expand Down Expand Up @@ -219,8 +215,6 @@ def _install_logs(self):
provider = LoggerProvider()
provider.add_log_record_processor(SimpleLogRecordProcessor(self._logs))
set_logger_provider(provider)
event_provider = EventLoggerProvider(logger_provider=provider)
set_event_logger_provider(event_provider)

def _install_metrics(self):
provider = MeterProvider(metric_readers=[self._metrics])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

from google.genai import types as genai_types

from opentelemetry._events import get_event_logger_provider
from opentelemetry._logs import get_logger_provider
from opentelemetry.instrumentation.google_genai import (
otel_wrapper,
tool_call_wrapper,
Expand All @@ -35,7 +35,7 @@ def setUp(self):
self._otel.install()
self._otel_wrapper = otel_wrapper.OTelWrapper.from_providers(
get_tracer_provider(),
get_event_logger_provider(),
get_logger_provider(),
get_meter_provider(),
)

Expand Down
Loading