来自两个 azure 应用程序服务的日志不会同时转储到单个应用程序洞察力中

Posted

技术标签:

【中文标题】来自两个 azure 应用程序服务的日志不会同时转储到单个应用程序洞察力中【英文标题】:logs from two azure app service not dumping in a single app insight at the same time 【发布时间】:2022-01-06 03:11:30 【问题描述】:

我有 2 web apps 使用 python flask 运行。 创建了一个 single azure application insights 资源。这两个应用的日志当时并未转储到相同的应用洞察中。 我目前看到一个奇怪的案例。 无论哪个网络服务器最近启动,这些应用服务日志都会转储到应用洞察中。

如果 webapp1 先启动,webapp2 第二启动(在 webapp1 之后)-> 应用洞察只有 webapps2 的日志 如果 webapp2 先启动,webapp1 第二启动(在 webapp2 之后)-> 应用洞察只有 webapps1 的日志。

但我需要在一个应用洞察中同时获取这两个应用的日志。 我只使用 logging.* 功能。未配置任何遥测或依赖跟踪。

Instrumentation Key 连接字符串已在两个 web 应用程序中正确配置。 iKey 没有问题。

【问题讨论】:

【参考方案1】:

如果您有两个或更多服务将遥测数据发送到相同的 Application Insights 资源,您需要set Cloud Role Names 才能在应用程序地图上正确表示它们。

设置云角色名称和云角色实例:-

您可以通过Resource 属性设置Cloud Role Name 和云角色实例。

此步骤会将云角色名称和云角色实例从其默认值更新为对您的团队有意义的值。它们将作为节点下方的名称出现在应用程序地图上。

云角色名称使用 service.namespaceservice.name 属性,但如果未设置 service.namespace,它会回退到 service.name

云角色实例使用service.instance.id 属性值。

... 
from opentelemetry.sdk.resources import SERVICE_NAME, SERVICE_NAMESPACE, SERVICE_INSTANCE_ID, Resource 
trace.set_tracer_provider(
 TracerProvider( 
 resource=Resource.create( 
  
 SERVICE_NAME: "my-helloworld-service",
   # ---------------------------------------- 
   # Setting role name and role instance
   # ----------------------------------------

 SERVICE_NAMESPACE: "my-namespace",    
 SERVICE_INSTANCE_ID: "my-instance", 
 # -------------------------------------------
 # Done setting role name and role instance  
 # -------------------------------------------
  
 )
 )
 )
 ...

注意:适用于 Python 应用程序的 Azure Monitor OpenTelemetry Exporter 目前处于预览阶段,尚未正式发布。

要更加熟悉 Azure Monitor Application Insights 和 OpenTelemetry,请参阅Azure Monitor Example Application。

请参阅此link 为您的 Python 应用程序设置 Azure Monitor。

【讨论】:

以上是关于来自两个 azure 应用程序服务的日志不会同时转储到单个应用程序洞察力中的主要内容,如果未能解决你的问题,请参考以下文章

azure 服务结构上的许多日志文件

无法使用 Nlog 将日志写入 Azure

Azure 应用服务 - 无法将日志存储在 Azure 存储中

ASP.NET Core 应用程序日志未写入 Azure 应用服务中的 Blob

Azure 中应用程序洞察数据的来源?

应用程序日志未显示在 Azure 应用服务 (AAS) 窗口中运行的 .NET 核心应用的日志流中