跳转到主要内容

Microsoft Azure Monitor Opentelemetry Distro Python客户端库

项目描述

Azure Monitor Opentelemetry Distro Python客户端库

Azure Monitor版的Opentelemetry Python是一个“一站式”遥测解决方案,只需一行代码即可对你的应用程序进行性能监控。该版本通过OpenTelemetry性能监控捕获遥测数据,并通过Azure Monitor性能监控导出器将遥测数据发送到Azure Monitor。

在使用此SDK之前,请阅读并理解数据收集基础,特别是关于遥测类型的部分。OpenTelemetry术语与应用洞察术语不同,因此理解遥测类型如何映射彼此是很重要的。

此版本自动安装以下库

官方支持的性能监控

OpenTelemetry性能监控允许自动收集从底层性能监控库发送的请求。以下是在Azure Monitor版本中捆绑的OpenTelemetry性能监控列表。默认情况下,这些性能监控已启用。有关如何取消这些性能监控的启用,请参阅下面的使用部分。

性能监控 支持的库名称 支持的版本
Azure Core Tracing OpenTelemetry azure_sdk
OpenTelemetry Django性能监控 django link
OpenTelemetry FastApi性能监控 fastapi link
OpenTelemetry Flask性能监控 flask link
OpenTelemetry Psycopg2性能监控 psycopg2 link
OpenTelemetry Requests性能监控 requests link
OpenTelemetry UrlLib性能监控 urllib 所有
OpenTelemetry UrlLib3性能监控 urllib3 link

如果您想添加对其他OpenTelemetry性能监控的支持,请提交一个功能请求。在此期间,您可以通过自己的API(即instrument())在代码中手动使用OpenTelemetry性能监控。请参阅此示例

关键概念

此软件包捆绑了一系列OpenTelemetry和Azure Monitor组件,以实现将遥测数据收集并发送到Azure Monitor。对于MANUAL性能监控,请使用configure_azure_monitor函数。目前尚不支持AUTOMATIC性能监控。

Azure Monitor OpenTelemetry导出器是完成此任务的主要组件。您可以通过此软件包直接使用导出器和它们的API。请参阅导出器文档,了解OpenTelemetry和Azure Monitor组件如何协同工作以启用遥测数据的收集和导出。

目前,OpenTelemetry中所有可用的性能监控都处于beta状态,这意味着它们并不稳定,未来可能会有破坏性的更改。正在努力将这些性能监控推向更稳定的状态。

入门

先决条件

要使用此软件包,您必须具备

安装软件包

使用pip安装Azure Monitor OpenTelemetry版本

pip install azure-monitor-opentelemetry

使用

您可以使用 configure_azure_monitor 为您的应用程序设置 Azure Monitor 的监控。 configure_azure_monitor 支持以下可选参数。所有传入参数的优先级高于任何相关环境变量。

参数 描述 环境变量
connection_string 您的 Application Insights 资源的连接字符串。如果未明确传递,连接字符串将自动从 APPLICATIONINSIGHTS_CONNECTION_STRING 环境变量中获取。 APPLICATIONINSIGHTS_CONNECTION_STRING
enable_live_metrics 启用 实时指标 功能。默认值为 False N/A
logger_name 收集遥测信息的 Python 日志记录器 的名称。 N/A
instrumentation_options 一个嵌套字典,用于确定要启用或禁用哪些监控。监控通过其 库名称 来引用。例如,{"azure_sdk": {"enabled": False}, "flask": {"enabled": False}, "django": {"enabled": True}} 将禁用 Azure 核心跟踪和 Flask 监控,但保留 Django 和其他默认监控启用。下面解释的 OTEL_PYTHON_DISABLED_INSTRUMENTATIONS 环境变量也可以用来禁用监控。 N/A
resource 指定与您的应用程序关联的 OpenTelemetry 资源。传入的 资源属性 优先于默认属性和来自 资源检测器 的属性。 OTEL_SERVICE_NAME, OTEL_RESOURCE_ATTRIBUTES, OTEL_EXPERIMENTAL_RESOURCE_DETECTORS
span_processors 一个 跨度处理器 列表,将在导出之前对每个跨度进行处理。这对于过滤/修改遥测很有用。 N/A
views 一个 视图 列表,将用于自定义由 SDK 导出的指标。 N/A

您还可以使用 OpenTelemetry 环境变量 进行进一步配置。

环境变量 描述
OTEL_SERVICE_NAME, OTEL_RESOURCE_ATTRIBUTES 指定与您的应用程序关联的 OpenTelemetry 资源
OTEL_LOGS_EXPORTER 如果设置为 None,将禁用日志遥测的收集和导出。
OTEL_METRICS_EXPORTER 如果设置为 None,将禁用指标遥测的收集和导出。
OTEL_TRACES_EXPORTER 如果设置为 None,将禁用分布式跟踪遥测的收集和导出。
OTEL_BLRP_SCHEDULE_DELAY 指定日志导出间隔(以毫秒为单位)。默认值为 5000。
OTEL_BSP_SCHEDULE_DELAY 指定分布式跟踪导出间隔(以毫秒为单位)。默认值为 5000。
OTEL_TRACES_SAMPLER_ARG 指定要采样的分布式跟踪遥测比率。采样的接受值在[0,1]范围内。默认为1.0,表示不采样遥测。
OTEL_PYTHON_DISABLED_INSTRUMENTATIONS 指定要禁用哪些支持的 instrumentation。禁用的 instrumentation 不会作为 configure_azure_monitor 的一部分进行 instrumentation。但是,它们仍然可以通过 instrument() 直接手动 instrumentation。接受用逗号分隔的列表,列表中的项为小写 库名称。例如,设置为 "psycopg2,fastapi" 以禁用 Psycopg2 和 FastAPI 的 instrumentation。默认为空列表,启用所有支持的 instrumentation。
OTEL_EXPERIMENTAL_RESOURCE_DETECTORS 一个用于指定生成资源属性的 Resource Detectors 的实验性 OpenTelemetry 环境变量。这是一个实验性功能,该变量的名称及其行为可能以不兼容的方式更改。默认为 "azure_app_service,azure_vm",以启用 Azure App Service 和 Azure VM 的 Azure Resource Detectors。要添加或删除特定的资源探测器,请相应地设置环境变量。有关更多信息,请参阅OpenTelemetry Python 资源探测器文档

Azure 监控 OpenTelemetry 导出器配置

您可以直接将 Azure 监控 OpenTelemetry 导出器配置参数传递给 configure_azure_monitor。有关更多导出配置相关信息

...
configure_azure_monitor(
   connection_string="<your-connection-string>",
   disable_offline_storage=True,
)
...

示例

示例在此可用,以展示如何使用上述配置选项。

Azure Functions 中的监控

跟踪关联

追踪进入您在 Azure Functions 中托管的 Python 应用程序中的传入请求将不会自动与内部跟踪的遥测关联。您可以通过以下方式手动实现跟踪关联:直接提取 TraceContext,如下所示

import azure.functions as func

from azure.monitor.opentelemetry import configure_azure_monitor
from opentelemetry import trace
from opentelemetry.propagate import extract

# Configure Azure monitor collection telemetry pipeline
configure_azure_monitor()

def main(req: func.HttpRequest, context) -> func.HttpResponse:
   ...
   # Store current TraceContext in dictionary format
   carrier = {
      "traceparent": context.trace_context.Traceparent,
      "tracestate": context.trace_context.Tracestate,
   }
   tracer = trace.get_tracer(__name__)
   # Start a span using the current context
   with tracer.start_as_current_span(
      "http_trigger_span",
      context=extract(carrier),
   ):
      ...

记录问题

Azure Functions 工作进程本身会发送遥测,而无需使用 azure 监控 SDK(调用 configure_azure_monitor())。这可能导致在发送记录遥测时出现重复的遥测条目。我们向客户推荐仅使用 SDK,因为它将允许比使用 Azure Functions 工作进程提供的内置遥测更丰富遥测和功能。您可以通过清除您的记录器处理程序列表来关闭 Azure Functions 遥测记录器。

...
root_logger = logging.getLogger()
for handler in root_logger.handlers[:]:
    root_logger.removeHandler(handler)
...

请确保在设置任何记录器或调用 configure_azure_monitor() 之前调用以上操作。

您还可以通过Azure Functions 配置禁用记录。

v2.x+

...
{
  "logging": {
    ...
    "logLevel": {
      "default": "None",
      ...
    }
  }
}
...

v1.x

...
{
  "logger": {
    "categoryFilter": {
      "defaultLevel": "None",
      ...
    }
  }
}
...

故障排除

导出器抛出在 Azure Core 中定义的异常。

下一步

查看文档以获取更多信息。

贡献

本项目欢迎贡献和建议。大多数贡献需要您同意一份贡献者许可协议(CLA),声明您有权并且确实授予我们使用您贡献的权利。有关详细信息,请访问https://cla.microsoft.com

提交拉取请求时,CLA-bot 将自动确定您是否需要提供 CLA 并相应地装饰 PR(例如,标签、注释)。只需遵循机器人提供的说明即可。您可能只需要在所有使用我们 CLA 的仓库中这样做一次。

本项目采用了微软开源行为准则。如需更多信息,请参阅行为准则常见问题解答或联系opencode@microsoft.com,如有任何其他问题或建议。

附加文档

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

azure_monitor_opentelemetry-1.6.2.tar.gz (43.8 kB 查看哈希值)

上传时间 源代码

构建分发

azure_monitor_opentelemetry-1.6.2-py3-none-any.whl (22.7 kB 查看哈希值)

上传时间 Python 3

由以下赞助

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面