Skill

SkillsDevOps & Infrastructure › Observability & tracing

azure-monitor-opentelemetry-exporter-py

Azure Monitor OpenTelemetry Exporter for Python. Use for low-level OpenTelemetry export to Application Insights.

Freerisk: low
azuremonitoropentelemetrypython

Tools: azure-monitor-opentelemetry-exporter,opentelemetry

The full skill

— name: azure-monitor-opentelemetry-exporter-py description: Azure Monitor OpenTelemetry Exporter for Python. Use for low-level OpenTelemetry export to Application Insights. risk: unknown source: community date_added: '2026-02-27' — # Azure Monitor OpenTelemetry Exporter for Python Low-level exporter for sending OpenTelemetry traces, metrics, and logs to Application Insights. ## Installation “`bash pip install azure-monitor-opentelemetry-exporter “` ## Environment Variables “`bash APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=xxx;IngestionEndpoint=https://xxx.in.applicationinsights.azure.com/ “` ## When to Use | Scenario | Use | |———-|—–| | Quick setup, auto-instrumentation | `azure-monitor-opentelemetry` (distro) | | Custom OpenTelemetry pipeline | `azure-monitor-opentelemetry-exporter` (this) | | Fine-grained control over telemetry | `azure-monitor-opentelemetry-exporter` (this) | ## Trace Exporter “`python from opentelemetry import trace from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchSpanProcessor from azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter # Create exporter exporter = AzureMonitorTraceExporter( connection_string="InstrumentationKey=xxx;…" ) # Configure tracer provider trace.set_tracer_provider(TracerProvider()) trace.get_tracer_provider().add_span_processor( BatchSpanProcessor(exporter) ) # Use tracer tracer = trace.get_tracer(__name__) with tracer.start_as_current_span("my-span"): print("Hello, World!") “` ## Metric Exporter “`python from opentelemetry import metrics from opentelemetry.sdk.metrics import MeterProvider from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader from azure.monitor.opentelemetry.exporter import AzureMonitorMetricExporter # Create exporter exporter = AzureMonitorMetricExporter( connection_string="InstrumentationKey=xxx;…" ) # Configure meter provider reader = PeriodicExportingMetricReader(exporter, export_interval_millis=60000) metrics.set_meter_provider(MeterProvider(metric_readers=[reader])) # Use meter meter = metrics.get_meter(__name__) counter = meter.create_counter("requests_total") counter.add(1, {"route": "/api/users"}) “` ## Log Exporter “`python import logging from opentelemetry._logs import set_logger_provider from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler from opentelemetry.sdk._logs.export import BatchLogRecordProcessor from azure.monitor.opentelemetry.exporter import AzureMonitorLogExporter # Create exporter exporter = AzureMonitorLogExporter( connection_string="InstrumentationKey=xxx;…" ) # Configure logger provider logger_provider = LoggerProvider() logger_provider.add_log_record_processor(BatchLogRecordProcessor(exporter)) set_logger_provider(logger_provider) # Add handler to Python logging handler = LoggingHandler(level=logging.INFO, logger_provider=logger_provider) logging.getLogger().addHandler(handler) # Use logging logger = logging.getLogger(__name__) logger.info("This will be sent to Application Insights") “` ## From Environment Variable Exporters read `APPLICATIONINSIGHTS_CONNECTION_STRING` automatically: “`python from azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter # Connection string from environment exporter = AzureMonitorTraceExporter() “` ## Azure AD Authentication “`python from azure.identity import DefaultAzureCredential from azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter exporter = AzureMonitorTraceExporter( credential=DefaultAzureCredential() ) “` ## Sampling Use `ApplicationInsightsSampler` for consistent sampling: “`python from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.sampling import ParentBasedTraceIdRatio from azure.monitor.opentelemetry.exporter import ApplicationInsightsSampler # Sample 10% of traces sampler = ApplicationInsightsSampler(sampling_ratio=0.1) trace.set_tracer_provider(TracerProvider(sampler=sampler)) “` ## Offline Storage Configure offline storage for retry: “`python from azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter exporter = AzureMonitorTraceExporter( connection_string="…", storage_directory="/path/to/storage", # Custom storage path disable_offline_storage=False # Enable retry (default) ) “` ## Disable Offline Storage “`python exporter = AzureMonitorTraceExporter( connection_string="…", disable_offline_storage=True # No retry on failure ) “` ## Sovereign Clouds “`python from azure.identity import AzureAuthorityHosts, DefaultAzureCredential from azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter # Azure Government credential = DefaultAzureCredential(authority=AzureAuthorityHosts.AZURE_GOVERNMENT) exporter = AzureMonitorTraceExporter( connection_string="InstrumentationKey=xxx;IngestionEndpoint=https://xxx.in.applicationinsights.azure.us/", credential=credential ) “` ## Exporter Types | Exporter | Telemetry Type | Application Insights Table | |———-|—————|—————————| | `AzureMonitorTraceExporter` | Traces/Spans | requests, dependencies, exceptions | | `AzureMonitorMetricExporter` | Metrics | customMetrics, performanceCounters | | `AzureMonitorLogExporter` | Logs | traces, customEvents | ## Configuration Options | Parameter | Description | Default | |———–|————-|———| | `connection_string` | Application Insights connection string | From env var | | `credential` | Azure credential for AAD auth | None | | `disable_offline_storage` | Disable retry storage | False | | `storage_directory` | Custom storage path | Temp directory | ## Best Practices 1. **Use BatchSpanProcessor** for production (not SimpleSpanProcessor) 2. **Use ApplicationInsightsSampler** for consistent sampling across services 3. **Enable offline storage** for reliability in production 4. **Use AAD authentication** instead of instrumentation keys 5. **Set export intervals** appropriate for your workload 6. **Use the distro** (`azure-monitor-opentelemetry`) unless you need custom pipelines ## Limitations – Use this skill only when the task clearly matches the scope described above. – Do not treat the output as a substitute for environment-specific validation, testing, or expert review. – Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.