option
MaisonMaison Skill DevOps et CI/CD azure-monitor-opentelemetry-py

azure-monitor-opentelemetry-py

microsoft/skills microsoft/skills

Configurez Azure Monitor Application Insights avec l'instrumentation automatique OpenTelemetry pour les applications Python en une seule ligne.

...Développer tout
0
Heure mise à jour 15 septembre 2026

Distro 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 DefaultAzureCredential via le paramètre credential= — 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 blocs with/async with (et les identifiants asynchrones de azure.identity.aio de 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èqueType de télémétrie
FlaskTraceurs
DjangoTraceurs
FastAPITraceurs
RequestsTraceurs
urllib3Traceurs
httpxTraceurs
aiohttpTraceurs
psycopg2Traceurs
pymysqlTraceurs
pymongoTraceurs
redisTraceurs

Options de configuration

ParamètreDescriptionDéfaut
`connection_string`Chaîne de connexion Application InsightsDepuis la variable d'environnement
`credential`Identifiant Azure pour l'authentification AADAucun
`sampling_ratio`Taux d'échantillonnage (0,0 à 1,0)1,0
`resource`Ressource OpenTelemetryDétecté automatiquement
`instrumentations`Liste des instrumentations à activerToutes
`enable_live_metrics`Activer le flux de métriques en directFaux

Meilleures pratiques

  1. Choisissez synchrone OU asynchrone et restez cohérent. Ne mélangez pas les clients synchrones azure.xxx avec les clients asynchrones azure.xxx.aio dans le même chemin d'appel. Choisissez un mode par module.
  2. 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.
  3. Appelez configure_azure_monitor() tôt — Avant d'importer les bibliothèques instrumentées
  4. Utilisez des variables d'environnement pour la chaîne de connexion en production
  5. Définissez le nom du rôle cloud pour les applications multi-services
  6. Activez l'échantillonnage dans les applications à fort trafic
  7. Utilisez la journalisation structurée pour de meilleures requêtes d'analyse des journaux
  8. Ajoutez des attributs personnalisés aux traceurs pour un meilleur débogage
  9. Utilisez l'authentification Microsoft Entra pour les charges de travail en production
Voir sur GitHub
---
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 fichiers

Installer azure-monitor-opentelemetry-py

Téléchargez et extrayez les fichiers de compétences dans votre répertoire .claude/skills/.

Télécharger le ZIP

Clonez 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 Copier
Configuration rapide: Copiez le dossier de la compétence dans .claude/skills/ Claude détectera et utilisera automatiquement la compétence

Compétences similaires

base44-cli
Heure mise à jour 29 juin 2026
klingai-upgrade-migration
Heure mise à jour 3 juillet 2026
Railway CLI Management
Heure mise à jour 2 juillet 2026
Verification &amp; Quality Assurance
Heure mise à jour 29 juin 2026
OR