-
Notifications
You must be signed in to change notification settings - Fork 946
Closed
Labels
observabilityIssues related to observability or telemetryIssues related to observability or telemetrypythonv1.0Features being tracked for the version 1.0 GAFeatures being tracked for the version 1.0 GA
Description
agent-framework ==1.0.0b251108
I was using setup_observability() with applicationinsights_connection_string argument. Did not see any logs in App Insights - instead logs ended up on the console.
The issue was a type mismatch bug in the agent_framework library:
- The library checks for
isinstance(exporter, LogExporter) - But Azure Monitor exporters inherit from
LogRecordExporter(notLogExporter) - These are two different classes, so the isinstance check fails
- The library then adds a ConsoleLogExporter as a fallback, causing the verbose JSON output
The fix: Bypass agent_framework.setup_observability() entirely and manually configure OpenTelemetry providers directly, ensuring only Azure Monitor exporters are added (no console exporter):
conn_str = os.getenv("APPLICATIONINSIGHTS_CONNECTION_STRING")
if conn_str:
# Create Azure Monitor exporters
from azure.monitor.opentelemetry.exporter import (
AzureMonitorLogExporter,
AzureMonitorTraceExporter,
AzureMonitorMetricExporter,
)
# Set up resource
resource = Resource.create({"service.name": "ioc-agent-batch"})
# Configure trace provider
trace_provider = TracerProvider(resource=resource)
trace_provider.add_span_processor(BatchSpanProcessor(AzureMonitorTraceExporter(connection_string=conn_str)))
trace.set_tracer_provider(trace_provider)
# Configure log provider (MANUALLY - no console exporter!)
log_provider = LoggerProvider(resource=resource)
log_provider.add_log_record_processor(BatchLogRecordProcessor(AzureMonitorLogExporter(connection_string=conn_str)))
_logs.set_logger_provider(log_provider)
# Configure metrics provider
metric_reader = PeriodicExportingMetricReader(AzureMonitorMetricExporter(connection_string=conn_str))
metric_provider = MeterProvider(resource=resource, metric_readers=[metric_reader])
metrics.set_meter_provider(metric_provider)
# Attach OpenTelemetry handler to root logger
root_logger = logging.getLogger()
root_logger.addHandler(LoggingHandler(logger_provider=log_provider))
else:
# No App Insights connection - just use agent_framework defaults
setup_observability(
enable_sensitive_data=os.environ.get("ENABLE_SENSITIVE_DATA", "false").lower() == "true",
)Metadata
Metadata
Assignees
Labels
observabilityIssues related to observability or telemetryIssues related to observability or telemetrypythonv1.0Features being tracked for the version 1.0 GAFeatures being tracked for the version 1.0 GA
Type
Projects
Status
Done