用于 Python 应用程序的 Azure Application Insights 日志记录 - 显式设置异常属性

Posted

技术标签:

【中文标题】用于 Python 应用程序的 Azure Application Insights 日志记录 - 显式设置异常属性【英文标题】:Azure Application Insights logging for Python Application - Set Exception properties explicitly 【发布时间】:2020-12-26 13:47:15 【问题描述】:

我正在尝试将异常从在 Azure 应用服务 中运行的 Python 应用程序 发送到指定的 Azure Application Insights 实例。为此,我正在使用OpenCensus python 库。 基本日志记录和异常已成功到达 App Insight。

除此之外,我想知道是否有一种方法可以配置异常属性,例如:problemId 或任何其他属性,以明确反映特定值以便更轻松地发出警报(例如发送电子邮件到特定基于问题的分组)。

任何建议/指针都会非常有帮助

【问题讨论】:

您是否使用 logger.exception() 方法记录异常? 【参考方案1】:

您可以使用custom_dimensions 字段在额外的关键字参数中将自定义属性添加到您的日志消息(不仅是异常,还包括所有其他日志类型,如跟踪、事件等)。这些属性在 Azure Monitor 的 customDimensions 中显示为键值对。然后您可以根据它查询、查看或配置警报。

要使此功能起作用,您需要将字典传递给custom_dimensions 字段。如果您传递任何其他类型的参数,记录器将忽略它们。

注意:OpenCensus Python 不会自动跟踪和发送异常遥测数据。它们通过 Python 日志库使用异常通过 AzureLogHandler 发送。您可以像普通日志记录一样添加自定义属性。

import logging

from opencensus.ext.azure.log_exporter import AzureLogHandler

logger = logging.getLogger(__name__)
# TODO: replace the all-zero GUID with your instrumentation key.
logger.addHandler(AzureLogHandler(
    connection_string='InstrumentationKey=00000000-0000-0000-0000-000000000000')
)

properties = 'custom_dimensions': 'key_1': 'value_1', 'key_2': 'value_2'

# Use properties in exception logs
try:
    result = 1 / 0  # generate a ZeroDivisionError
except Exception:
    logger.exception('Captured an exception.', extra=properties)

您可以在 Azure 门户中查看 customDimentions,如下所示(仅作为示例,与上述代码不同):

您可以在 Kusto Query 中看到相同的内容,如下所示:

您可以查询这些并根据它配置警报(下图显示traces,对于例外情况,它将是exceptions table):

【讨论】:

以上是关于用于 Python 应用程序的 Azure Application Insights 日志记录 - 显式设置异常属性的主要内容,如果未能解决你的问题,请参考以下文章

在 azure app 服务上运行 python dlib 库

Datetimeoffset 不适用于 azure app 服务

用于 Python 应用程序的 Azure Application Insights 日志记录 - 显式设置异常属性

用于配置 Azure Function App TLS/SSL“仅 HTTPS”设置的 Az CLI

在Terraform Azure App服务资源中配置CORS

用于多个 WebApi 端点的 Azure AD 不记名令牌?