mcpField
A
azure-monitor-opentelemetry-exporter-py

azure-monitor-opentelemetry-exporter-py

github.com/sickn33云与 DevOps48.7k53 次安装今天更新
代码仓库

关于 azure-monitor-opentelemetry-exporter-py

面向需要自定义 OpenTelemetry 管道或精细控制遥测的 Python 开发者,将 traces、metrics 和 logs 导出到 Application Insights。提供独立导出器及离线存储、采样和 Azure AD 身份验证配置。

主要功能

  1. 01导出 traces、metrics 和 logs
  2. 02支持自定义 OpenTelemetry 管道
  3. 03支持离线存储与重试
  4. 04支持采样和 Azure AD 身份验证

适用场景

  1. 01将 Python 服务遥测发送到 Application Insights
  2. 02自定义遥测处理流程
  3. 03网络中断时暂存遥测以便重试

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill azure-monitor-opentelemetry-exporter-py

安装后在 Claude Code 中输入/azure-monitor-opentelemetry-exporter-py确认已加载。

详细介绍

Python 版 Azure Monitor OpenTelemetry 导出器

用于将 OpenTelemetry 跟踪、指标和日志发送到 Application Insights 的低级导出器。

安装

pip install azure-monitor-opentelemetry-exporter

环境变量

export APPLICATIONINSIGHTS_CONNECTION_STRING='InstrumentationKey=xxx;IngestionEndpoint=https://xxx.in.applicationinsights.azure.com/'

适用场景

场景使用
快速设置、自动插桩azure-monitor-opentelemetry(发行包)
自定义 OpenTelemetry 管道azure-monitor-opentelemetry-exporter(本包)
精细控制遥测数据azure-monitor-opentelemetry-exporter(本包)

导出与隐私边界

遥测数据会离开应用并发送到 Azure,也可能在本地离线存储中留存。请检查字段、终结点、凭据、保留期限和成本;导出前请删除机密和个人数据。请重复使用现有的提供程序,而不要反复重置全局提供程序,并在进程终止时刷新或关闭提供程序。以下独立代码片段是可选方案,并非一个组合初始化脚本。

跟踪导出器

from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter

# Create exporter
exporter = AzureMonitorTraceExporter(
    connection_string="InstrumentationKey=xxx;..."
)

# Configure tracer provider
trace.set_tracer_provider(TracerProvider())
trace.get_tracer_provider().add_span_processor(
    BatchSpanProcessor(exporter)
)

# Use tracer
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("my-span"):
    print("Hello, World!")

指标导出器

from opentelemetry import metrics
from opentelemetry.sdk.metrics import MeterProvider
from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader
from azure.monitor.opentelemetry.exporter import AzureMonitorMetricExporter

# Create exporter
exporter = AzureMonitorMetricExporter(
    connection_string="InstrumentationKey=xxx;..."
)

# Configure meter provider
reader = PeriodicExportingMetricReader(exporter, export_interval_millis=60000)
metrics.set_meter_provider(MeterProvider(metric_readers=[reader]))

# Use meter
meter = metrics.get_meter(__name__)
counter = meter.create_counter("requests_total")
counter.add(1, {"route": "/api/users"})

日志导出器

import logging
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 AzureMonitorLogExporter

# Create exporter
exporter = AzureMonitorLogExporter(
    connection_string="InstrumentationKey=xxx;..."
)

# Configure logger provider
logger_provider = LoggerProvider()
logger_provider.add_log_record_processor(BatchLogRecordProcessor(exporter))
set_logger_provider(logger_provider)

# Add handler to Python logging
handler = LoggingHandler(level=logging.INFO, logger_provider=logger_provider)
logging.getLogger().addHandler(handler)

# Use logging
logger = logging.getLogger(__name__)
logger.info("This will be sent to Application Insights")

从环境变量读取

导出器会自动读取 APPLICATIONINSIGHTS_CONNECTION_STRING:

from azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter

# Connection string from environment
exporter = AzureMonitorTraceExporter()

Azure AD 身份验证

from azure.identity import DefaultAzureCredential
from azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter

exporter = AzureMonitorTraceExporter(
    credential=DefaultAzureCredential()
)

采样

使用 ApplicationInsightsSampler 实现一致的采样:

from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.sampling import ParentBasedTraceIdRatio
from azure.monitor.opentelemetry.exporter import ApplicationInsightsSampler

# Sample 10% of traces
sampler = ApplicationInsightsSampler(sampling_ratio=0.1)

trace.set_tracer_provider(TracerProvider(sampler=sampler))

离线存储

配置离线存储以便重试:

from azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter

exporter = AzureMonitorTraceExporter(
    connection_string="...",
    storage_directory="/path/to/storage",  # Custom storage path
    disable_offline_storage=False  # Enable retry (default)
)

禁用离线存储

exporter = AzureMonitorTraceExporter(
    connection_string="...",
    disable_offline_storage=True  # Disable disk persistence; transport retry behavior is separate
)

主权云

from azure.identity import AzureAuthorityHosts, DefaultAzureCredential
from azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter

# Azure Government
credential = DefaultAzureCredential(authority=AzureAuthorityHosts.AZURE_GOVERNMENT)
exporter = AzureMonitorTraceExporter(
    connection_string="InstrumentationKey=xxx;IngestionEndpoint=https://xxx.in.applicationinsights.azure.us/",
    credential=credential
)

导出器类型

导出器遥测类型Application Insights 表
AzureMonitorTraceExporter跟踪/Spanrequests、dependencies、exceptions
AzureMonitorMetricExporter指标customMetrics、performanceCounters
AzureMonitorLogExporter日志traces、customEvents

配置选项

参数描述默认值
connection_stringApplication Insights 连接字符串来自环境变量
credential用于 AAD 身份验证的 Azure 凭据None
disable_offline_storage禁用重试存储False
storage_directory自定义存储路径临时目录

最佳实践

  1. 在生产环境中使用 BatchSpanProcessor(而非 SimpleSpanProcessor)
  2. 使用 ApplicationInsightsSampler,以便在各服务间保持一致的采样
  3. 启用离线存储,以提高生产环境中的可靠性
  4. 使用 AAD 身份验证,而非检测密钥
  5. 根据工作负载设置合适的导出间隔
  6. 除非需要自定义管道,否则使用发行包(azure-monitor-opentelemetry)

限制

  • 仅当任务明确符合上述范围时,才使用此技能。
  • 请勿将输出视为替代环境特定验证、测试或专家审查的方案。
  • 如果缺少必要输入、权限、安全边界或成功标准,请停止并请求澄清。

评论

支持 Markdown