Azure 提供内置诊断来帮助调试 Azure 应用服务应用。 本文介绍如何启用诊断日志记录并向应用程序添加监测功能。 你还将了解如何访问 Azure 日志的信息。
注意
从 2024 年 6 月 1 日开始,新创建的应用服务应用可以生成使用命名约定 <app-name>-<random-hash>.<region>.chinacloudsites.cn
的唯一默认主机名。 例如: myapp-ds27dh7271aah175.westus-01.chinacloudsites.cn
。 现有应用名称保持不变。
myapp-ds27dh7271aah175.chinanorth3-01.chinacloudsites.cn
本文使用 Azure 门户 和 Azure CLI 来处理诊断日志。 有关使用 Visual Studio 处理诊断日志的信息,请参阅 使用 Visual Studio 排查 Azure 应用服务中的应用问题。
除了本文中的日志记录说明之外,还可以使用 Azure Monitor 集成日志记录功能。 有关详细信息,请参阅 将日志发送到 Azure Monitor。
日志记录类型的概述
类型 | 平台 | 日志存储位置 | 说明 |
---|---|---|---|
应用程序日志记录 | Windows、Linux | 应用服务文件系统和/或 Azure 存储块 | 记录应用程序代码生成的消息。 这些消息可由你选择的 Web 框架生成,也可以使用语言的标准日志记录模式直接从应用程序代码生成。 为每个消息分配以下类别之一: 严重、 错误、 警告、 信息、 调试或 跟踪。 启用应用程序日志记录时,可以通过设置严重性级别来选择日志记录的详细程度。 |
网络服务器日志记录 | Windows操作系统 | 应用服务文件系统或 Azure 存储 Blob | 采用 W3C 扩展日志文件格式的原始 HTTP 请求数据。 每个日志消息都包含 HTTP 方法、资源 URI、客户端 IP、客户端端口、用户代理和响应代码等数据。 |
详细的错误消息 | Windows操作系统 | 应用服务文件系统 | 已发送到客户端浏览器的 .htm 错误页副本。 出于安全原因,不应将详细的错误页发送到生产中的客户端。 但是,应用服务每次发生 HTTP 代码 400 或更高版本的应用程序错误时,都可以保存错误页。 该页可能包含有助于确定服务器返回错误代码的原因的信息。 |
失败请求跟踪 | Windows操作系统 | 应用服务文件系统 | 有关失败请求的详细跟踪信息,包括对用于处理请求的 IIS 组件和每个组件所用的时间的跟踪。 如果要提高站点性能或隔离特定的 HTTP 错误,此信息非常有用。 对于每个失败的请求都会生成一个文件夹。 该文件夹包含用于查看日志文件的 XML 日志文件和 XSL 样式表。 |
部署日志记录 | Windows、Linux | 应用服务文件系统 | 有关何时将内容发布到应用的日志。 部署日志记录会自动进行,部署日志记录没有可配置的设置。 它可以帮助确定部署失败的原因。 例如,如果使用自定义部署脚本,你可能会使用部署日志记录确定该脚本失败的原因。 |
当日志存储在应用服务文件系统中时,它们受定价层的可用存储的约束。 有关详细信息,请参阅App 服务限制。
启用应用程序日志记录 (Windows)
若要在 Azure 门户中为 Windows 应用启用应用程序日志记录,请执行以下作:
转到应用并选择“ 监视>应用服务日志”。
对于以下任一选项或两个选项,请选择 “开” :
应用程序日志记录(文件系统):此选项用于临时调试。 它在 12 小时内自行关闭。
应用程序日志记录(Blob):此选项适用于长期日志记录。 它需要一个 Blob 存储容器才能将日志写入其中。
Blob 选项包括日志消息中的其他信息,例如日志消息的源虚拟机实例的 ID、
InstanceId
线程 ID(Tid
)和更精细的时间戳(EventTickCount
)。
对于 级别,请选择要记录的详细信息级别。 下表显示了每个级别包含的日志类别:
级别 包含的类别 已禁用 无 错误 错误, 严重 警告 警告、 错误、 严重 信息 信息、 警告、 错误、 严重 详细 跟踪、 调试、 信息、 警告、 错误、 严重 (所有类别) 选择“保存”。
如果将日志写入 blob,则在删除该应用但保留 blob 中的日志时,不会再应用保留策略。
目前,只能将 .NET 应用程序日志写入 Blob 存储。 Java、PHP、Node.js和 Python 应用程序日志只能存储在应用服务文件系统中,而无需修改代码以将日志写入外部存储。
如果 重新生成存储帐户的访问密钥,则必须重置相应的日志记录配置才能使用更新的访问密钥:
在“ 配置 ”选项卡上,将相应的日志记录功能设置为 “关闭”。 保存设置。
再次启用对存储帐户 Blob 的日志记录。 保存设置。
启用应用程序日志记录(Linux 或容器)
若要在 Azure 门户中为 Linux 应用或自定义容器启用应用程序日志记录,请执行以下作:
转到应用并选择“ 监视>应用服务日志”。
在“应用程序日志记录”中,选择“文件系统”。
在“配额(MB)”中,为应用程序日志指定磁盘配额。
在 保留期(天)中,设置保留日志的天数。
选择“保存”。
启用 Web 服务器日志记录
若要在 Azure 门户中为 Windows 应用启用 Web 服务器日志记录,请执行以下作:
转到应用并选择“ 监视>应用服务日志”。
对于 Web 服务器日志记录,请选择 存储 以在 Blob 存储中存储日志,或选择 文件系统 将日志存储在应用服务文件系统中。
在 保留期(天)中,设置保留日志的天数。
选择“保存”。
如果将日志写入 blob,则在删除该应用但保留 blob 中的日志时,不会再应用保留策略。
如果 重新生成存储帐户的访问密钥,则必须重置相应的日志记录配置才能使用更新的密钥:
在“ 配置 ”选项卡上,将相应的日志记录功能设置为 “关闭”。 保存设置。
再次启用对存储帐户 Blob 的日志记录。 保存设置。
记录详细错误
若要在 Azure 门户中保存 Windows 应用的错误页或失败的请求跟踪,请执行以下作:
转到应用并选择“ 监视>应用服务日志”。
在“详细错误消息”或“失败的请求跟踪”下,选择“开”。
选择“保存”。
这两种类型的日志都将存储在应用服务文件系统中。 它最多保留 50 个错误(文件或文件夹)。 当 HTML 文件数超过 50 时,应用服务将删除最早的错误文件。
默认情况下,失败的请求跟踪会捕获 HTTP 状态代码在 400 到 600 之间失败的请求的日志。 若要指定自定义规则,请重写文件中的<traceFailedRequests>
Web.config
节。
在代码中添加日志消息
在应用程序代码中,可以使用常用的日志记录工具将日志消息发送到应用程序日志。 例如:
ASP.NET 应用程序可以使用 System.Diagnostics.Trace 类将信息记录到应用程序诊断日志。 例如:
System.Diagnostics.Trace.TraceError("If you're seeing this, something bad happened");
默认情况下,ASP.NET Core 使用 Microsoft.Extensions.Logging.AzureAppServices 日志记录提供程序。 有关详细信息,请参阅 Azure 中的 ASP.NET Core 日志记录。 有关 WebJobs SDK 日志记录的信息,请参阅 Azure WebJobs SDK 入门。
Python 应用程序可以使用 OpenCensus 包 将日志发送到应用程序诊断日志。
流式传输日志
在实时流式传输日志之前,请启用所需的日志类型。 应用服务会流式传输写入控制台输出的信息,或存储在 /home/LogFiles
目录中且文件名以 .txt、.log、.htm 结尾的文件内的信息(D:\home\LogFiles
)。
注意
某些类型的日志记录缓冲区会写入日志文件,这可能会导致事件在流中出现的顺序不正确。 例如,当用户访问页面时发生的应用程序日志条目可能在页面请求的相应 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 CLI 并 登录到帐户。 登录后,请遵循适用于 Cloud Shell 的说明。
访问日志文件
如果为日志类型配置 Azure 存储 Blob 选项,需要使用适用于 Azure 存储的客户端工具。 有关详细信息,请参阅 Microsoft使用 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
目录的内容。 部署日志存储在 /site/deployments/
.
对于 Windows 应用,ZIP 文件包含应用服务文件系统中目录的内容 D:\Home\LogFiles
。 其结构如下:
日志类型 | 目录 | 说明 |
---|---|---|
应用程序日志 | /LogFiles/Application/ |
包含一个或多个文本文件。 日志消息的格式取决于所使用的日志记录提供程序。 |
失败的请求跟踪 | /LogFiles/W3SVC#########/ |
包含 XML 文件和一个 XSL 文件。 可以在浏览器中查看带格式的 XML 文件。 |
详细的错误日志 | /LogFiles/DetailedErrors/ |
包含 HTM 错误文件。 可以在浏览器中查看 HTM 文件。 查看失败请求跟踪的另一种方法是转到门户中的应用页面。 在左侧菜单中,选择“ 诊断”并解决问题。 搜索 失败的请求跟踪日志,然后选择图标以浏览和查看所需的跟踪。 |
Web 服务器日志 | /LogFiles/http/RawLogs/ |
包含使用 W3C 扩展日志文件格式格式化的文本文件。 可以使用文本编辑器或 日志分析器等工具读取这些文件。 应用服务不支持 s-computername 和s-ip cs-version 字段。 |
部署日志 |
/LogFiles/Git/ 和 /deployments/ |
包含内部部署过程生成的日志以及 Git 部署的日志。 |
将日志发送到 Azure Monitor
通过 Azure Monitor 集成,可以 创建诊断设置 ,将日志发送到存储帐户、事件中心和 Log Analytics 工作区。 当你添加诊断设置时,应用服务会将应用设置添加到你的应用中,从而触发应用重启。
支持的日志类型
有关支持的日志类型及其说明的列表,请参阅 Microsoft.Web 支持的资源日志。
网络注意事项
有关诊断设置限制的信息,请参阅 目标限制。