azure-monitor-opentelemetry-py
microsoft/skills
Configura Azure Monitor Application Insights con instrumentación automática de OpenTelemetry para aplicaciones de Python en una sola línea.
...Expandir todoDistribución de OpenTelemetry de Azure Monitor para Python
Configuración en una sola línea para Application Insights con instrumentación automática de OpenTelemetry.
Instalación
pip install azure-monitor-opentelemetry
Variables de entorno
APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=xxx;IngestionEndpoint=https://xxx.in.applicationinsights.azure.com/ # Obligatorio para todos los métodos de autenticación
AZURE_TOKEN_CREDENTIALS=prod # Obligatorio solo si se usa DefaultAzureCredential en producción
🔑 Autenticación y ciclo de vida: Esta distribución está configurada con una cadena de conexión por diseño, pero para la ingestión autenticada con AAD (donde esté soportado), se prefiere
DefaultAzureCredentialmediante el parámetrocredential=; consulte la sección de Autenticación de Azure AD. Cualquier cliente de SDK de Azure que cree junto con el exportador debe envolverse en bloqueswith/async with(y las credenciales asíncronas deazure.identity.aiotambién).
Inicio rápido
from azure.identity import DefaultAzureCredential
from azure.monitor.opentelemetry import configure_azure_monitor
# La cadena de conexión identifica el recurso de App Insights (se lee de la variable de entorno APPLICATIONINSIGHTS_CONNECTION_STRING).
# DefaultAzureCredential autentica la ingestión a través de Microsoft Entra ID (preferido sobre la autenticación solo con clave de instrumentación).
configure_azure_monitor(
credential=DefaultAzureCredential(),
)
# Código de su aplicación...
Configuración explícita
from azure.identity import DefaultAzureCredential
from azure.monitor.opentelemetry import configure_azure_monitor
# Lee APPLICATIONINSIGHTS_CONNECTION_STRING del entorno para identificar el recurso;
# DefaultAzureCredential autentica la ingestión a través de Microsoft Entra ID.
configure_azure_monitor(
credential=DefaultAzureCredential(),
)
Con Flask
from flask import Flask
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor()
app = Flask(__name__)
@app.route("/")
def hello():
return "¡Hola, Mundo!"
if __name__ == "__main__":
app.run()
Con Django
# settings.py
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor()
# Configuración de Django...
Con FastAPI
from fastapi import FastAPI
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor()
app = FastAPI()
@app.get("/")
async def root():
return {"mensaje": "Hola Mundo"}
Trazas personalizadas
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("mi-operacion") as span:
span.set_attribute("atributo.personalizado", "valor")
# Realizar trabajo...
Métricas personalizadas
from opentelemetry import metrics
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor()
meter = metrics.get_meter(__name__)
counter = meter.create_counter("mi_contador")
counter.add(1, {"dimension": "valor"})
Registros personalizados
import logging
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor()
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
logger.info("Esto aparecerá en Application Insights")
logger.error("Los errores también se capturan", exc_info=True)
Muestreo
from azure.monitor.opentelemetry import configure_azure_monitor
# Muestrear el 10 % de las solicitudes
configure_azure_monitor(
sampling_ratio=0.1
)
Nombre de rol de la nube
Establezca el nombre de rol de la nube para Application Map:
from azure.monitor.opentelemetry import configure_azure_monitor
from opentelemetry.sdk.resources import Resource, SERVICE_NAME
configure_azure_monitor(
resource=Resource.create({SERVICE_NAME: "mi-nombre-de-servicio"})
)
Deshabilitar instrumentaciones específicas
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor(
instrumentations=["flask", "requests"] # Habilitar solo estas
)
Habilitar métricas en vivo
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor(
enable_live_metrics=True
)
Autenticación de Azure AD
from azure.monitor.opentelemetry import configure_azure_monitor
from azure.identity import DefaultAzureCredential, ManagedIdentityCredential
# Desarrollo local: DefaultAzureCredential. Producción: establezca AZURE_TOKEN_CREDENTIALS=prod o AZURE_TOKEN_CREDENTIALS=<credencial_específica>
credential = DefaultAzureCredential(require_envvar=True)
# O utilice una credencial específica directamente en producción:
# Consulte https://learn.microsoft.com/python/api/overview/azure/identity-readme?view=azure-python#credential-classes
# credential = ManagedIdentityCredential()
configure_azure_monitor(
credential=credential
)
</specific_credential>Instrumentaciones automáticas incluidas
| Biblioteca | Tipo de telemetría |
|---|---|
| Flask | Trazas |
| Django | Trazas |
| FastAPI | Trazas |
| Requests | Trazas |
| urllib3 | Trazas |
| httpx | Trazas |
| aiohttp | Trazas |
| psycopg2 | Trazas |
| pymysql | Trazas |
| pymongo | Trazas |
| redis | Trazas |
Opciones de configuración
| Parámetro | Descripción | Valor predeterminado |
|---|---|---|
| `connection_string` | Cadena de conexión de Application Insights | Desde variable de entorno |
| `credential` | Credencial de Azure para autenticación AAD | Ninguna |
| `sampling_ratio` | Tasa de muestreo (0,0 a 1,0) | 1,0 |
| `resource` | Recurso de OpenTelemetry | Detectado automáticamente |
| `instrumentations` | Lista de instrumentaciones a habilitar | Todas |
| `enable_live_metrics` | Habilitar transmisión de métricas en vivo | Falso |
Mejores prácticas
- Elija síncrono O asíncrono y mantenga la coherencia. No mezcle clientes síncronos
azure.xxxcon clientes asíncronosazure.xxx.aioen la misma ruta de llamada. Elija un modo por módulo. - Vacíe y apague los proveedores al finalizar el proceso. Llame a las API de shutdown/flush (p. ej.,
tracer_provider.shutdown(),meter_provider.shutdown(),logger_provider.shutdown()) al finalizar el proceso para vaciar la telemetría antes de que termine el proceso. - Llame a configure_azure_monitor() temprano — Antes de importar bibliotecas instrumentadas
- Utilice variables de entorno para la cadena de conexión en producción
- Establezca el nombre de rol de la nube para aplicaciones con varios servicios
- Habilite el muestreo en aplicaciones de alto tráfico
- Utilice registros estructurados para consultas de análisis de registros más eficaces
- Agregue atributos personalizados a las trazas para una depuración más eficaz
- Utilice la autenticación de Microsoft Entra para cargas de trabajo en producción
---
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
Todos los archivos
1 archivosInstalar azure-monitor-opentelemetry-py
Descarga y extrae los archivos de habilidades en tu directorio .claude/skills/.
Descargar ZIPClona el repositorio y copia los archivos de la habilidad a tu proyecto.
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
Copiar





Hogar
