Skip to content

Commit 7876e1f

Browse files
Changing default OTLP exporter to be the grpc one and adding a log
1 parent 9f8ed47 commit 7876e1f

1 file changed

Lines changed: 27 additions & 44 deletions

File tree

  • libraries/microsoft-agents-a365-observability-core/microsoft_agents_a365/observability/core

libraries/microsoft-agents-a365-observability-core/microsoft_agents_a365/observability/core/config.py

Lines changed: 27 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,17 @@
88
from typing import Any, Optional
99

1010
from opentelemetry import trace
11-
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import (
12-
OTLPSpanExporter as GrpcOTLPSpanExporter,
13-
)
14-
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
11+
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
1512
from opentelemetry.sdk.resources import SERVICE_NAME, SERVICE_NAMESPACE, Resource
1613
from opentelemetry.sdk.trace import TracerProvider
1714
from opentelemetry.sdk.trace.export import ConsoleSpanExporter
15+
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
1816

1917
from .exporters.agent365_exporter import _Agent365Exporter
2018
from .exporters.agent365_exporter_options import Agent365ExporterOptions
2119
from .exporters.enriching_span_processor import (
2220
_EnrichingBatchSpanProcessor,
2321
)
24-
from .exporters.spectra_exporter_options import SpectraExporterOptions
2522
from .exporters.utils import is_agent365_exporter_enabled
2623
from .trace_processor.span_processor import SpanProcessor
2724

@@ -62,7 +59,7 @@ def configure(
6259
logger_name: str = DEFAULT_LOGGER_NAME,
6360
token_resolver: Callable[[str, str], str | None] | None = None,
6461
cluster_category: str = "prod",
65-
exporter_options: Agent365ExporterOptions | SpectraExporterOptions | None = None,
62+
exporter_options: Optional[Agent365ExporterOptions] = None,
6663
suppress_invoke_agent_input: bool = False,
6764
**kwargs: Any,
6865
) -> bool:
@@ -76,10 +73,9 @@ def configure(
7673
Use exporter_options instead.
7774
:param cluster_category: (Deprecated) Environment / cluster category (e.g. "prod").
7875
Use exporter_options instead.
79-
:param exporter_options: Exporter configuration. Pass Agent365ExporterOptions for A365 API
80-
export, SpectraExporterOptions for Spectra Collector sidecar export, or None (default)
81-
to construct Agent365ExporterOptions from legacy parameters.
82-
:param suppress_invoke_agent_input: If True, suppress input messages for InvokeAgent spans.
76+
:param exporter_options: Agent365ExporterOptions instance for configuring the exporter.
77+
If provided, exporter_options takes precedence. If exporter_options is None, the token_resolver and cluster_category parameters are used as fallback/legacy support to construct a default Agent365ExporterOptions instance.
78+
:param suppress_invoke_agent_input: If True, suppress input messages for spans that are children of InvokeAgent spans.
8379
:return: True if configuration succeeded, False otherwise.
8480
"""
8581
try:
@@ -105,7 +101,7 @@ def _configure_internal(
105101
logger_name: str,
106102
token_resolver: Callable[[str, str], str | None] | None = None,
107103
cluster_category: str = "prod",
108-
exporter_options: Agent365ExporterOptions | SpectraExporterOptions | None = None,
104+
exporter_options: Optional[Agent365ExporterOptions] = None,
109105
suppress_invoke_agent_input: bool = False,
110106
**kwargs: Any,
111107
) -> bool:
@@ -161,43 +157,33 @@ def _configure_internal(
161157
"max_export_batch_size": exporter_options.max_export_batch_size,
162158
}
163159

164-
# Type-based exporter dispatch
165-
if isinstance(exporter_options, SpectraExporterOptions):
166-
# Spectra path — OTLP exporter to sidecar
167-
# ENABLE_A365_OBSERVABILITY_EXPORTER is intentionally ignored.
168-
if exporter_options.protocol == "grpc":
169-
exporter = GrpcOTLPSpanExporter(
170-
endpoint=exporter_options.endpoint,
171-
insecure=exporter_options.insecure,
172-
)
173-
else:
174-
exporter = OTLPSpanExporter(
175-
endpoint=exporter_options.endpoint,
176-
)
177-
178-
elif is_agent365_exporter_enabled() and exporter_options.token_resolver is not None:
160+
exporter = None
161+
if is_agent365_exporter_enabled() and exporter_options.token_resolver is not None:
179162
exporter = _Agent365Exporter(
180163
token_resolver=exporter_options.token_resolver,
181164
cluster_category=exporter_options.cluster_category,
182165
use_s2s_endpoint=exporter_options.use_s2s_endpoint,
166+
suppress_invoke_agent_input=suppress_invoke_agent_input,
183167
)
184-
168+
185169
else:
186-
exporter = ConsoleSpanExporter()
187-
self._logger.warning(
188-
"is_agent365_exporter_enabled() not enabled or token_resolver not set."
189-
" Falling back to console exporter."
190-
)
170+
171+
if os.environ.get("OTEL_EXPORTER_OTLP_ENDPOINT"):
172+
exporter = OTLPSpanExporter()
173+
self._logger.warning(
174+
"is_agent365_exporter_enabled() not enabled or token_resolver not set. Falling back to OTLP exporter."
175+
)
176+
else:
177+
exporter = ConsoleSpanExporter()
178+
self._logger.warning(
179+
"is_agent365_exporter_enabled() not enabled or token_resolver not set.Falling back to console exporter."
180+
)
191181

192182
# Add span processors
193183

194184
# Create _EnrichingBatchSpanProcessor with optimized settings
195185
# This allows extensions to enrich spans before export
196-
batch_processor = _EnrichingBatchSpanProcessor(
197-
exporter,
198-
suppress_invoke_agent_input=suppress_invoke_agent_input,
199-
**batch_processor_kwargs,
200-
)
186+
batch_processor = _EnrichingBatchSpanProcessor(exporter, **batch_processor_kwargs)
201187
agent_processor = SpanProcessor()
202188

203189
tracer_provider.add_span_processor(batch_processor)
@@ -213,6 +199,7 @@ def _configure_internal(
213199
tracer_provider.add_span_processor(
214200
_EnrichingBatchSpanProcessor(otlp_exporter, **batch_processor_kwargs)
215201
)
202+
self._logger.info("OTLP exporter enabled.")
216203

217204
# Configure logging if logger_name is provided
218205
if logger_name:
@@ -271,8 +258,7 @@ def configure(
271258
logger_name: str = DEFAULT_LOGGER_NAME,
272259
token_resolver: Callable[[str, str], str | None] | None = None,
273260
cluster_category: str = "prod",
274-
exporter_options: Agent365ExporterOptions | SpectraExporterOptions | None = None,
275-
suppress_invoke_agent_input: bool = False,
261+
exporter_options: Optional[Agent365ExporterOptions] = None,
276262
**kwargs: Any,
277263
) -> bool:
278264
"""
@@ -285,10 +271,8 @@ def configure(
285271
Use exporter_options instead.
286272
:param cluster_category: (Deprecated) Environment / cluster category (e.g. "prod").
287273
Use exporter_options instead.
288-
:param exporter_options: Exporter configuration. Pass Agent365ExporterOptions for A365 API
289-
export, SpectraExporterOptions for Spectra Collector sidecar export, or None (default)
290-
to construct Agent365ExporterOptions from legacy parameters.
291-
:param suppress_invoke_agent_input: If True, suppress input messages for InvokeAgent spans.
274+
:param exporter_options: Agent365ExporterOptions instance for configuring the exporter.
275+
If provided, exporter_options takes precedence. If exporter_options is None, the token_resolver and cluster_category parameters are used as fallback/legacy support to construct a default Agent365ExporterOptions instance.
292276
:return: True if configuration succeeded, False otherwise.
293277
"""
294278
return _telemetry_manager.configure(
@@ -298,7 +282,6 @@ def configure(
298282
token_resolver,
299283
cluster_category,
300284
exporter_options,
301-
suppress_invoke_agent_input,
302285
**kwargs,
303286
)
304287

0 commit comments

Comments
 (0)