opção
LarLar Skill DevOps e CI/CD azure-monitor-opentelemetry-py

azure-monitor-opentelemetry-py

microsoft/skills microsoft/skills

Configura o Azure Monitor Application Insights com instrumentação automática do OpenTelemetry para aplicativos Python em uma linha.

...Expandir tudo
0
Tempo atualizado 15 de Setembro de 2026

Distro do OpenTelemetry do Azure Monitor para Python

Configuração em uma linha para o Application Insights com instrumentação automática do OpenTelemetry.

Instalação

pip install azure-monitor-opentelemetry

Variáveis de Ambiente

APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=xxx;IngestionEndpoint=https://xxx.in.applicationinsights.azure.com/  # Obrigatório para todos os métodos de autenticação
AZURE_TOKEN_CREDENTIALS=prod # Obrigatório apenas se DefaultAzureCredential for usado em produção

🔑 Autenticação e ciclo de vida: Este distro é configurado com uma string de conexão por design, mas para ingestão autenticada pelo AAD (quando suportado), prefira DefaultAzureCredential por meio do parâmetro credential= — consulte a seção de Autenticação do Azure AD. Quaisquer clientes do SDK do Azure que você criar junto com o exportador devem ser envolvidos em blocos with/async with (e credenciais assíncronas de azure.identity.aio, da mesma forma).

Início Rápido

from azure.identity import DefaultAzureCredential
from azure.monitor.opentelemetry import configure_azure_monitor

# A string de conexão identifica o recurso do App Insights (lida da variável de ambiente APPLICATIONINSIGHTS_CONNECTION_STRING).
# DefaultAzureCredential autentica a ingestão por meio do Microsoft Entra ID (preferido em relação à autenticação apenas com chave de instrumentação).
configure_azure_monitor(
    credential=DefaultAzureCredential(),
)

# Seu código de aplicação...

Configuração Explícita

from azure.identity import DefaultAzureCredential
from azure.monitor.opentelemetry import configure_azure_monitor

# Lê APPLICATIONINSIGHTS_CONNECTION_STRING do ambiente para identificar o recurso;
# DefaultAzureCredential autentica a ingestão por meio do Microsoft Entra ID.
configure_azure_monitor(
    credential=DefaultAzureCredential(),
)

Com 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()

Com Django

# settings.py
from azure.monitor.opentelemetry import configure_azure_monitor

configure_azure_monitor()

# Configurações do Django...

Com 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"}

Rastreamentos Personalizados

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("minha-operacao") as span:
    span.set_attribute("atributo.personalizado", "valor")
    # Realizar trabalho...

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("meu_contador")

counter.add(1, {"dimensao": "valor"})

Logs Personalizados

import logging
from azure.monitor.opentelemetry import configure_azure_monitor

configure_azure_monitor()

logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)

logger.info("Isso aparecerá no Application Insights")
logger.error("Erros também são capturados", exc_info=True)

Amostragem

from azure.monitor.opentelemetry import configure_azure_monitor

# Amostra 10% das solicitações
configure_azure_monitor(
    sampling_ratio=0.1
)

Nome da Função na Nuvem

Defina o nome da função na nuvem para o Mapa do Aplicativo:

from azure.monitor.opentelemetry import configure_azure_monitor
from opentelemetry.sdk.resources import Resource, SERVICE_NAME

configure_azure_monitor(
    resource=Resource.create({SERVICE_NAME: "nome-do-meu-servico"})
)

Desabilitar Instrumentações Específicas

from azure.monitor.opentelemetry import configure_azure_monitor

configure_azure_monitor(
    instrumentations=["flask", "requests"]  # Habilitar apenas estas
)

Habilitar Métricas em Tempo Real

from azure.monitor.opentelemetry import configure_azure_monitor

configure_azure_monitor(
    enable_live_metrics=True
)

Autenticação do Azure AD

from azure.monitor.opentelemetry import configure_azure_monitor
from azure.identity import DefaultAzureCredential, ManagedIdentityCredential

# Desenvolvimento local: DefaultAzureCredential. Produção: defina AZURE_TOKEN_CREDENTIALS=prod ou AZURE_TOKEN_CREDENTIALS=<credencial_especifica>
credential = DefaultAzureCredential(require_envvar=True)
# Ou use uma credencial específica diretamente em produção:
# 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>

Instrumentações Automáticas Incluídas

BibliotecaTipo de Telemetria
FlaskRastreamentos
DjangoRastreamentos
FastAPIRastreamentos
RequestsRastreamentos
urllib3Rastreamentos
httpxRastreamentos
aiohttpRastreamentos
psycopg2Rastreamentos
pymysqlRastreamentos
pymongoRastreamentos
redisRastreamentos

Opções de Configuração

ParâmetroDescriçãoPadrão
`connection_string`String de conexão do Application InsightsDa variável de ambiente
`credential`Credencial do Azure para autenticação AADNenhuma
`sampling_ratio`Taxa de amostragem (0,0 a 1,0)1,0
`resource`Recurso do OpenTelemetryDetectado automaticamente
`instrumentations`Lista de instrumentações a habilitarTodas
`enable_live_metrics`Habilitar fluxo de Métricas em Tempo RealFalso

Melhores Práticas

  1. Escolha síncrono OU assíncrono e mantenha a consistência. Não misture clientes síncronos azure.xxx com clientes assíncronos azure.xxx.aio no mesmo caminho de chamada. Escolha um modo por módulo.
  2. Limpe e encerre os provedores ao final do processo. Chame as APIs de encerramento/limpeza (por exemplo, tracer_provider.shutdown(), meter_provider.shutdown(), logger_provider.shutdown()) ao final do processo para despejar a telemetria antes que o processo termine.
  3. Chame configure_azure_monitor() cedo — Antes de importar bibliotecas instrumentadas
  4. Use variáveis de ambiente para a string de conexão em produção
  5. Defina o nome da função na nuvem para aplicativos com múltiplos serviços
  6. Habilite a amostragem em aplicativos de alto tráfego
  7. Use registro estruturado para consultas de análise de logs melhores
  8. Adicione atributos personalizados aos rastros para melhor depuração
  9. Use autenticação do Microsoft Entra para cargas de trabalho em produção
Ver no 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

Todos os arquivos

1 arquivos

Instalar azure-monitor-opentelemetry-py

Baixe e extraia os arquivos de habilidade para o diretório .claude/skills/.

Baixar ZIP

Clone o repositório e copie os arquivos da habilidade para o seu projeto.

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 Copiar
Configuração rápida: Copie a pasta de habilidades para .claude/skills/ O Claude detectará e usará automaticamente a habilidade
Repositório microsoft/skills

Habilidades relacionadas

base44-cli
Tempo atualizado 29 de Junho de 2026
klingai-upgrade-migration
Tempo atualizado 3 de Julho de 2026
Railway CLI Management
Tempo atualizado 2 de Julho de 2026
Verification &amp; Quality Assurance
Tempo atualizado 29 de Junho de 2026
OR