Marketplace azure-monitor-opentelemetry-exporter-py
install
source · Clone the upstream repo
git clone https://github.com/aiskillstore/marketplace
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/aiskillstore/marketplace "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/sickn33/azure-monitor-opentelemetry-exporter-py" ~/.claude/skills/aiskillstore-marketplace-azure-monitor-opentelemetry-exporter-py && rm -rf "$T"
manifest:
skills/sickn33/azure-monitor-opentelemetry-exporter-py/SKILL.mdsource content
Azure Monitor OpenTelemetry Exporter for Python
Low-level exporter for sending OpenTelemetry traces, metrics, and logs to Application Insights.
Installation
pip install azure-monitor-opentelemetry-exporter
Environment Variables
APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=xxx;IngestionEndpoint=https://xxx.in.applicationinsights.azure.com/
When to Use
| Scenario | Use |
|---|---|
| Quick setup, auto-instrumentation | (distro) |
| Custom OpenTelemetry pipeline | (this) |
| Fine-grained control over telemetry | (this) |
Trace Exporter
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
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
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:
from azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter # Connection string from environment exporter = AzureMonitorTraceExporter()
Azure AD Authentication
from azure.identity import DefaultAzureCredential from azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter exporter = AzureMonitorTraceExporter( credential=DefaultAzureCredential() )
Sampling
Use
ApplicationInsightsSampler for consistent sampling:
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:
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
exporter = AzureMonitorTraceExporter( connection_string="...", disable_offline_storage=True # No retry on failure )
Sovereign Clouds
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 |
|---|---|---|
| Traces/Spans | requests, dependencies, exceptions |
| Metrics | customMetrics, performanceCounters |
| Logs | traces, customEvents |
Configuration Options
| Parameter | Description | Default |
|---|---|---|
| Application Insights connection string | From env var |
| Azure credential for AAD auth | None |
| Disable retry storage | False |
| Custom storage path | Temp directory |
Best Practices
- Use BatchSpanProcessor for production (not SimpleSpanProcessor)
- Use ApplicationInsightsSampler for consistent sampling across services
- Enable offline storage for reliability in production
- Use AAD authentication instead of instrumentation keys
- Set export intervals appropriate for your workload
- Use the distro (
) unless you need custom pipelinesazure-monitor-opentelemetry