Instrument Python Apps with Azure Monitor
One-line OpenTelemetry auto-instrumentation for Azure Application Insights in Python, capturing traces from Flask, Django, FastAPI, and database/HTTP libraries.
Why it matters
Effortlessly integrate Azure Application Insights into your Python applications. This skill provides one-line setup for auto-instrumentation, enabling comprehensive monitoring of traces, metrics, and logs.
Outcomes
What it gets done
Configure Azure Application Insights with OpenTelemetry
Auto-instrument Flask, Django, and FastAPI applications
Capture custom traces, metrics, and logs
Enable Live Metrics and configure sampling
Install
Add it to your toolbox
Run in your project directory:
curl -fsSL https://spark.entire.vc/get/ag-azure-monitor-opentelemetry-py | bash Capabilities
What this skill does
Runs build pipelines, tests, and deploys to environments.
Traces errors to their root cause and suggests fixes.
Analyzes code for bugs, style issues, and improvements.
Creates unit, integration, or end-to-end test cases.
Overview
Azure Monitor OpenTelemetry Distro for Python
What it does
Azure Monitor OpenTelemetry Distro for Python provides automatic instrumentation for Application Insights. It captures distributed traces from web frameworks and common libraries, and enables custom telemetry through the OpenTelemetry SDK.
How it connects
Use this when you need to add observability to Python applications with minimal code changes. Ideal for instrumenting Flask, Django, or FastAPI services, tracking database and HTTP calls, or sending custom traces, metrics, and logs to Azure Application Insights.
Source README
Azure Monitor OpenTelemetry Distro for Python
One-line setup for Application Insights with OpenTelemetry auto-instrumentation.
Installation
pip install azure-monitor-opentelemetry
Environment Variables
APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=xxx;IngestionEndpoint=https://xxx.in.applicationinsights.azure.com/
Quick Start
from azure.monitor.opentelemetry import configure_azure_monitor
# One-line setup - reads connection string from environment
configure_azure_monitor()
# Your application code...
Explicit Configuration
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor(
connection_string="InstrumentationKey=xxx;IngestionEndpoint=https://xxx.in.applicationinsights.azure.com/"
)
With 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()
With Django
# settings.py
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor()
# Django settings...
With 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"}
Custom 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")
# Do work...
Custom Metrics
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
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
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:
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
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor(
instrumentations=["flask", "requests"] # Only enable these
)
Enable Live Metrics
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor(
enable_live_metrics=True
)
Azure AD Authentication
from azure.monitor.opentelemetry import configure_azure_monitor
from azure.identity import DefaultAzureCredential
configure_azure_monitor(
credential=DefaultAzureCredential()
)
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
- Call configure_azure_monitor() early - Before importing instrumented libraries
- Use environment variables for connection string in production
- Set cloud role name for multi-service applications
- Enable sampling in high-traffic applications
- Use structured logging for better log analytics queries
- Add custom attributes to spans for better debugging
- Use AAD authentication for production workloads
When to Use
This skill is applicable to execute the workflow or actions described in the overview.
Limitations
- Use this skill only when the task clearly matches the scope described above.
- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.
Discussion
Questions & comments · 0
Sign In Sign in to leave a comment.