Exportateur Azure Monitor OpenTelemetry pour Python
Exportateur bas niveau pour envoyer les traces, métriques et logs OpenTelemetry vers Application Insights.
Installation
pip install azure-monitor-opentelemetry-exporter
Variables d'environnement
APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=xxx;IngestionEndpoint=https://xxx.in.applicationinsights.azure.com/ # Requis pour toutes les méthodes d'auth
AZURE_TOKEN_CREDENTIALS=prod # Requis uniquement si DefaultAzureCredential est utilisé en production
Quand l'utiliser
| Scénario | Utiliser |
|---|---|
| Configuration rapide, auto-instrumentation | azure-monitor-opentelemetry (distro) |
| Pipeline OpenTelemetry personnalisé | azure-monitor-opentelemetry-exporter (celui-ci) |
| Contrôle fin de la télémétrie | azure-monitor-opentelemetry-exporter (celui-ci) |
Exportateur de traces
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!")
Exportateur de métriques
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"})
Exportateur de logs
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")
À partir d'une variable d'environnement
Les exportateurs lisent APPLICATIONINSIGHTS_CONNECTION_STRING automatiquement :
from azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter
# Connection string from environment
exporter = AzureMonitorTraceExporter()
Authentification Azure AD
from 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
)
Échantillonnage
Utilisez ApplicationInsightsSampler pour un échantillonnage cohérent :
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))
Stockage hors ligne
Configurez le stockage hors ligne pour les tentatives :
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)
)
Désactiver le stockage hors ligne
exporter = AzureMonitorTraceExporter(
connection_string="...",
disable_offline_storage=True # No retry on failure
)
Clouds souverains
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
)
Types d'exportateurs
| Exportateur | Type de télémétrie | Table Application Insights |
|---|---|---|
AzureMonitorTraceExporter |
Traces/Spans | requests, dependencies, exceptions |
AzureMonitorMetricExporter |
Metrics | customMetrics, performanceCounters |
AzureMonitorLogExporter |
Logs | traces, customEvents |
Options de configuration
| Paramètre | Description | Défaut |
|---|---|---|
connection_string |
Chaîne de connexion Application Insights | À partir de la variable env |
credential |
Credential Azure pour l'auth AAD | None |
disable_offline_storage |
Désactiver le stockage des tentatives | False |
storage_directory |
Chemin de stockage personnalisé | Répertoire temporaire |
Bonnes pratiques
- Utilisez BatchSpanProcessor pour la production (pas SimpleSpanProcessor)
- Utilisez ApplicationInsightsSampler pour un échantillonnage cohérent entre les services
- Activez le stockage hors ligne pour la fiabilité en production
- Utilisez l'authentification AAD au lieu des clés d'instrumentation
- Réglez les intervalles d'export appropriés à votre charge de travail
- Utilisez la distro (
azure-monitor-opentelemetry) sauf si vous avez besoin de pipelines personnalisés