排查 Python 中的 OpenTelemetry 问题

本文讨论如何在 Python 中排查 OpenTelemetry 问题。

故障排除清单

步骤 1:启用诊断日志记录

Microsoft Azure Monitor 导出程序使用 Python 标准日志记录库 进行内部日志记录。 为 OpenTelemetry API 和 Azure Monitor 导出程序日志分配的严重性级别 WARNING 为 异常 ERROR 活动或 。 INFO严重性级别用于常规活动或成功活动。

默认情况下,Python 日志记录库将严重性级别设置为 WARNING。 因此,必须更改严重性级别才能查看此严重性设置下的日志。 以下示例代码演示如何将所有严重级别的日志输出到控制台和文件:

...
import logging

logging.basicConfig(format = "%(asctime)s:%(levelname)s:%(message)s", level = logging.DEBUG)

logger = logging.getLogger(__name__)
file = logging.FileHandler("example.log")
stream = logging.StreamHandler()
logger.addHandler(file)
logger.addHandler(stream)
...

步骤 2:测试应用程序主机与引入服务之间的连接

Application Insights SDK 和代理发送遥测数据,以作为引入终结点的 REST 调用进行引入。 若要测试从 Web 服务器或应用程序主机计算机到引入服务终结点的连接,请使用 PowerShell 中的cURL命令或原始 REST 请求。 有关详细信息,请参阅 排查 Azure Monitor Application Insights 中缺少的应用程序遥测问题

步骤 3:避免重复遥测

如果创建处理器或导出服务器的多个实例,则通常会导致重复遥测。 确保一次仅针对每个遥测支柱运行一个导出服务器和处理器, (日志、指标和分布式跟踪) 。

以下部分介绍可能导致重复遥测的方案。

Azure Functions中的重复跟踪日志

如果 Application Insights 中每个跟踪日志都有一对条目,则可能已启用以下类型的日志记录检测:

  • Azure Functions中的本机日志记录检测
  • azure-monitor-opentelemetry分发中的日志记录检测

若要防止重复,可以禁用分发的日志记录,但保持本机日志记录检测处于启用状态Azure Functions。 为此,请将 OTEL_LOGS_EXPORTER 环境变量设置为 None

“Always On”Azure Functions中的重复遥测

如果 Azure Functions 中的Always On设置设置为“开”,Azure Functions在每次运行完成后,某些进程在后台运行。 例如,假设你有一个每次调用 configure_azure_monitor 5 分钟的计时器函数。 20 分钟后,你可能有四个指标导出程序同时运行。 这种情况可能是重复指标遥测的来源。

在这种情况下,请将“Always On”设置设置为“关”,或尝试在每次configure_azure_monitor调用之间手动关闭提供程序。 若要关闭每个提供程序,请为每个当前计量器、跟踪器和记录器提供程序运行关闭调用,如以下代码所示:

get_meter_provider().shutdown()
get_tracer_provider().shutdown()
get_logger_provider().shutdown()

Azure 工作簿和 Jupyter Notebook

Azure 工作簿和 Jupyter Notebook 可能会使导出进程在后台运行。 若要防止重复遥测,请在对 进行更多调用 configure_azure_monitor之前清除缓存。

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 还可以向 Azure 反馈社区提交产品反馈。