@@ -170,34 +170,44 @@ def _default_runnable_builder(
170
170
def _default_instrumentor_builder (project_id : str ):
171
171
from vertexai .agent_engines import _utils
172
172
173
- cloud_trace_exporter = _utils ._import_cloud_trace_exporter_or_warn ()
174
- cloud_trace_v2 = _utils ._import_cloud_trace_v2_or_warn ()
173
+ otlp_trace_exporter = _utils ._import_otlp_trace_exporter_or_warn ()
175
174
openinference_langchain = _utils ._import_openinference_langchain_or_warn ()
176
175
opentelemetry = _utils ._import_opentelemetry_or_warn ()
177
176
opentelemetry_sdk_trace = _utils ._import_opentelemetry_sdk_trace_or_warn ()
177
+ opentelemetry_sdk_resources = _utils ._import_opentelemetry_sdk_resources_or_warn ()
178
178
if all (
179
179
(
180
- cloud_trace_exporter ,
181
- cloud_trace_v2 ,
180
+ otlp_trace_exporter ,
182
181
openinference_langchain ,
183
182
opentelemetry ,
184
183
opentelemetry_sdk_trace ,
184
+ opentelemetry_sdk_resources ,
185
185
)
186
186
):
187
187
import google .auth
188
+ import os
189
+
190
+ SERVICE_INSTANCE_ID = opentelemetry_sdk_resources .SERVICE_INSTANCE_ID
191
+ SERVICE_NAME = opentelemetry_sdk_resources .SERVICE_NAME
192
+ AGENT_ENGINE_ID = os .environ .get ("GOOGLE_CLOUD_AGENT_ENGINE_ID" , "" )
188
193
189
194
credentials , _ = google .auth .default ()
190
- span_exporter = cloud_trace_exporter .CloudTraceSpanExporter (
191
- project_id = project_id ,
192
- client = cloud_trace_v2 .TraceServiceClient (
193
- credentials = credentials .with_quota_project (project_id ),
194
- ),
195
+ span_exporter = otlp_trace_exporter .OTLPSpanExporter (
196
+ session = google .auth .transport .requests .AuthorizedSession (credentials ),
197
+ endpoint = "https://telemetry.googleapis.com/v1/traces" ,
195
198
)
196
199
span_processor : SpanProcessor = (
197
200
opentelemetry_sdk_trace .export .SimpleSpanProcessor (
198
201
span_exporter = span_exporter ,
199
202
)
200
203
)
204
+ resource = opentelemetry_sdk_trace .Resource .create (
205
+ attributes = {
206
+ "gcp.project_id" : project_id ,
207
+ SERVICE_NAME : "aiplatform.googleapis.com/ReasoningEngine" ,
208
+ SERVICE_INSTANCE_ID : AGENT_ENGINE_ID ,
209
+ }
210
+ )
201
211
tracer_provider : TracerProvider = opentelemetry .trace .get_tracer_provider ()
202
212
# Get the appropriate tracer provider:
203
213
# 1. If _TRACER_PROVIDER is already set, use that.
@@ -206,7 +216,7 @@ def _default_instrumentor_builder(project_id: str):
206
216
# 3. As a final fallback, use _PROXY_TRACER_PROVIDER.
207
217
# If none of the above is set, we log a warning, and
208
218
# create a tracer provider.
209
- if not tracer_provider :
219
+ if AGENT_ENGINE_ID or not tracer_provider :
210
220
from google .cloud .aiplatform import base
211
221
212
222
_LOGGER = base .Logger (__name__ )
@@ -216,13 +226,17 @@ def _default_instrumentor_builder(project_id: str):
216
226
"OTEL_PYTHON_TRACER_PROVIDER, _TRACER_PROVIDER, "
217
227
"or _PROXY_TRACER_PROVIDER."
218
228
)
219
- tracer_provider = opentelemetry_sdk_trace .TracerProvider ()
229
+ tracer_provider = opentelemetry_sdk_trace .TracerProvider (
230
+ resource = resource ,
231
+ )
220
232
opentelemetry .trace .set_tracer_provider (tracer_provider )
221
233
# Avoids AttributeError:
222
234
# 'ProxyTracerProvider' and 'NoOpTracerProvider' objects has no
223
235
# attribute 'add_span_processor'.
224
236
if _utils .is_noop_or_proxy_tracer_provider (tracer_provider ):
225
- tracer_provider = opentelemetry_sdk_trace .TracerProvider ()
237
+ tracer_provider = opentelemetry_sdk_trace .TracerProvider (
238
+ resource = resource ,
239
+ )
226
240
opentelemetry .trace .set_tracer_provider (tracer_provider )
227
241
# Avoids OpenTelemetry client already exists error.
228
242
_override_active_span_processor (
0 commit comments