azure-monitor-opentelemetry-exporter-py

npx skills add https://github.com/microsoft/skills --skill azure-monitor-opentelemetry-exporter-py

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

  1. Utilisez BatchSpanProcessor pour la production (pas SimpleSpanProcessor)
  2. Utilisez ApplicationInsightsSampler pour un échantillonnage cohérent entre les services
  3. Activez le stockage hors ligne pour la fiabilité en production
  4. Utilisez l'authentification AAD au lieu des clés d'instrumentation
  5. Réglez les intervalles d'export appropriés à votre charge de travail
  6. Utilisez la distro (azure-monitor-opentelemetry) sauf si vous avez besoin de pipelines personnalisés

Skills similaires