Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Azure Monitor OpenTelemetry Distro for Python. Use for one-line Application Insights setup with auto-instrumentation. Triggers: "azure-monitor-opentelemetry", "configure_azure_monitor", "Application Insights", "OpenTelemetry distro", "auto-instrumentation".
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 65% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 10% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 31% | 0% |
| case-10 | ✗→✓ | ▲ Improved | -10% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 52% | 0% |
One-line setup for Application Insights with OpenTelemetry auto-instrumentation.
bashpip install azure-monitor-opentelemetry
bashAPPLICATIONINSIGHTS_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
> 🔑 Two rules apply to every code sample below: > > 1. Prefer DefaultAzureCredential for ingestion auth when supported. APPLICATIONINSIGHTS_CONNECTION_STRING identifies the target Application Insights resource, and credential=DefaultAzureCredential(...) provides Microsoft Entra authentication. > - Local dev: DefaultAzureCredential works as-is. > - Production: set AZURE_TOKEN_CREDENTIALS=prod (or AZURE_TOKEN_CREDENTIALS=<specific_credential>) to constrain the credential chain to production-safe credentials. > 2. Providers are not context managers. Flush and shut down telemetry providers explicitly at process exit so buffers are exported deterministically. > > Snippets may abbreviate this setup, but production code should always follow both rules.
pythonfrom 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...
Pass the connection string explicitly by reading it from the environment variable. The value includes both InstrumentationKey and IngestionEndpoint.
pythonimport os from azure.monitor.opentelemetry import configure_azure_monitor # Read the full connection string from the environment. # Format: "InstrumentationKey=<key>;IngestionEndpoint=https://<id>.in.applicationinsights.azure.com/" connection_string = os.environ["APPLICATIONINSIGHTS_CONNECTION_STRING"] try: configure_azure_monitor( connection_string=connection_string, ) # Your application code... except Exception as exc: raise RuntimeError(f"Azure Monitor configuration failed: {exc}") from exc
pythonfrom 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()
python# settings.py from azure.monitor.opentelemetry import configure_azure_monitor configure_azure_monitor() # Django settings...
pythonfrom 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"}
pythonfrom 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...
pythonfrom 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"})
pythonimport 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)
pythonfrom azure.monitor.opentelemetry import configure_azure_monitor # Sample 10% of requests configure_azure_monitor( sampling_ratio=0.1 )
Set cloud role name for Application Map:
pythonfrom 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"}) )
pythonfrom azure.monitor.opentelemetry import configure_azure_monitor configure_azure_monitor( instrumentations=["flask", "requests"] # Only enable these )
pythonfrom azure.monitor.opentelemetry import configure_azure_monitor configure_azure_monitor( enable_live_metrics=True )
pythonfrom azure.monitor.opentelemetry import configure_azure_monitor from azure.identity import DefaultAzureCredential, ManagedIdentityCredential # Local dev: DefaultAzureCredential. In production, set AZURE_TOKEN_CREDENTIALS=prod or use a specific credential. credential = DefaultAzureCredential() # 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 )
| 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 |
| 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 |
azure.xxx sync clients with azure.xxx.aio async clients in the same call path. Choose one mode per module.provider.shutdown() / force_flush() at process exit to flush telemetry — providers are not context managers.| File | Contents | |------|----------| | references/capabilities.md | Additional non-hero capabilities, operation-group coverage, and production checklists. | | references/non-hero-scenarios.md | Dedicated non-hero examples for secondary/advanced scenarios. |
Other measured skills in the registry, with their headline benchmark lift.