azure-monitor-opentelemetry-py
microsoft/skills
Konfiguriert Azure Monitor Application Insights mit OpenTelemetry-Autoinstrumentierung für Python-Anwendungen in einer Zeile.
...Alle erweiternAzure Monitor OpenTelemetry Distro für Python
Einzeilige Einrichtung für Application Insights mit automatischer OpenTelemetry-Instrumentierung.
Installation
pip install azure-monitor-opentelemetry
Umgebungsvariablen
APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=xxx;IngestionEndpoint=https://xxx.in.applicationinsights.azure.com/ # Erforderlich für alle Authentifizierungsmethoden
AZURE_TOKEN_CREDENTIALS=prod # Nur erforderlich, wenn DefaultAzureCredential in der Produktion verwendet wird
🔑 Authentifizierung und Lebenszyklus: Dieses Distro ist standardmäßig mit einer Verbindungszeichenfolge konfiguriert, jedoch wird für AAD-authentifizierte Datenerfassung (wo unterstützt)
DefaultAzureCredentialüber den Parametercredential=bevorzugt — siehe Abschnitt Azure AD-Authentifizierung. Alle Azure SDK-Clients, die Sie neben dem Exporteur erstellen, sollten inwith-/async with-Blöcken (und asynchrone Anmeldeinformationen ausazure.identity.aioentsprechend) gekapselt werden.
Schnellstart
from azure.identity import DefaultAzureCredential
from azure.monitor.opentelemetry import configure_azure_monitor
# Die Verbindungszeichenfolge identifiziert die App Insights-Ressource (wird aus der Umgebungsvariable APPLICATIONINSIGHTS_CONNECTION_STRING gelesen).
# DefaultAzureCredential authentifiziert die Datenerfassung über Microsoft Entra ID (bevorzugt gegenüber der Authentifizierung nur mit Instrumentierungsschlüssel).
configure_azure_monitor(
credential=DefaultAzureCredential(),
)
# Ihr Anwendungscode...
Explizite Konfiguration
from azure.identity import DefaultAzureCredential
from azure.monitor.opentelemetry import configure_azure_monitor
# Liest APPLICATIONINSIGHTS_CONNECTION_STRING aus der Umgebung, um die Ressource zu identifizieren;
# DefaultAzureCredential authentifiziert die Datenerfassung über Microsoft Entra ID.
configure_azure_monitor(
credential=DefaultAzureCredential(),
)
Mit 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()
Mit Django
# settings.py
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor()
# Django-Einstellungen...
Mit 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"}
Benutzerdefinierte Ablaufverfolgungen (Traces)
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")
# Arbeit ausführen...
Benutzerdefinierte Metriken
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"})
Benutzerdefinierte Protokolle (Logs)
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)
Stichproben (Sampling)
from azure.monitor.opentelemetry import configure_azure_monitor
# 10 % der Anfragen stichprobenartig prüfen
configure_azure_monitor(
sampling_ratio=0.1
)
Name der Cloud-Rolle
Legen Sie den Namen der Cloud-Rolle für die Anwendungskarte fest:
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"})
)
Deaktivieren spezifischer Instrumentierungen
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor(
instrumentations=["flask", "requests"] # Nur diese aktivieren
)
Live-Metriken aktivieren
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor(
enable_live_metrics=True
)
Azure AD-Authentifizierung
from azure.monitor.opentelemetry import configure_azure_monitor
from azure.identity import DefaultAzureCredential, ManagedIdentityCredential
# Lokale Entwicklung: DefaultAzureCredential. Produktion: AZURE_TOKEN_CREDENTIALS=prod oder AZURE_TOKEN_CREDENTIALS=<specific_credential> festlegen
credential = DefaultAzureCredential(require_envvar=True)
# Oder verwenden Sie in der Produktion direkt ein spezifisches Anmeldeobjekt:
# Siehe https://learn.microsoft.com/python/api/overview/azure/identity-readme?view=azure-python#credential-classes
# credential = ManagedIdentityCredential()
configure_azure_monitor(
credential=credential
)
</specific_credential>Inbegriffene automatische Instrumentierungen
| Bibliothek | Telemetrieart |
|---|---|
| Flask | Ablaufverfolgungen (Traces) |
| Django | Ablaufverfolgungen (Traces) |
| FastAPI | Ablaufverfolgungen (Traces) |
| Requests | Ablaufverfolgungen (Traces) |
| urllib3 | Ablaufverfolgungen (Traces) |
| httpx | Ablaufverfolgungen (Traces) |
| aiohttp | Ablaufverfolgungen (Traces) |
| psycopg2 | Ablaufverfolgungen (Traces) |
| pymysql | Ablaufverfolgungen (Traces) |
| pymongo | Ablaufverfolgungen (Traces) |
| redis | Ablaufverfolgungen (Traces) |
Konfigurationsoptionen
| Parameter | Beschreibung | Standardwert |
|---|---|---|
| `connection_string` | Verbindungszeichenfolge für Application Insights | Aus Umgebungsvariable |
| `credential` | Azure-Anmeldeinformationen für AAD-Authentifizierung | None |
| `sampling_ratio` | Stichprobenrate (0,0 bis 1,0) | 1,0 |
| `resource` | OpenTelemetry-Ressource | Automatisch erkannt |
| `instrumentations` | Liste der zu aktivierenden Instrumentierungen | Alle |
| `enable_live_metrics` | Live-Metriken-Stream aktivieren | Falsch |
Best Practices
- Entscheiden Sie sich für synchron ODER asynchron und bleiben Sie konsistent. Mischen Sie keine synchronen
azure.xxx-Clients mit asynchronenazure.xxx.aio-Clients im selben Aufrufpfad. Wählen Sie einen Modus pro Modul. - Flushen und Herunterfahren von Anbietern beim Prozessende. Rufen Sie die Shutdown-/Flush-APIs (z. B.
tracer_provider.shutdown(),meter_provider.shutdown(),logger_provider.shutdown()) beim Prozessende auf, um die Telemetrie zu flushen, bevor der Prozess beendet wird. - Rufen Sie
configure_azure_monitor()frühzeitig auf — Bevor instrumentierte Bibliotheken importiert werden - Verwenden Sie Umgebungsvariablen für die Verbindungszeichenfolge in der Produktion
- Legen Sie den Namen der Cloud-Rolle fest für Anwendungen mit mehreren Diensten
- Aktivieren Sie die Stichprobenprüfung in hochfrequenten Anwendungen
- Verwenden Sie strukturierte Protokollierung für bessere Abfragen der Protokollanalyse
- Fügen Sie benutzerdefinierte Attribute zu Ablaufverfolgungen (Spans) für eine bessere Fehlerbehebung hinzu
- Verwenden Sie Microsoft Entra-Authentifizierung für Produktionsarbeitslasten
---
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
Alle Dateien
1 Dateienazure-monitor-opentelemetry-py installieren
Laden Sie die Skill-Dateien herunter und extrahieren Sie diese in Ihr .claude/skills/-Verzeichnis.
ZIP herunterladenKlonen Sie das Repository und kopieren Sie die Skill-Dateien in Ihr Projekt.
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
Kopieren





Heim
