вариант
ДомДом Skill DevOps и CI/CD azure-monitor-opentelemetry-py

azure-monitor-opentelemetry-py

microsoft/skills microsoft/skills

Настройте Azure Monitor Application Insights с автоматической инструментацией OpenTelemetry для приложений на Python в одну строку.

...Расширить все
0
Обновлено время 15 сентября 2026 г.

Дистрибутив OpenTelemetry для Azure Monitor для Python

Одношаговая настройка Application Insights с автоматической инструментацией OpenTelemetry.

Установка

pip install azure-monitor-opentelemetry

Переменные окружения

APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=xxx;IngestionEndpoint=https://xxx.in.applicationinsights.azure.com/  # Требуется для всех методов аутентификации
AZURE_TOKEN_CREDENTIALS=prod # Требуется только если DefaultAzureCredential используется в продакшене

🔑 Аутентификация и жизненный цикл: Этот дистрибув по умолчанию настроен с использованием строки подключения, но для ввода данных, аутентифицированного через AAD (где это поддерживается) предпочтительно использовать DefaultAzureCredential через параметр credential= — см. раздел Аутентификация Azure AD. Все клиенты Azure SDK, которые вы создаете вместе с экспортером, должны быть обернуты в блоки with/async with (аналогично асинхронным учетным данным из azure.identity.aio).

Быстрый старт

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

# Строка подключения идентифицирует ресурс App Insights (читается из переменной окружения APPLICATIONINSIGHTS_CONNECTION_STRING).
# DefaultAzureCredential аутентифицирует ввод данных через Microsoft Entra ID (предпочтительнее аутентификации только по ключу инструментации).
configure_azure_monitor(
    credential=DefaultAzureCredential(),
)

# Ваш код приложения...

Явная конфигурация

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

# Читает APPLICATIONINSIGHTS_CONNECTION_STRING из окружения для идентификации ресурса;
# DefaultAzureCredential аутентифицирует ввод данных через Microsoft Entra ID.
configure_azure_monitor(
    credential=DefaultAzureCredential(),
)

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

С Django

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

configure_azure_monitor()

# Настройки Django...

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

Пользовательские трассировки

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")
    # Выполнение работы...

Пользовательские метрики

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

Пользовательские журналы

import logging
from azure.monitor.opentelemetry import configure_azure_monitor

configure_azure_monitor()

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

logger.info("Это появится в Application Insights")
logger.error("Ошибки также фиксируются", exc_info=True)

Сэмплирование

from azure.monitor.opentelemetry import configure_azure_monitor

# Сэмплирование 10% запросов
configure_azure_monitor(
    sampling_ratio=0.1
)

Имя роли облака

Установите имя роли облака для 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: "my-service-name"})
)

Отключение конкретных инструментаций

from azure.monitor.opentelemetry import configure_azure_monitor

configure_azure_monitor(
    instrumentations=["flask", "requests"]  # Включить только эти
)

Включение живых метрик

from azure.monitor.opentelemetry import configure_azure_monitor

configure_azure_monitor(
    enable_live_metrics=True
)

Аутентификация Azure AD

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

# Локальная разработка: DefaultAzureCredential. Продакшен: установите AZURE_TOKEN_CREDENTIALS=prod или AZURE_TOKEN_CREDENTIALS=<specific_credential>
credential = DefaultAzureCredential(require_envvar=True)
# Или используйте конкретные учетные данные напрямую в продакшене:
# См. https://learn.microsoft.com/python/api/overview/azure/identity-readme?view=azure-python#credential-classes
# credential = ManagedIdentityCredential()

configure_azure_monitor(
    credential=credential
)
</specific_credential>

Включенные автоматические инструментации

БиблиотекаТип телеметрии
FlaskТрассировки
DjangoТрассировки
FastAPIТрассировки
RequestsТрассировки
urllib3Трассировки
httpxТрассировки
aiohttpТрассировки
psycopg2Трассировки
pymysqlТрассировки
pymongoТрассировки
redisТрассировки

Параметры конфигурации

ПараметрОписаниеПо умолчанию
`connection_string`Строка подключения Application InsightsИз переменной окружения
`credential`Учетные данные Azure для аутентификации AADNone
`sampling_ratio`Коэффициент сэмплирования (от 0.0 до 1.0)1.0
`resource`Ресурс OpenTelemetryОпределяется автоматически
`instrumentations`Список инструментаций для включенияВсе
`enable_live_metrics`Включить поток живых метрикFalse

Рекомендации

  1. Выбирайте синхронный ИЛИ асинхронный режим и оставайтесь последовательными. Не смешивайте синхронные клиенты azure.xxx с асинхронными клиентами azure.xxx.aio в одном пути вызова. Выбирайте один режим для каждого модуля.
  2. Очищайте и завершайте поставщики при выходе из процесса. Вызывайте API завершения/очистки (например, tracer_provider.shutdown(), meter_provider.shutdown(), logger_provider.shutdown()) при выходе из процесса, чтобы очистить телеметрию перед завершением работы процесса.
  3. Вызывайте configure_azure_monitor() рано — До импорта инструментированных библиотек
  4. Используйте переменные окружения для строки подключения в продакшене
  5. Устанавливайте имя роли облака для многопользовательских приложений
  6. Включайте сэмплирование в приложениях с высокой нагрузкой
  7. Используйте структурированное логирование для более эффективных запросов аналитики журналов
  8. Добавляйте пользовательские атрибуты к трассам для лучшей отладки
  9. Используйте аутентификацию Microsoft Entra для рабочих нагрузок в продакшене
Посмотреть на 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

Все файлы

1 файлов

Установить azure-monitor-opentelemetry-py

Скачайте и извлеките файлы навыков в директорию .claude/skills/.

Скачать ZIP

Клонируйте репозиторий и скопируйте файлы навыка в свой проект.

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

Копировать Копировать
Быстрая настройка: Скопируйте папку навыка в .claude/skills/. Claude автоматически обнаружит и использует этот навык.
Репозиторий microsoft/skills

Похожие навыки

base44-cli
Обновлено время 29 июня 2026 г.
klingai-upgrade-migration
Обновлено время 3 июля 2026 г.
Railway CLI Management
Обновлено время 2 июля 2026 г.
Verification &amp; Quality Assurance
Обновлено время 29 июня 2026 г.
OR