Azure Monitor OpenTelemetry Exporter

1.0.0b49 · active · verified Sun Mar 29

The Azure Monitor OpenTelemetry Exporter for Python enables applications to send telemetry data (traces, metrics, and logs) from the OpenTelemetry SDK to Azure Monitor Application Insights. It is designed for users requiring advanced configuration and fine-grained control over their telemetry pipeline. This library is part of the Azure SDK for Python and is currently in a beta release phase, receiving frequent updates and improvements.

Warnings

Install

Imports

Quickstart

This quickstart demonstrates how to set up OpenTelemetry tracing, metrics, and logging with the Azure Monitor Exporter. It uses a connection string, preferably from an environment variable (`APPLICATIONINSIGHTS_CONNECTION_STRING`), to authenticate and send telemetry to Azure Application Insights. Remember to replace 'YOUR_INSTRUMENTATION_KEY' with your actual key if not using an environment variable. Ensure to call `shutdown()` on providers to guarantee telemetry is flushed before the application exits.

import os
import logging
from opentelemetry import trace, metrics
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.sdk.metrics import MeterProvider
from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader, ConsoleMetricExporter
from opentelemetry._logs import set_logger_provider
from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
from azure.monitor.opentelemetry.exporter import (
    AzureMonitorTraceExporter,
    AzureMonitorMetricExporter,
    AzureMonitorLogExporter
)

CONNECTION_STRING = os.environ.get('APPLICATIONINSIGHTS_CONNECTION_STRING', 'InstrumentationKey=YOUR_INSTRUMENTATION_KEY')

# --- Tracing --- 
print('Setting up tracing...')
exporter_trace = AzureMonitorTraceExporter(connection_string=CONNECTION_STRING)
tracer_provider = TracerProvider()
tracer_provider.add_span_processor(BatchSpanProcessor(exporter_trace))
trace.set_tracer_provider(tracer_provider)
tracer = trace.get_tracer(__name__)

with tracer.start_as_current_span("my-trace-span"):
    print("Hello from trace!")

# --- Metrics ---
print('Setting up metrics...')
exporter_metric = AzureMonitorMetricExporter(connection_string=CONNECTION_STRING)
metric_reader = PeriodicExportingMetricReader(exporter_metric, export_interval_millis=1000)
meter_provider = MeterProvider(metric_readers=[metric_reader])
metrics.set_meter_provider(meter_provider)
meter = metrics.get_meter(__name__)

counter = meter.create_counter("my_counter", description="A simple counter")
counter.add(1, {"key": "value"})

# --- Logging ---
print('Setting up logging...')
exporter_log = AzureMonitorLogExporter(connection_string=CONNECTION_STRING)
logger_provider = LoggerProvider()
set_logger_provider(logger_provider)
logger_provider.add_log_record_processor(BatchLogRecordProcessor(exporter_log))
handler = LoggingHandler(logger_provider=logger_provider)

# Attach OTel handler to root logger
root_logger = logging.getLogger()
root_logger.addHandler(handler)
root_logger.setLevel(logging.INFO)

# Log a message
root_logger.info("Hello from log!")

# --- Flush and Shutdown ---
print('Flushing and shutting down...')
tracer_provider.shutdown()
meter_provider.shutdown()
logger_provider.shutdown()

print('Telemetry sent to Azure Monitor (check your Application Insights resource).')

view raw JSON →