azure-monitor-opentelemetry-py
microsoft/skills
Configurez Azure Monitor Application Insights avec l'instrumentation automatique OpenTelemetry pour les applications Python en une seule ligne.
...Développer toutDistro OpenTelemetry d'Azure Monitor pour Python
Configuration en une ligne pour Application Insights avec l'instrumentation automatique OpenTelemetry.
Installation
pip install azure-monitor-opentelemetry
Variables d'environnement
APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=xxx;IngestionEndpoint=https://xxx.in.applicationinsights.azure.com/ # Requis pour toutes les méthodes d'authentification
AZURE_TOKEN_CREDENTIALS=prod # Requis uniquement si DefaultAzureCredential est utilisé en production
🔑 Authentification et cycle de vie : Ce distro est configuré par défaut avec une chaîne de connexion, mais pour l'ingestion authentifiée via AAD (lorsque prise en charge), privilégiez
DefaultAzureCredentialvia le paramètrecredential=— consultez la section Authentification Azure AD. Tous les clients SDK Azure que vous créez en même temps que l'exporteur doivent être enveloppés dans des blocswith/async with(et les identifiants asynchrones deazure.identity.aiode même).
Démarrage rapide
from azure.identity import DefaultAzureCredential
from azure.monitor.opentelemetry import configure_azure_monitor
# La chaîne de connexion identifie la ressource Application Insights (lue à partir de la variable d'environnement APPLICATIONINSIGHTS_CONNECTION_STRING).
# DefaultAzureCredential authentifie l'ingestion via Microsoft Entra ID (préféré à l'authentification par clé d'instrumentation uniquement).
configure_azure_monitor(
credential=DefaultAzureCredential(),
)
# Code de votre application...
Configuration explicite
from azure.identity import DefaultAzureCredential
from azure.monitor.opentelemetry import configure_azure_monitor
# Lit APPLICATIONINSIGHTS_CONNECTION_STRING depuis l'environnement pour identifier la ressource ;
# DefaultAzureCredential authentifie l'ingestion via Microsoft Entra ID.
configure_azure_monitor(
credential=DefaultAzureCredential(),
)
Avec Flask
from flask import Flask
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor()
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, World!"
if __name__ == "__main__":
app.run()
Avec Django
# settings.py
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor()
# Paramètres Django...
Avec FastAPI
from fastapi import FastAPI
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor()
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
Traceurs personnalisés
from opentelemetry import trace
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor()
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("my-operation") as span:
span.set_attribute("custom.attribute", "value")
# Effectuer des travaux...
Métriques personnalisées
from opentelemetry import metrics
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor()
meter = metrics.get_meter(__name__)
counter = meter.create_counter("my_counter")
counter.add(1, {"dimension": "value"})
Journaux personnalisés
import logging
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor()
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
logger.info("Cela apparaîtra dans Application Insights")
logger.error("Les erreurs sont également capturées", exc_info=True)
Échantillonnage
from azure.monitor.opentelemetry import configure_azure_monitor
# Échantillonner 10 % des requêtes
configure_azure_monitor(
sampling_ratio=0.1
)
Nom du rôle cloud
Définir le nom du rôle cloud pour la carte Application :
from azure.monitor.opentelemetry import configure_azure_monitor
from opentelemetry.sdk.resources import Resource, SERVICE_NAME
configure_azure_monitor(
resource=Resource.create({SERVICE_NAME: "my-service-name"})
)
Désactiver des instrumentations spécifiques
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor(
instrumentations=["flask", "requests"] # Activer uniquement celles-ci
)
Activer les métriques en direct
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor(
enable_live_metrics=True
)
Authentification Azure AD
from azure.monitor.opentelemetry import configure_azure_monitor
from azure.identity import DefaultAzureCredential, ManagedIdentityCredential
# Développement local : DefaultAzureCredential. Production : définir AZURE_TOKEN_CREDENTIALS=prod ou AZURE_TOKEN_CREDENTIALS=<identifiant_cible>
credential = DefaultAzureCredential(require_envvar=True)
# Ou utiliser un identifiant spécifique directement en production :
# Voir https://learn.microsoft.com/python/api/overview/azure/identity-readme?view=azure-python#credential-classes
# credential = ManagedIdentityCredential()
configure_azure_monitor(
credential=credential
)
</identifiant_cible>Instrumentations automatiques incluses
| Bibliothèque | Type de télémétrie |
|---|---|
| Flask | Traceurs |
| Django | Traceurs |
| FastAPI | Traceurs |
| Requests | Traceurs |
| urllib3 | Traceurs |
| httpx | Traceurs |
| aiohttp | Traceurs |
| psycopg2 | Traceurs |
| pymysql | Traceurs |
| pymongo | Traceurs |
| redis | Traceurs |
Options de configuration
| Paramètre | Description | Défaut |
|---|---|---|
| `connection_string` | Chaîne de connexion Application Insights | Depuis la variable d'environnement |
| `credential` | Identifiant Azure pour l'authentification AAD | Aucun |
| `sampling_ratio` | Taux d'échantillonnage (0,0 à 1,0) | 1,0 |
| `resource` | Ressource OpenTelemetry | Détecté automatiquement |
| `instrumentations` | Liste des instrumentations à activer | Toutes |
| `enable_live_metrics` | Activer le flux de métriques en direct | Faux |
Meilleures pratiques
- Choisissez synchrone OU asynchrone et restez cohérent. Ne mélangez pas les clients synchrones
azure.xxxavec les clients asynchronesazure.xxx.aiodans le même chemin d'appel. Choisissez un mode par module. - Videz et arrêtez les fournisseurs à la fin du processus. Appelez les API d'arrêt/vidage (par exemple
tracer_provider.shutdown(),meter_provider.shutdown(),logger_provider.shutdown()) à la fin du processus pour vider la télémétrie avant la terminaison du processus. - Appelez configure_azure_monitor() tôt — Avant d'importer les bibliothèques instrumentées
- Utilisez des variables d'environnement pour la chaîne de connexion en production
- Définissez le nom du rôle cloud pour les applications multi-services
- Activez l'échantillonnage dans les applications à fort trafic
- Utilisez la journalisation structurée pour de meilleures requêtes d'analyse des journaux
- Ajoutez des attributs personnalisés aux traceurs pour un meilleur débogage
- Utilisez l'authentification Microsoft Entra pour les charges de travail en production
---
name: azure-monitor-opentelemetry-py
description: Configures Azure Monitor Application Insights with OpenTelemetry auto-instrumentation for Python applications in one line.
license: MIT
---
# Azure Monitor OpenTelemetry Distro for Python
One-line setup for Application Insights with OpenTelemetry auto-instrumentation.
## Installation
```bash
pip install azure-monitor-opentelemetry
```
## Environment Variables
```bash
APPLICATIONINSIGHTS_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
```
> **🔑 Auth & lifecycle:** This distro is configured with a connection string by design, but for *AAD-authenticated ingestion* (where supported) prefer `DefaultAzureCredential` via the `credential=` parameter — see the [Azure AD Authentication](#azure-ad-authentication) section. Any Azure SDK clients you create alongside the exporter should be wrapped in `with`/`async with` blocks (and async credentials from `azure.identity.aio` likewise).
## Quick Start
```python
from azure.identity import DefaultAzureCredential
from azure.monitor.opentelemetry import configure_azure_monitor
# Connection string identifies the App Insights resource (read from APPLICATIONINSIGHTS_CONNECTION_STRING env var).
# DefaultAzureCredential authenticates ingestion via Microsoft Entra ID (preferred over instrumentation-key-only auth).
configure_azure_monitor(
credential=DefaultAzureCredential(),
)
# Your application code...
```
## Explicit Configuration
```python
from azure.identity import DefaultAzureCredential
from azure.monitor.opentelemetry import configure_azure_monitor
# Reads APPLICATIONINSIGHTS_CONNECTION_STRING from env to identify the resource;
# DefaultAzureCredential authenticates ingestion via Microsoft Entra ID.
configure_azure_monitor(
credential=DefaultAzureCredential(),
)
```
## With Flask
```python
from flask import Flask
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor()
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, World!"
if __name__ == "__main__":
app.run()
```
## With Django
```python
# settings.py
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor()
# Django settings...
```
## With FastAPI
```python
from fastapi import FastAPI
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor()
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
```
## Custom Traces
```python
from opentelemetry import trace
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor()
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("my-operation") as span:
span.set_attribute("custom.attribute", "value")
# Do work...
```
## Custom Metrics
```python
from opentelemetry import metrics
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor()
meter = metrics.get_meter(__name__)
counter = meter.create_counter("my_counter")
counter.add(1, {"dimension": "value"})
```
## Custom Logs
```python
import logging
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor()
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
logger.info("This will appear in Application Insights")
logger.error("Errors are captured too", exc_info=True)
```
## Sampling
```python
from azure.monitor.opentelemetry import configure_azure_monitor
# Sample 10% of requests
configure_azure_monitor(
sampling_ratio=0.1
)
```
## Cloud Role Name
Set cloud role name for Application Map:
```python
from azure.monitor.opentelemetry import configure_azure_monitor
from opentelemetry.sdk.resources import Resource, SERVICE_NAME
configure_azure_monitor(
resource=Resource.create({SERVICE_NAME: "my-service-name"})
)
```
## Disable Specific Instrumentations
```python
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor(
instrumentations=["flask", "requests"] # Only enable these
)
```
## Enable Live Metrics
```python
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor(
enable_live_metrics=True
)
```
## Azure AD Authentication
```python
from azure.monitor.opentelemetry import configure_azure_monitor
from azure.identity import DefaultAzureCredential, ManagedIdentityCredential
# 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()
configure_azure_monitor(
credential=credential
)
```
## Auto-Instrumentations Included
| Library | Telemetry Type |
|---------|---------------|
| Flask | Traces |
| Django | Traces |
| FastAPI | Traces |
| Requests | Traces |
| urllib3 | Traces |
| httpx | Traces |
| aiohttp | Traces |
| psycopg2 | Traces |
| pymysql | Traces |
| pymongo | Traces |
| redis | Traces |
## Configuration Options
| Parameter | Description | Default |
|-----------|-------------|---------|
| `connection_string` | Application Insights connection string | From env var |
| `credential` | Azure credential for AAD auth | None |
| `sampling_ratio` | Sampling rate (0.0 to 1.0) | 1.0 |
| `resource` | OpenTelemetry Resource | Auto-detected |
| `instrumentations` | List of instrumentations to enable | All |
| `enable_live_metrics` | Enable Live Metrics stream | False |
## Best Practices
1. **Pick sync OR async and stay consistent.** Do not mix `azure.xxx` sync clients with `azure.xxx.aio` async clients in the same call path. Choose one mode per module.
2. **Flush and shut down providers at process exit.** Call the shutdown/flush APIs (e.g. `tracer_provider.shutdown()`, `meter_provider.shutdown()`, `logger_provider.shutdown()`) at process exit to flush telemetry before the process terminates.
3. **Call configure_azure_monitor() early** — Before importing instrumented libraries
4. **Use environment variables** for connection string in production
5. **Set cloud role name** for multi-service applications
6. **Enable sampling** in high-traffic applications
7. **Use structured logging** for better log analytics queries
8. **Add custom attributes** to spans for better debugging
9. **Use Microsoft Entra authentication** for production workloads
Tous les fichiers
1 fichiersInstaller azure-monitor-opentelemetry-py
Téléchargez et extrayez les fichiers de compétences dans votre répertoire .claude/skills/.
Télécharger le ZIPClonez le dépôt et copiez les fichiers de compétence dans votre projet.
git clone https://github.com/microsoft/skills/tree/main/.github/plugins/azure-sdk-python/skills/azure-monitor-opentelemetry-py # Copy SKILL.md to your .claude/skills/ directory
Copier





Maison
