为 Azure 应用服务中的应用启用诊断日志记录

概述

Azure 提供内置诊断功能,可帮助调试应用服务应用。 在本文中,将了解如何启用诊断日志记录并将检测添加到应用程序,以及如何访问由 Azure 记录的信息。

本文使用 Azure 门户和 Azure CLI 来处理诊断日志。 有关通过 Visual Studio 使用诊断日志的信息,请参阅在 Visual Studio 中对 Azure 进行故障排除

注意

除了本文中所述的日志记录功能以外,Azure 监视还提供新的集成式日志记录功能。 你会在将日志发送到 Azure Monitor 部分中找到有关此功能的详细信息。

类型 平台 位置 说明
应用程序日志记录 Windows、Linux 应用服务文件系统和/或 Azure 存储 Blob 记录应用程序代码生成的消息。 这些消息可能由所选的 Web 框架生成,或者由应用程序代码使用你的语言的标准日志记录模式直接生成。 为每条消息分配以下类别之一:“严重”、“错误”、“警告”、“信息”、“调试”和“跟踪”。 启用应用程序日志记录时,可以通过设置严重性级别来选择日志记录的详细程度。
Web 服务器日志记录 Windows 应用服务文件系统或 Azure 存储 Blob 采用 W3C 扩展日志文件格式的原始 HTTP 请求数据。 每条日志消息包含 HTTP 方法、资源 URI、客户端 IP、客户端端口、用户代理、响应代码等数据。
详细错误消息 Windows 应用服务文件系统 已发送到客户端浏览器的 .htm 错误页副本。 出于安全原因,不应将详细错误页发送到生产环境中的客户端,但每当出现 HTTP 代码为 400 或更高的应用程序错误时,应用服务都可以保存错误页。 该页可能包含有助于确定服务器返回错误代码的原因的信息。
失败请求跟踪 Windows 应用服务文件系统 有关失败请求的详细跟踪信息,包括对用于处理请求的 IIS 组件和每个组件所用的时间的跟踪。 如果要提高站点性能或隔离特定的 HTTP 错误,这将非常有用。 为每个失败的请求生成一个文件夹,其中包含 XML 日志文件,以及用于查看日志文件的 XSL 样式表。
部署日志记录 Windows、Linux 应用服务文件系统 有关何时将内容发布到应用的日志。 部署日志记录会自动发生,它没有可配置的设置。 它可以帮助确定部署失败的原因。 例如,如果使用自定义部署脚本,你可能会使用部署日志记录确定该脚本失败的原因。

在应用服务文件系统中存储日志时,日志受定价层的可用存储的约束(请参阅应用服务限制)。

注意

应用服务提供了一个专用的交互式诊断工具来帮助你排查应用程序问题。

此外,可以使用其他 Azure 服务(例如 Azure Monitor)来改善应用的日志记录和监视功能。

启用应用程序日志记录 (Windows)

若要在 Azure 门户中为 Windows 应用启用应用程序日志记录,请导航到你的应用,然后选择“应用服务日志”。

对“应用程序日志记录(文件系统)”和/或“应用程序日志记录(Blob)”选择“打开”。

“文件系统”选项用于临时调试,在 12 小时后会自行关闭。 “Blob”选项用于长期日志记录,需要提供一个要将日志写入到的 Blob 存储容器。 “Blob”选项还会在日志消息中包含其他信息,例如日志消息的来源 VM 实例 ID (InstanceId)、线程 ID (Tid) 和更详细的时间戳 (EventTickCount)。

注意

目前,只有 .NET 应用程序日志可以写入到 blob 存储。 Java、PHP、Node.js、Python 应用程序日志只能存储在应用服务文件系统上(无需修改代码即可将日志写入外部存储)。

此外,如果重新生成存储帐户的访问密钥,则必须重置相应的日志记录配置才能使用更新的访问密钥。 为此,请按以下步骤操作:

  1. 在“配置”选项卡上,将相应的日志记录功能设置为“关闭”。 保存设置。
  2. 再次启用将日志记录到存储帐户 Blob。 保存设置。

选择“级别”,即要记录的详细级别。 下表显示了每个级别包含的日志类别:

Level 包含的类别
已禁用
错误 “错误”、“严重”
警告 “警告”、“错误”、“严重”
信息 “信息”、“警告”、“错误”、“严重”
详细 “跟踪”、“调试”、“信息”、“警告”、“错误”、“严重”(所有类别)

完成后,选择“保存”。

注意

如果将日志写入 blob,则在删除该应用但保留 blob 中的日志时,不会再应用保留策略。

启用应用程序日志记录(Linux/容器)

若要在 Azure 门户中为 Linux 应用或自定义容器启用应用程序日志记录,请导航到你的应用,然后选择“应用服务日志”。

在“应用程序日志记录”中,选择“文件系统”。

在“配额(MB)”中,为应用程序日志指定磁盘配额。 在“保留期(天)”中,设置日志要保留的天数。

完成后,选择“保存”。

启用 Web 服务器日志记录

若要在 Azure 门户中为 Windows 应用启用 Web 服务器日志记录,请导航到你的应用,然后选择“应用服务日志”。

对于“Web 服务器日志记录”,请选择“存储”以将日志存储在 Blob 存储上,或选择“文件系统”以将日志存储在应用服务文件系统上。

在“保留期(天)”中,设置日志要保留的天数。

注意

如果重新生成存储帐户的访问密钥,则必须重置相应的日志记录配置才能使用更新的密钥。 为此,请按以下步骤操作:

  1. 在“配置”选项卡上,将相应的日志记录功能设置为“关闭”。 保存设置。
  2. 再次启用将日志记录到存储帐户 Blob。 保存设置。

完成后,选择“保存”。

注意

如果将日志写入 blob,则在删除该应用但保留 blob 中的日志时,不会再应用保留策略。

记录详细错误

若要在 Azure 门户中保存 Windows 应用的错误页或失败请求跟踪,请导航到你的应用,然后选择“应用服务日志”。

在“详细错误日志记录”或“失败请求跟踪”下,选择“打开”,然后选择“保存”。

这两种类型的日志都将存储在应用服务文件系统中。 最多可保留 50 个错误(文件/文件夹)。 当 HTML 文件的数目超出 50 时,最旧的错误文件会被自动删除。

默认情况下,“失败请求跟踪”功能会捕获 HTTP 状态代码在 400 到 600 之间的失败请求的日志。 若要指定自定义规则,可以替代 “web.config”文件中的 <traceFailedRequests> 节。

在代码中添加日志消息

在应用程序代码中,可以使用普通的日志记录功能将日志消息发送到应用程序日志。 例如:

流式传输日志

在实时流式传输日志之前,请启用所需的日志类型。 应用服务将会流式传输写入到存储于 /home/LogFiles 目录 (D:\home\LogFiles) 中以 .txt、.log 或 .htm 结尾的控制台输出或文件的所有信息。

注意

某些类型的日志记录缓冲区会对日志文件执行写入操作,这可能会导致流中的事件变成混乱。 例如,用户访问页面时出现的应用程序日志项,可能显示在该页面请求所对应的 HTTP 日志项之前的流中。

在 Azure 门户中配置

若要在 Azure 门户中流式传输日志,请导航到你的应用并选择“日志流”。

在本地 shell 中

若要在本地 Shell 中实时流式传输日志,请使用以下命令:

重要

此命令可能无法与 Linux 应用服务计划中托管的 Web 应用配合使用。

az webapp log tail --name appname --resource-group myResourceGroup

若要筛选特定日志类型(如 HTTP),请使用 --Provider 参数。 例如:

az webapp log tail --name appname --resource-group myResourceGroup --provider http

访问日志文件

如果为日志类型配置 Azure 存储 Blob 选项,需要使用适用于 Azure 存储的客户端工具。 有关详细信息,请参阅 Azure 存储客户端工具

对于存储在应用服务文件系统中的日志,最简单的方法是在浏览器中通过以下链接下载 ZIP 文件:

  • Linux/自定义容器:https://<app-name>.scm.chinacloudsites.cn/api/logs/docker/zip
  • Windows 应用:https://<app-name>.scm.chinacloudsites.cn/api/dump

对于 Linux/自定义容器,ZIP 文件包含 docker 主机和 docker 容器的控制台输出日志。 对于横向扩展的应用,ZIP 文件包含每个实例的一组日志。 在应用服务文件系统中,这些日志文件是“/home/LogFiles”目录的内容。

对于 Windows 应用,该 ZIP 文件包含应用服务文件系统中 D:\Home\LogFiles 目录的内容。 其结构如下:

日志类型 目录 说明
应用程序日志 /LogFiles/Application/ 包含一个或多个文本文件。 日志消息的格式取决于所用的日志记录提供程序。
失败请求跟踪 /LogFiles/W3SVC#########/ 包含 XML 文件和一个 XSL 文件。 可以在浏览器中查看带格式的 XML 文件。
详细错误日志 /LogFiles/DetailedErrors/ 包含 HTM 错误文件。 可以在浏览器中查看 HTM 文件。
Web 服务器日志 /LogFiles/http/RawLogs/ 包含使用 W3C 扩展日志文件格式格式化的文本文件。 可以使用文本编辑器或诸如日志分析程序之类实用工具来阅读此信息。
应用服务不支持 s-computernames-ipcs-version 字段。
部署日志 /LogFiles/Git//deployments/ 包含内部部署进程生成的日志,以及 Git 部署的日志。

将日志发送到 Azure Monitor

通过新 Azure Monitor 集成,你可以创建诊断设置,以将日志发送到存储帐户、事件中心和 Log Analytics。

Diagnostic Settings

支持的日志类型

下表显示了支持的日志类型和说明:

日志名称 日志类型 Windows Windows 容器 Linux Linux 容器 说明
应用服务控制台日志 AppServiceConsoleLogs Java SE 和 Tomcat 标准输出和标准错误 3
HTTP 日志 AppServiceHTTPLogs Web 服务器日志
应用服务环境平台日志 AppServiceEnvironmentPlatformLogs 不适用 应用服务环境:缩放、配置更改和状态日志
访问审核日志 AppServiceAuditLogs 通过 FTP 和 Kudu 进行的登录活动
站点内容更改审核日志 AppServiceFileAuditLogs TBA TBA 对站点内容所做的文件更改;仅适用于高级层和更高层级
应用服务应用程序日志 AppServiceAppLogs ASP.NET、.NET Core 和 Tomcat 1 ASP.NET 和 Tomcat 1 .NET Core、Java、SE 和 Tomcat Blessed 映像 2 Java SE 和 Tomcat Blessed 映像 2 应用程序日志 3
IPSecurity 审核日志 AppServiceIPSecAuditLogs 来自 IP 规则的请求
应用服务平台日志 AppServicePlatformLogs TBA 容器操作日志
报告防病毒审核日志 AppServiceAntivirusScanAuditLogs 3 使用 Microsoft Defender for Cloud 的防病毒扫描日志;仅适用于高级层

1 对于 Tomcat 应用,请将 TOMCAT_USE_STARTUP_BAT 添加到应用设置并将其设置为 false0。 需要使用最新的 Tomcat 版本,并使用 java.util.logging 。

2 对于 Java SE 应用,请将 WEBSITE_AZMON_PREVIEW_ENABLED 添加到应用设置并将其设置为 true1

3 当前日志记录限制设置为每分钟 100 个日志。

4 AppServiceAntivirusScanAuditLogs 日志类型目前仍为预览版

网络注意事项

有关诊断设置限制,请参阅关于目标限制的官方诊断设置文档

后续步骤