Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Azure Monitor OpenTelemetry Exporter for Python. Use for low-level OpenTelemetry export to Application Insights. Triggers: "azure-monitor-opentelemetry-exporter", "AzureMonitorTraceExporter", "AzureMonitorMetricExporter", "AzureMonitorLogExporter".
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-20 | ✗→✓ | ▲ Improved | 132% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 4% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 57% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 50% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 43% | 0% |
Low-level exporter for sending OpenTelemetry traces, metrics, and logs to Application Insights.
bashpip install azure-monitor-opentelemetry-exporter
bashAPPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=xxx;IngestionEndpoint=https://xxx.in.applicationinsights.azure.com/ # Required for all auth methods AZURE_TOKEN_CREDENTIALS=prod # Required only if DefaultAzureCredential is used in production
> 🔑 Two rules apply to every code sample below: > > 1. Prefer DefaultAzureCredential for ingestion auth when supported. APPLICATIONINSIGHTS_CONNECTION_STRING identifies the target Application Insights resource, and credential=DefaultAzureCredential(...) provides Microsoft Entra authentication. > - Local dev: DefaultAzureCredential works as-is. > - Production: set AZURE_TOKEN_CREDENTIALS=prod (or AZURE_TOKEN_CREDENTIALS=<specific_credential>) to constrain the credential chain to production-safe credentials. > 2. Providers are not context managers. Flush and shut down telemetry providers explicitly at process exit so buffers are exported deterministically. > > Snippets may abbreviate this setup, but production code should always follow both rules.
| 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) |
pythonfrom azure.identity import DefaultAzureCredential from opentelemetry import trace from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchSpanProcessor from azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter # Reads APPLICATIONINSIGHTS_CONNECTION_STRING from env to identify the resource; # DefaultAzureCredential authenticates ingestion via Microsoft Entra ID. exporter = AzureMonitorTraceExporter( credential=DefaultAzureCredential(), ) # 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!")
pythonfrom azure.identity import DefaultAzureCredential from opentelemetry import metrics from opentelemetry.sdk.metrics import MeterProvider from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader from azure.monitor.opentelemetry.exporter import AzureMonitorMetricExporter # Reads APPLICATIONINSIGHTS_CONNECTION_STRING from env; AAD-authenticated ingestion via DefaultAzureCredential. exporter = AzureMonitorMetricExporter( credential=DefaultAzureCredential(), ) # 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"})
pythonimport logging from azure.identity import DefaultAzureCredential 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 # Reads APPLICATIONINSIGHTS_CONNECTION_STRING from env; AAD-authenticated ingestion via DefaultAzureCredential. exporter = AzureMonitorLogExporter( credential=DefaultAzureCredential(), ) # 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")
Exporters read APPLICATIONINSIGHTS_CONNECTION_STRING automatically:
pythonfrom azure.identity import DefaultAzureCredential from azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter # Connection string from environment; AAD-authenticated ingestion via DefaultAzureCredential. exporter = AzureMonitorTraceExporter( credential=DefaultAzureCredential(), )
pythonfrom azure.identity import DefaultAzureCredential, ManagedIdentityCredential from azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter # Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=<specific_credential> credential = DefaultAzureCredential(require_envvar=True) # Or use a specific credential directly in production: # See https://learn.microsoft.com/python/api/overview/azure/identity-readme?view=azure-python#credential-classes # credential = ManagedIdentityCredential() exporter = AzureMonitorTraceExporter( credential=credential )
Use ApplicationInsightsSampler for consistent sampling:
pythonfrom 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))
Configure offline storage for retry:
pythonfrom azure.identity import DefaultAzureCredential from azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter exporter = AzureMonitorTraceExporter( credential=DefaultAzureCredential(), storage_directory="/path/to/storage", # Custom storage path disable_offline_storage=False # Enable retry (default) )
pythonexporter = AzureMonitorTraceExporter( credential=DefaultAzureCredential(), disable_offline_storage=True # No retry on failure )
pythonfrom 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 | Telemetry Type | Application Insights Table | |----------|---------------|---------------------------| | AzureMonitorTraceExporter | Traces/Spans | requests, dependencies, exceptions | | AzureMonitorMetricExporter | Metrics | customMetrics, performanceCounters | | AzureMonitorLogExporter | Logs | traces, customEvents |
| 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 |
azure.xxx sync clients with azure.xxx.aio async clients in the same call path. Choose one mode per module.provider.shutdown() / force_flush() at process exit to flush telemetry — providers are not context managers.azure-monitor-opentelemetry) unless you need custom pipelines| File | Contents | |------|----------| | references/capabilities.md | Additional non-hero capabilities, operation-group coverage, and production checklists. | | references/non-hero-scenarios.md | Dedicated non-hero examples for secondary/advanced scenarios. |
Other measured skills in the registry, with their headline benchmark lift.