【问题标题】:Azure App Service with windows container http logs are missing the cs-username带有 Windows 容器 http 日志的 Azure 应用服务缺少 cs 用户名
【发布时间】:2022-02-25 04:44:58
【问题描述】:

我在 .NET Framework 4.8 上有一个 asp.net 5 Web 应用程序,它作为一个带有 Windows Server 2019 容器映像的 azure 应用程序服务运行。我设置了一个诊断设置以将“AppServiceHTTPLogs”发送到事件中心,在检查日志时,我注意到经过身份验证的请求缺少 CsUsername 属性。

在本地甚至作为 Azure 容器实例运行相同的容器映像并检查容器上的 IIS 日志我可以看到用户名,因此这与作为应用服务运行时捕获 https 日志的方式和位置有关日志不会获取经过身份验证的主体的身份名称。

还有其他人遇到过这种情况吗?我是否需要将主体公开为响应标头以供日志记录使用?

更新:2022 年 2 月 24 日

除了在这里询问之外,我还启动了一个 azure 支持的案例,询问为什么运行 Windows 容器的 Windows 应用服务计划上的 Web 服务器从 azure 应用服务日志记录缺少 cs-username 信息,同时安慰正在运行应用服务的容器并检查 C:\inetpub\logs\LogFiles\W3SVC1 中的 w3c 日志会显示 cs-username 值。

他们终于回过神来说:

目前恐怕您设置的体系结构不支持此功能,获取 CsUsername 详细信息的唯一方法是部署 Linux 应用服务,然后将 Azure 存储帐户作为数据端点。

这对我没有任何帮助,因为我无法在 Linux 应用服务计划中运行 .NET Framework 4.8 ASP.NET MVC 5 应用容器。通常,通过部署 Windows 容器以作为 azure 应用程序服务运行的考验,使用 Azure DevOps 管道将容器作为 azure 应用程序服务运行,我发现微软对运行基于 Windows 的容器的支持非常具有挑战性,而且没有太多持续性支持。他们试图推动 linux 托管环境,不幸的是,只有当您的架构基于 .NET 核心框架时,这才是一种选择。

【问题讨论】:

    标签: azure azure-web-app-service iis-logs


    【解决方案1】:

    还有其他人遇到过这种情况吗?我是否需要将委托人公开为 日志记录的响应标头以获取它?

    可以通过以下两种不同的方式解决此问题,以下是解决步骤

    A] 直接更改 applicationHost.config

    使用以下步骤编辑高级日志记录功能的 applicationHost.config 文件:

    • 在文本编辑器中打开 C:\Windows\System32\inetsrv\config\applicationHost.config 文件。
    • 找到advancedLogging 部分。
    • advancedLogging 中,找到<field id='UserName'...> 条目。

    <field id="UserName" sourceName="UserName" sourceType="
     RequestHeader " logHeaderName="cs-username" category="Default" loggingDataType="TypeLPCSTR" />
    • 修改sourceType字段为BuiltIn,如下:

    <field id="UserName" sourceName="UserName" sourceType="
     BuiltIn " logHeaderName="cs-username" category="Default" loggingDataType="TypeLPCSTR" />

    B] 通过 Appcmd.exe 更改 applicationHost.config

    您可以使用 appcmd.exe 工具进行配置更改。

    运行这个命令:

    appcmd.exe set config -section:system.webServer/advancedLogging/server
    /fields.[id='UserName'].sourceType:"BuiltIn" /commit:apphost
    

    有关完整信息,您可以通过下面提到的链接

    No cs-username data in Advanced Logging - Internet Information Services | Microsoft Docs

    cs-username not populated in IIS logs · Issue #6741 · dotnet/aspnetcore · GitHub

    【讨论】:

    • 我查看了 Windows 容器中的 C:\Windows\System32\inetsrv\config\applicationHost.config 文件,但没有看到高级日志记录部分。我正在使用 4.8-windowsservercore-ltsc2019 基础映像。检查docs.microsoft.com/en-us/iis/extensions/advanced-logging-module/… 表示高级日志记录仅支持 IIS 7.5 及更早版本。是这个原因吗?
    • 另外,当我使用 Kudu 控制台应用服务容器并检查容器中的 IIS 日志时,我看到了用户名。应用服务抽象似乎没有记录容器中 IIS 模块中可用的信息。
    猜你喜欢
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 2020-09-08
    • 1970-01-01
    相关资源
    最近更新 更多