你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本文包含此服务的所有监视参考信息。
有关可为应用程序网关收集的数据以及如何使用这些数据的详细信息,请参阅监视 Azure 应用程序网关。
指标
本部分列出了为此服务自动收集的所有平台指标。 这些指标也是 Azure Monitor 中支持的所有平台指标的全局列表的一部分。
有关指标保留的信息,请参阅 Azure Monitor 指标概述。
Microsoft.Network/applicationGateways 支持的指标
下表列出了可用于 Microsoft.Network/applicationGateways 资源类型的所有指标。 此表后面包含了许多指标的更多说明详细信息。
- 并非所有列都显示在每个表中。
- 某些列可能超出了页面的查看区域。 选择“展开表”以查看所有可用列。
表标题
- 类别 - 指标组或分类。
- 指标 - 在 Azure 门户中显示的指标显示名称。
- REST API 中的名称 - 在 REST API 中引用的指标名称。
- 单位 - 度量单位。
- 聚合 - 默认的聚合类型。 有效值:平均值(平均)、最小值(最小值)、最大值(最大值)、总计(总和)、计数。
- 维度 - 适用于指标的维度。
- 
              时间粒度 - 对指标采样的间隔。 例如,PT1M表示该指标每分钟采样一次,PT30M表示每 30 分钟一次,PT1H表示每小时一次,以此类推。
- DS 导出 - 是否可通过诊断设置将指标导出到 Azure Monitor 日志。 要了解如何导出指标的信息,请参阅在 Azure Monitor 中创建诊断设置。
| 指标 | REST API 中的名称 | 单位 | 聚合 | 维度 | 时间粒度 | DS 导出 | 
|---|---|---|---|---|---|---|
| 应用程序网关总时间 处理请求和发送响应所花费的时间。 这是从应用程序网关接收到 HTTP 请求的第一个字节到响应发送操作完成这两个时间点之间的时间间隔。 必须注意,这通常包括应用程序网关处理时间、请求和响应数据包遍历网络的时间,以及后端服务器做出响应所花费的时间。 | ApplicationGatewayTotalTime | 毫秒 | 平均值、最大值 | Listener | PT1M | 否 | 
| 每个正常主机每分钟的请求数 池中每个正常后端主机每分钟的平均请求计数 | AvgRequestCountPerHealthyHost | 计数 | 平均值 | BackendSettingsPool | PT1M | 否 | 
| WAF 机器人防护匹配数 匹配的机器人规则 | AzwafBotProtection | 计数 | 总计(总和) | Action、Category、Mode、CountryCode、PolicyName、PolicyScope | PT1M | 是 | 
| WAF 自定义规则匹配数 匹配的自定义规则 | AzwafCustomRule | 计数 | 总计(总和) | Action、CustomRuleID、Mode、CountryCode、PolicyName、PolicyScope | PT1M | 是 | 
| WAF JS 质询请求计数 WAF 评估的 JS 质询请求总数 | AzWAFJSChallengeRequestCount | 计数 | 总计(总和) | Action、PolicyName、Rule、PolicyScope | PT1M | 是 | 
| WAF 托管规则匹配数 匹配的托管规则 | AzwafSecRule | 计数 | 总计(总和) | Action、Mode、RuleGroupID、RuleID、CountryCode、PolicyName、PolicyScope、RuleSetName | PT1M | 是 | 
| WAF 总请求数 WAF 评估的请求总数 | AzwafTotalRequests | 计数 | 总计(总和) | Action、CountryCode、Method、Mode、PolicyName、PolicyScope | PT1M | 是 | 
| 后端连接时间 与后端服务器建立连接所花费的时间 | BackendConnectTime | 毫秒 | 平均值、最大值 | Listener、BackendServer、BackendPool、BackendHttpSetting | PT1M | 否 | 
| 后端第一个字节响应时间 从开始与后端服务器建立连接,到收到响应标头的第一个字节的间隔时间,大致相当于后端服务器的处理时间 | BackendFirstByteResponseTime | 毫秒 | 平均值、最大值 | Listener、BackendServer、BackendPool、BackendHttpSetting | PT1M | 否 | 
| 后端最后一个字节响应时间 从开始与后端服务器建立连接,到收到响应正文的最后一个字节的间隔时间 | BackendLastByteResponseTime | 毫秒 | 平均值、最大值 | Listener、BackendServer、BackendPool、BackendHttpSetting | PT1M | 否 | 
| 后端响应状态 后端成员生成的 HTTP 响应代码数。 这不包括应用程序网关生成的任何响应代码。 | BackendResponseStatus | 计数 | 总计(总和) | BackendServer、BackendPool、BackendHttpSetting、HttpStatusGroup | PT1M | 是 | 
| Web 应用程序防火墙阻止的请求规则分发 Web 应用程序防火墙阻止的请求规则分发 | BlockedCount | 计数 | 总计(总和) | %> | PT1M | 是 | 
| 接收的字节数 应用程序网关从客户端收到的字节总数 | BytesReceived | 字节 | 总计(总和) | Listener | PT1M | 是 | 
| 发送的字节数 应用程序网关向客户端发送的字节总数 | BytesSent | 字节 | 总计(总和) | Listener | PT1M | 是 | 
| 当前容量单位数 已消耗的请求单位数 | CapacityUnits | 计数 | 平均值 | <无> | PT1M | 否 | 
| 客户端 RTT 客户端与应用程序网关之间的往返时间。 此指标指示建立连接和返回确认所用的时间 | ClientRtt | 毫秒 | 平均值、最大值 | Listener | PT1M | 否 | 
| 当前计算单位数 消耗的计算单位数 | ComputeUnits | 计数 | 平均值 | <无> | PT1M | 否 | 
| CPU 使用率 应用程序网关的当前 CPU 利用率 | CpuUtilization | 百分比 | 平均值 | <无> | PT1M | 否 | 
| 当前连接数 使用应用程序网关建立的当前连接计数 | CurrentConnections | 计数 | 总计(总和) | <无> | PT1M | 是 | 
| 预估计费容量单位数 预估收费容量单位数 | EstimatedBilledCapacityUnits | 计数 | 平均值 | <无> | PT1M | 否 | 
| 失败的请求数 应用程序网关已提供服务的失败请求计数 | FailedRequests | 计数 | 总计(总和) | BackendSettingsPool | PT1M | 是 | 
| 固定计费容量单位数 最小收费容量单位数 | FixedBillableCapacityUnits | 计数 | 平均值 | <无> | PT1M | 否 | 
| 正常的主机计数 正常的后端主机数 | HealthyHostCount | 计数 | 平均值 | BackendSettingsPool | PT1M | 是 | 
| Web 应用程序防火墙规则分发总数 传入流量的 Web 应用程序防火墙规则分发总数 | MatchedCount | 计数 | 总计(总和) | %> | PT1M | 是 | 
| 每秒新连接数 每秒使用应用程序网关建立的新连接数 | NewConnectionsPerSecond | 每秒计数 | 平均值 | <无> | PT1M | 否 | 
| 响应状态 应用程序网关返回的 Http 响应状态 | ResponseStatus | 计数 | 总计(总和) | HttpStatusGroup | PT1M | 是 | 
| 吞吐量 应用程序网关每秒提供的字节数 | Throughput | 每秒字节数 | 平均值 | <无> | PT1M | 否 | 
| 客户端 TLS 协议 与应用程序网关建立了连接的客户端发起的 TLS 和非 TLS 请求数。 若要查看 TLS 协议分布,请按“TLS 协议”维度进行筛选。 | TlsProtocol | 计数 | 总计(总和) | %> | PT1M | 是 | 
| 请求总数 应用程序网关已提供服务的成功请求计数 | TotalRequests | 计数 | 总计(总和) | BackendSettingsPool | PT1M | 是 | 
| 运行不正常的主机计数 不正常的后端主机数 | UnhealthyHostCount | 计数 | 平均值 | BackendSettingsPool | PT1M | 是 | 
有关可用的 Web 应用程序防火墙 (WAF) 指标,请参阅应用程序网关 WAF v2 指标和应用程序网关 WAF v1 指标。
应用程序网关 v2 SKU 的计时指标
应用程序网关 v2 SKU 提供了许多与请求和响应相关的内置计时指标,这些指标均以毫秒为单位。 下面是前面指标表中已列出的计时指标的详细说明。
- 后端连接时间。 此值包括网络延迟,以及后端服务器 TCP 堆栈建立新连接所用的时间。 对于 TLS,还包括握手所用时间。
- 后端第一个字节响应时间。 此值近似于以下各项的总和:后端连接时间,请求从应用程序网关到达后端所用的时间,后端应用程序响应所用的时间(即服务器生成内容和可能提取数据库查询所用的时间),以及响应的第一个字节从后端到达应用程序网关所用的时间。
- 后端最后一个字节响应时间。 此值近似于后端第一个字节响应时间和数据传输时间的总和。 此数字会因请求的对象大小和服务器网络的延迟而有很大差异。
- 应用程序网关总时间。 此间隔是从应用程序网关接收到 HTTP 请求的第一个字节到最后一个响应字节已发送给客户端之间的时间。
- 客户端 RTT。 客户端与应用程序网关之间的平均往返时间。
应用程序网关 v2 SKU 的指标
对于应用程序网关 v2 SKU,以下指标可用。 下面是前面指标表中已列出的指标的详细说明。
- 接收的字节数。 此指标仅考虑应用程序网关观察到的请求内容大小。 它不包括数据传输,例如 TLS 标头协商、TCP/IP 数据包标头或重新传输。
- 发送的字节数。 此指标仅考虑应用程序网关提供服务的响应内容大小。 这不包括数据传输,例如 TCP/IP 数据包标头或重新传输。
- 客户端 TLS 协议。 TLS 和非 TLS 请求计数。
- 当前容量单位数。 容量单位有三个决定因素:计算单位、持久连接和吞吐量。 每个容量单位最多包括 1 个计算单位、2500 个持久连接,或 2.22-Mbps 吞吐量。
- 当前计算单位数。 影响计算单位的因素包括每秒 TLS 连接数、URL 重写计算和 WAF 规则处理。
- 当前连接数。 从客户端到应用程序网关的并发连接总数,包括应用程序网关实例运行状况的探测。
- 预估计费容量单位数。 使用 v2 SKU 时,消耗会驱动定价模型。 容量单位测量在固定价格的基础上按消耗量计收的费用。 *“估计计费容量单位数”指示用于估计计费的容量单位数。 此数量按当前容量单位数(流量负载均衡所需的容量单位数)和固定计费容量单位数(保持预配的最小容量单位数)之间的较大值来计算。
- 失败的请求数。 此值包括从应用程序网关生成的 5xx 代码,以及从后端生成的 5xx 代码。 可以进一步筛选请求计数,以显示每个/特定后端池 http 设置组合的计数。
- 固定计费容量单位数。 根据应用程序网关配置中的最小缩放单元数设置保持预配的最小容量单元数。 一个实例将转换为 10 个容量单位。
- 每秒新连接数。 每秒从客户端到应用程序网关以及从应用程序网关到后端成员建立的新 TCP 连接的平均数目。
- 响应状态。 可以进一步对响应状态代码分布进行归类来显示 2xx、3xx、4xx 和 5xx 类别的响应。
- 吞吐量。 此指标仅考虑应用程序网关提供服务的内容大小。 它不包括数据传输,例如 TLS 标头协商、TCP/IP 数据包标头或重新传输。
- 请求总数。 应用程序网关提供服务的成功请求数。 可以筛选请求计数,以显示每个/特定后端池 http 设置组合的计数。
应用程序网关 v2 SKU 的后端指标
对于应用程序网关 v2 SKU,以下后端指标可用。 下面是前面指标表中已列出的后端指标的详细说明。
- 后端响应状态。 后端返回的 HTTP 响应状态代码计数,不包括应用程序网关生成的任何响应代码。 可以对响应状态代码分布进行归类来显示 2xx、3xx、4xx 和 5xx 类别的响应。|
- 正常的主机计数。 运行状况探测确定正常的主机数。 可以按每个后端池进行筛选来显示特定后端池中的正常主机数。
- 运行不正常的主机计数。 运行状况探测确定运行不正常的主机数。 可以按每个后端池进行筛选来显示特定后端池中的运行不正常的主机数。
- 每个正常主机每分钟的请求数。 后端池中的每个正常成员在一分钟内收到的平均请求数。 请使用 BackendPool HttpSettings 维度指定后端池。
应用程序网关 v1 SKU 的指标
对于应用程序网关 v1 SKU,以下指标可用。 下面是前面指标表中已列出的指标的详细说明。
- CPU 使用率。 显示分配给应用程序网关的 CPU 的使用率。 在正常情况下,CPU 使用率不应经常超过 90%,因为这种情况可能会导致托管在应用程序网关后面的网站出现延迟,并且可能会中断客户端体验。 可以通过修改应用程序网关的配置(具体方法是:增加实例计数和/或移到更大的 SKU 大小)来间接控制或改进 CPU 使用率。 
- 当前连接数。 使用应用程序网关建立的当前连接计数。 
- 失败的请求数。 因连接问题而失败的请求数。 此计数包括由于超过“请求超时”HTTP 设置而失败的请求,以及由于应用程序网关和后端之间的连接问题而失败的请求。 此计数不包括由于没有可用的正常后端而导致的失败。 来自后端的 4xx 和 5xx 响应也不被视为此指标的一部分。 
- 响应状态。 应用程序网关返回的 HTTP 响应状态。 可以进一步对响应状态代码分布进行归类来显示 2xx、3xx、4xx 和 5xx 类别的响应。 
- 吞吐量。 应用程序网关每秒提供服务的字节数。 
- 请求总数。 应用程序网关已提供服务的成功请求计数。 可以进一步筛选请求计数,以显示每个/特定后端池 http 设置组合的计数。 
应用程序网关 v1 SKU 的后端指标
对于应用程序网关 v1 SKU,以下后端指标可用。 下面是前面指标表中已列出的后端指标的详细说明。
- 正常的主机计数。 由运行状况探测判定为正常的后端数。 可以按每个后端池进行筛选来显示特定后端池中的正常主机数。 
- 运行不正常的主机计数。 由运行状况探测判定为不正常的后端数。 可以按每个后端池进行筛选来显示特定后端池中的运行不正常的主机数。 
后端运行状况 API
请参阅应用程序网关 - 后端运行状况,详细了解用于检索应用程序网关的后端运行状况的 API 调用。
示例请求:
POST
https://management.azure.com/subscriptions/subid/resourceGroups/rg/providers/Microsoft.Network/
applicationGateways/appgw/backendhealth?api-version=2021-08-01
发送此 POST 请求后,应该会看到“HTTP 202 已接受”响应。 在响应头中,找到 Location 标头并使用该 URL 发送新的 GET 请求。
GET
https://management.azure.com/subscriptions/subid/providers/Microsoft.Network/locations/region-name/operationResults/GUID?api-version=2021-08-01
TLS/TCP 代理指标
以下指标可用于监视应用程序网关的 TLS/TCP 代理。 除了第 4 层特定的指标外,第 7 层(HTTP/S)还有几个常见指标。 有关每个指标的详细信息,请访问完整的 指标列表。
同样适用于 L4 代理的指标
- 当前连接数
- 每秒新连接数
- 吞吐量
- 正常的主机计数
- 运行不正常的主机计数
- 客户端 RTT
- 后端连接时间
- 后端第一字节响应时间(BackendHttpSetting维度适用于第 7 层和第 4 层后端设置)。
- 发送的字节数
- 接收的字节数
- 计算单位
- 容量单位
L4 特定于代理的指标
- 后端会话持续时间 - 后端连接的总时间。 从新连接开始到其终止的平均持续时间。 
              BackendHttpSetting维度同时包括第 7 层和第 4 层后端设置。
- 连接生存期 - 与应用程序网关的客户端连接的总时间。 从新连接开始到其终止的平均持续时间(以毫秒为单位)。
TLS/TCP 代理后端运行状况
应用程序网关的第 4 层代理提供通过门户和 REST API 监视后端池各成员的运行状况的功能。
              
               
              
              
            
指标维度
有关指标维度定义的信息,请参阅多维指标。
此服务具有以下与其指标关联的维度。
- 操作
- BackendHttpSetting
- BackendPool 后台泳池
- BackendServer
- BackendSettingsPool
- 类别
- 国家代码
- CustomRuleID
- HttpStatusGroup
- 侦听器
- 方法
- 模式
- 政策名称
- PolicyScope
- 规则组
- RuleGroupID
- 规则编号
- RuleSetName
- TlsProtocol
注意
如果应用程序网关中有多个侦听器,请在比较不同的延迟指标时始终按“侦听器”维度进行筛选,以获取更有意义的推理结果。
资源日志
本部分列出了可为此服务收集的资源日志类型。 本部分拉取自 Azure Monitor 支持的所有资源日志类别类型列表。
Microsoft.Network/applicationGateways 支持的资源日志类别
| 类别 | 类别显示名称 | 日志表 | 支持基本日志计划 | 支持引入时间转换 | 示例查询 | 导出成本 | 
|---|---|---|---|---|---|---|
| ApplicationGatewayAccessLog | 应用程序网关访问日志 | AzureDiagnostics 来自多个 Azure 资源的日志。 | 否 | 否 | 查询 | 否 | 
| ApplicationGatewayFirewallLog | 应用程序网关防火墙日志 | AzureDiagnostics 来自多个 Azure 资源的日志。 | 否 | 否 | 查询 | 否 | 
| ApplicationGatewayPerformanceLog | 应用程序网关性能日志 | AzureDiagnostics 来自多个 Azure 资源的日志。 | 否 | 否 | 查询 | 否 | 
- 访问日志。 可以使用访问日志来查看应用程序网关访问模式和分析重要信息。 此类信息包括调用方的 IP、请求的 URL、响应延迟、返回代码以及输入和输出字节数。系统每 60 秒收集一次访问日志。 此日志包含每个应用程序网关实例的一条记录。 - instanceId属性标识应用程序网关实例。
- 防火墙日志。 可以使用防火墙日志来查看通过配置了 Web 应用程序防火墙的应用程序网关的检测或防护模式记录的请求。 防火墙日志每 60 秒收集一次。 
- 性能日志。 可以使用性能日志来查看应用程序网关实例的性能。 此日志会捕获每个实例的性能信息,包括服务的总请求数、吞吐量(以字节为单位)、失败请求计数、运行正常和运行不正常的后端实例计数。 每隔 60 秒会收集一次性能日志。 - 注意 - 性能日志仅适用于 v1 SKU。 对于 v2 SKU,请对性能数据使用指标。 
访问日志类别
仅当在每个应用程序网关实例上启用访问日志时,才会生成访问日志,如启用日志记录中所述。 数据存储在启用日志记录时指定的存储帐户中。 如下所示,应用程序网关的每次访问都以 JSON 格式记录。
注意
有关 TLS/TCP 代理相关信息,请访问数据参考。
对于应用程序网关和 WAF v2 SKU:
| 值 | 说明 | 
|---|---|
| instanceId | 处理请求的应用程序网关实例。 | 
| 客户端 IP | 应用程序网关的直接客户端的 IP。 如果另一个代理位于应用程序网关的前面,则此值将显示该前置代理的 IP。 | 
| HTTP方法 | 请求所用的 HTTP 方法。 | 
| requestUri | 所收到请求的 URI。 | 
| 用户代理 (UserAgent) | HTTP 请求标头中的用户代理。 | 
| httpStatus | 从应用程序网关返回到客户端的 HTTP 状态代码。 | 
| HTTP版本 | 请求的 HTTP 版本。 | 
| receivedBytes | 接收的数据包的大小(以字节为单位)。 | 
| sentBytes | 发送的数据包的大小(以字节为单位)。 | 
| clientResponseTime | 应用程序网关发送到客户端的第一个字节和最后一个字节之间的时间差(以秒为单位)。 有助于衡量应用程序网关处理响应或慢速客户端的时间。 | 
| 时间 | 处理客户端请求的第一个字节以及将响应中的最后一个字节发送到客户端所需的时长(以秒为单位)。 必须注意,“所用时间”字段通常包括请求和响应数据包在网络上传输的时间。 | 
| WAFEvaluationTime | WAF 处理请求所需的时长(以秒为单位)。 | 
| WAFMode | 值可以是“检测”或“预防”。 | 
| 交易 ID | 唯一标识符,用于关联从客户端收到的请求。 | 
| SSL已启用 | 与后端池的通信是否使用了 TLS。 有效值为 on 和 off。 | 
| sslCipher | 用于 TLS 通信的密码套件(如果已启用 TLS)。 | 
| ssl协议 | 使用的 SSL/TLS 协议(如果已启用 TLS)。 | 
| sslClientVerify | 将客户端证书验证的结果显示为“成功”或“失败”。 “失败”状态将包含错误信息。 | 
| sslClientCertificateFingerprint | 已建立的 TLS 连接的客户端证书的 SHA1 指纹。 | 
| sslClientCertificateIssuerName | 已建立的 TLS 连接的客户端证书的“颁发者 DN”字符串。 | 
| serverRouted | 应用程序网关将请求路由到的后端服务器。 | 
| serverStatus 服务器状态 | 后端服务器的 HTTP 状态代码。 | 
| serverResponseLatency(服务器响应延迟) | 后端服务器的响应延迟(以秒为单位)。 | 
| 主持人 | 请求的主机标头中列出的地址。 如果使用标头重写进行重写,此字段将包含更新的主机名。 | 
| originalRequestUriWithArgs | 此字段包含原始请求 URL。 | 
| requestUri | 在应用程序网关上执行重写操作后,此字段将包含 URL。 | 
| upstreamSourcePort | 应用程序网关在启动与后端目标的连接时使用的源端口。 | 
| originalHost | 此字段包含原始请求主机名。 | 
| error_info | 4xx 和 5xx 错误的原因。 显示失败请求的错误代码。 本文错误代码表中的更多详细信息。 | 
| 内容类型 | 应用程序网关正在处理或传送的内容或数据的类型。 | 
{
    "timeStamp": "2021-10-14T22:17:11+00:00",
    "resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/{resourceGroupName}/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
    "listenerName": "HTTP-Listener",
    "ruleName": "Storage-Static-Rule",
    "backendPoolName": "StaticStorageAccount",
    "backendSettingName": "StorageStatic-HTTPS-Setting",
    "operationName": "ApplicationGatewayAccess",
    "category": "ApplicationGatewayAccessLog",
    "properties": {
        "instanceId": "appgw_2",
        "clientIP": "185.42.129.24",
        "clientPort": 45057,
        "httpMethod": "GET",
        "originalRequestUriWithArgs": "\/",
        "requestUri": "\/",
        "requestQuery": "",
        "userAgent": "Mozilla\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/52.0.2743.116 Safari\/537.36",
        "httpStatus": 200,
        "httpVersion": "HTTP\/1.1",
        "receivedBytes": 184,
        "sentBytes": 466,
        "clientResponseTime": 0,
        "timeTaken": 0.034,
        "WAFEvaluationTime": "0.000",
        "WAFMode": "Detection",
        "transactionId": "592d1649f75a8d480a3c4dc6a975309d",
        "sslEnabled": "on",
        "sslCipher": "ECDHE-RSA-AES256-GCM-SHA384",
        "sslProtocol": "TLSv1.2",
        "sslClientVerify": "NONE",
        "sslClientCertificateFingerprint": "",
        "sslClientCertificateIssuerName": "",
        "serverRouted": "52.239.221.65:443",
        "serverStatus": "200",
        "serverResponseLatency": "0.028",
        "upstreamSourcePort": "21564",
        "originalHost": "20.110.30.194",
        "host": "20.110.30.194",
        "error_info":"ERRORINFO_NO_ERROR",
        "contentType":"application/json"
    }
}
注意
clientIP 值为 127.0.0.1 的访问日志源自在应用程序网关实例上运行的内部安全进程。 可以放心地忽略这些日志条目。
对于应用程序网关 Standard 和 WAF SKU (v1):
| 值 | 说明 | 
|---|---|
| instanceId | 处理请求的应用程序网关实例。 | 
| 客户端 IP | 请求的起始 IP。 | 
| clientPort | 请求的起始端口。 | 
| HTTP方法 | 请求所用的 HTTP 方法。 | 
| requestUri | 所收到请求的 URI。 | 
| RequestQuery | 服务器路由:将请求发送到的后端池实例。 X-AzureApplicationGateway-LOG-ID:用于请求的相关 ID。 它可用于排查后端服务器上的流量问题。 SERVER-STATUS:应用程序网关从后端接收的 HTTP 响应代码。 | 
| 用户代理 (UserAgent) | HTTP 请求标头中的用户代理。 | 
| httpStatus | 从应用程序网关返回到客户端的 HTTP 状态代码。 | 
| HTTP版本 | 请求的 HTTP 版本。 | 
| receivedBytes | 接收的数据包的大小(以字节为单位)。 | 
| sentBytes | 发送的数据包的大小(以字节为单位)。 | 
| 时间 | 处理请求并发送响应所需的时长(以毫秒为单位)。 此值按特定的时间间隔(从应用程序网关接收第一个 HTTP 请求字节到完成响应发送操作所需的时间)来计算。 必须注意,“所用时间”字段通常包括请求和响应数据包在网络上传输的时间。 | 
| SSL已启用 | 与后端池的通信是否使用了 TLS/SSL。 有效值为 on 和 off。 | 
| 主持人 | 向后端服务器发送请求时所针对的主机名。 如果正在重写后端主机名,则此名称将反映该主机名。 | 
| originalHost | 应用程序网关从客户端接收请求时所针对的主机名。 | 
{
    "resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/PEERINGTEST/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
    "operationName": "ApplicationGatewayAccess",
    "time": "2017-04-26T19:27:38Z",
    "category": "ApplicationGatewayAccessLog",
    "properties": {
        "instanceId": "ApplicationGatewayRole_IN_0",
        "clientIP": "203.0.113.97",
        "clientPort": 46886,
        "httpMethod": "GET",
        "requestUri": "/phpmyadmin/scripts/setup.php",
        "requestQuery": "X-AzureApplicationGateway-CACHE-HIT=0&SERVER-ROUTED=10.4.0.4&X-AzureApplicationGateway-LOG-ID=aaaa0000-bb11-2222-33cc-444444dddddd&SERVER-STATUS=404",
        "userAgent": "-",
        "httpStatus": 404,
        "httpVersion": "HTTP/1.0",
        "receivedBytes": 65,
        "sentBytes": 553,
        "timeTaken": 205,
        "sslEnabled": "off",
        "host": "www.contoso.com",
        "originalHost": "www.contoso.com"
    }
}
如果应用程序网关无法完成请求,则其会将以下原因代码之一存储在访问日志的 error_info 字段中。
| 4XX 错误 | 4xx 错误代码指示客户端请求出现问题,应用程序网关无法满足该请求。 | 
|---|---|
| ERRORINFO_INVALID_METHOD | 客户端发送了不符合 RFC 的请求。 可能的原因:客户端使用服务器不支持的 HTTP 方法、拼写错误的方法、不兼容的 HTTP 协议版本等。 | 
| ERRORINFO_INVALID_REQUEST | 由于语法不正确,服务器无法满足请求。 | 
| ERRORINFO_INVALID_VERSION | 应用程序网关收到包含无效或不受支持的 HTTP 版本的请求。 | 
| ERRORINFO_INVALID_09_METHOD | 客户端使用 HTTP 协议版本 0.9 发送请求。 | 
| ERRORINFO_INVALID_HOST | “Host”标头中提供的值缺失、格式不正确或者与预期的 host 值不匹配。 例如,没有基本侦听器,并且多站点侦听器的所有主机名都不与 host 值匹配。 | 
| ERRORINFO_INVALID_CONTENT_LENGTH | content-Length 标头中客户端指定的内容长度与请求中内容的实际长度不匹配。 | 
| ERRORINFO_INVALID_METHOD_TRACE | 客户端发送了应用程序网关不支持的 HTTP TRACE 方法。 | 
| ERRORINFO_CLIENT_CLOSED_REQUEST | 客户端在空闲超时期限过去之前关闭了与应用程序网关的连接。 检查客户端超时期限是否大于应用程序网关的空闲超时期限。 | 
| ERRORINFO_REQUEST_URI_INVALID | 指示客户端请求中提供的统一资源标识符 (URI) 出现问题。 | 
| ERRORINFO_HTTP_NO_HOST_HEADER | 客户端发送的请求没有主机头。 | 
| ERRORINFO_HTTP_TO_HTTPS_PORT | 客户端向 HTTPS 端口发送了纯 HTTP 请求。 | 
| ERRORINFO_HTTPS_NO_CERT | 指示客户端未在相互 TLS 身份验证期间发送正确配置的有效 TLS 证书。 | 
| ERRORINFO_INVALID_HEADER (4xx) | 指示来自客户端的 HTTP 请求包含格式不正确或结构不正确的主机标头,从而阻止应用程序网关正确处理并将请求路由到后端服务器 | 
| ERRORINFO_CLIENT_TIMED_OUT | 此错误表示客户端终止了连接,因为它未在其配置的超时期内收到来自后端服务器的响应。 这通常是由后端服务器导致的,该服务器速度缓慢、过载或遇到作问题。 | 
| ERRORINFO_REQUEST_URI_TOO_LARGE | 此错误指示 HTTP 请求中的 URL 超出了服务器配置为接受的最大长度。 URL 长度(包括查询参数)的默认限制为 8kb | 
| ERRORINFO_REQUEST_HEADER_TOO_LARGE | 此错误表示客户端发送的 HTTP 请求标头的总大小超过了应用程序网关强制实施的 32KB 限制。 请注意,此限制是固定的,无法自定义。 | 
| ERRORINFO_REQUEST_URI_UNSAFE | 此错误显示 WAF 在请求 URI 中找到不安全或格式不正确的内容。 检查 WAF 日志以查看触发了哪个规则,并确定请求是恶意的还是错误标记的,可能需要对 WAF 规则进行调整。 | 
| ERRORINFO_HTTPS_CERT_VERIFY_ERROR | 如果在相互 TLS 握手期间显示的客户端 TLS 证书无效或不受信任,则引发此错误。 | 
| ERRORINFO_HTTP_MISDIRECTED_REQUEST | 如果后端服务器未配置为响应客户端请求中的主机名,尤其是在涉及服务器名称指示(SNI)的 SSL/TLS 方案中,应用程序网关将返回错误定向请求错误 | 
| ERRORINFO_HTTP_NOT_FOUND | 当后端服务器找不到请求的资源时,应用程序网关返回“找不到”错误。 当后端服务器上不存在请求的 URL 路径或应用程序网关中的路由规则中存在错误配置时,通常会发生这种情况,导致请求转发到错误的后端池 | 
| ERRORINFO_CLIENT_SSL_CERT_ERROR | 应用程序网关在 TLS 握手期间遇到客户端 SSL 证书的问题,从而阻止了身份验证成功。 当 AppGW 配置为相互身份验证且未提供客户端证书时,通常会发生这种情况 | 
| 5XX 错误 | 说明 | 
|---|---|
| ERRORINFO_UPSTREAM_NO_LIVE | 应用程序网关找不到任何活动或可访问的后端服务器来处理传入请求。 | 
| ERRORINFO_EMPTY_BACKEND_POOL | 这表示 AppGW 无法满足请求,因为后端池为空。 | 
| ERRORINFO_UPSTREAM_CLOSED_CONNECTION | 后端服务器意外或在请求完全处理完毕之前关闭了连接。 出现这种情况可能是由于后端服务器达到其限制、崩溃等。 | 
| ERRORINFO_UPSTREAM_TIMED_OUT | 与服务器建立的 TCP 连接已关闭,因为连接花费的时间超过了配置的超时值。 | 
| ERRORINFO_INVALID_HEADER | 应用程序网关检测到部分无效标头,并将剩余标头转发到后端,该标头响应为 500。 确保客户端的请求标头不包含 CR、LF、NULL 或类似字符。 将此类字符替换为 SP(空格)。 | 
| ERRORINFO_EMPTY_BACKEND_POOL | 这表示应用程序网关无法满足请求,因为后端池为空。 | 
| ERRORINFO_UPSTREAM_RESPONSE_HEADER_TOO_LARGE | 后端服务器的 HTTP 响应标头超出了 Azure 应用程序网关可以处理的最大大小。 应用程序网关对响应标头强制实施固定限制 32 KB,超过此限制可能会导致 502 错误的网关。 | 
| ERRORINFO_UPSTREAM_NO_RESOLVER | 此错误表示虚拟网络没有配置为将主机名转换为 IP 地址的 DNS 解析程序 | 
| ERRORINFO_UPSTREAM_SSL_CERT_VERIFY_ERROR | 当应用程序网关由于信任失败、过期、链不完整等问题而无法验证后端证书时,会出现此错误。AppGW 将 SSL/TLS 握手失败,并将后端标记为不正常 | 
| ERRORINFO_UPSTREAM_SSL_CERT_MISMATCH | 此错误的原因是后端服务器证书中的公用名/SAN 与后端池中配置的 FQDN 中的预期主机名或 HTTP 设置中指定的主机名不匹配。 | 
防火墙日志类别
仅当为每个应用程序网关启用防火墙日志时,才会生成防火墙日志,如启用日志记录中所述。 此日志还需要在应用程序网关上配置 Web 应用程序防火墙。 数据存储在启用日志记录时指定的存储帐户中。 将记录以下数据:
| 值 | 说明 | 
|---|---|
| instanceId | 为其生成了防火墙数据的应用程序网关实例。 对于多实例应用程序网关,每个实例有一行数据。 | 
| 客户端 IP | 请求的起始 IP。 | 
| clientPort | 请求的起始端口。 | 
| requestUri | 所收到请求的 URI。 | 
| 规则集类型 | 规则集类型。 可用值为 OWASP。 | 
| ruleSetVersion | 所使用的规则集版本。 可用值为 2.2.9 和 3.0。 | 
| 规则 ID | 触发事件的规则 ID。 | 
| 消息 | 触发事件的用户友好消息。 详细信息部分提供了更多详细信息。 | 
| 操作 | 针对请求执行的操作。 可用值包括“阻止”和“允许”(用于自定义规则)、“匹配”(当规则与请求的一部分匹配时),以及“检测到”和“阻止”(这些值都适用于强制规则,具体取决于 WAF 是处于检测模式还是防护模式)。 | 
| 站点 | 为其生成日志的站点。 目前仅列出 Global,因为规则是全局性的。 | 
| 详细信息 | 触发事件的详细信息。 | 
| details.message | 规则的说明。 | 
| details.data | 在请求中找到的与规则匹配的特定数据。 | 
| details.file | 包含规则的配置文件。 | 
| details.line | 配置文件中触发了事件的行号。 | 
| 主机名 | 应用程序网关的主机名或 IP 地址。 | 
| 交易 ID | 给定事务的唯一 ID,它有助于对同一请求中发生的多个违反规则的情况进行分组。 | 
{
    "timeStamp": "2021-10-14T22:17:11+00:00",
    "resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/{resourceGroupName}/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
    "operationName": "ApplicationGatewayFirewall",
    "category": "ApplicationGatewayFirewallLog",
    "properties": {
        "instanceId": "appgw_2",
        "clientIp": "185.42.129.24",
        "clientPort": "",
        "requestUri": "\/",
        "ruleSetType": "OWASP_CRS",
        "ruleSetVersion": "3.0.0",
        "ruleId": "920350",
        "message": "Host header is a numeric IP address",
        "action": "Matched",
        "site": "Global",
        "details": {
            "message": "Warning. Pattern match \\\"^[\\\\d.:]+$\\\" at REQUEST_HEADERS:Host .... ",
            "data": "20.110.30.194:80",
            "file": "rules\/REQUEST-920-PROTOCOL-ENFORCEMENT.conf",
            "line": "791"
        },
        "hostname": "20.110.30.194:80",
        "transactionId": "592d1649f75a8d480a3c4dc6a975309d",
        "policyId": "default",
        "policyScope": "Global",
        "policyScopeName": "Global"
    }
}
性能日志类别
仅当在每个应用程序网关实例上启用性能日志时,才会生成性能日志,如启用日志记录中所述。 数据存储在启用日志记录时指定的存储帐户中。 每隔 1 分钟生成性能日志数据。 这仅适用于 v1 SKU。 对于 v2 SKU,请对性能数据使用指标。 将记录以下数据:
| 值 | 说明 | 
|---|---|
| instanceId | 正在为其生成性能数据的应用程序网关实例。 对于多实例应用程序网关,每个实例有一行数据。 | 
| healthyHostCount | 后端池中运行正常的主机数。 | 
| unHealthyHostCount | 后端池中运行不正常的主机数。 | 
| requestCount | 服务的请求数。 | 
| 延迟 | 从实例到请求服务后端的请求的平均延迟(以毫秒为单位)。 | 
| failedRequestCount | 失败的请求数。 | 
| 吞吐量 | 自最后一个日志后的平均吞吐量,以每秒字节数为单位。 | 
{
    "resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/{resourceGroupName}/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{applicationGatewayName}",
    "operationName": "ApplicationGatewayPerformance",
    "time": "2016-04-09T00:00:00Z",
    "category": "ApplicationGatewayPerformanceLog",
    "properties":
    {
        "instanceId":"ApplicationGatewayRole_IN_1",
        "healthyHostCount":"4",
        "unHealthyHostCount":"0",
        "requestCount":"185",
        "latency":"0",
        "failedRequestCount":"0",
        "throughput":"119427"
    }
}
注意
延迟时间的计算是从接收到 HTTP 请求的第一个字节开始,到发出 HTTP 响应的最后一个字节为止。 它是应用程序网关处理时间加上后端的网络耗时,再加上后端处理请求所花费的时间之和。
Azure Monitor 日志和日志分析表
Azure 应用程序网关使用 Azure 诊断表来存储资源日志信息。 以下列与此相关。
| properties | 说明 | 
|---|---|
| requestUri_s | 客户端请求的 URI。 | 
| 消息 | 参考性消息,例如“SQL 注入攻击” | 
| userAgent_s | 客户端请求的用户代理详细信息 | 
| 规则名称_s | 用来为此请求提供服务的请求传递规则 | 
| httpMethod_s | 客户端请求的 HTTP 方法 | 
| instanceId_s | 要将客户端请求路由到其中以进行评估的 Appgw 实例 | 
| httpVersion_s | 客户端请求的 HTTP 版本 | 
| clientIP_s | 发出请求的 IP | 
| host_s | 客户端请求的主机头 | 
| requestQuery_s | 作为客户端请求的一部分的查询字符串 | 
| sslEnabled_s | 是否为客户端请求启用了 SSL | 
Azure Monitor 日志表
本部分列出了与此服务相关的 Azure Monitor 日志表,日志分析可使用 Kusto 查询来查询这些表。 这些表包含资源日志数据,此外还可能包含其他数据,具体取决于所收集并路由到这些表的内容。
应用程序网关 Microsoft.Network/applicationGateways
- AzureActivity
- AzureMetrics
- AGWAccessLogs
- AGWPerformanceLogs
- AGWFirewallLogs
- AzureDiagnostics
TLS/TCP 代理日志
应用程序网关的第 4 层代理通过访问日志提供日志数据。 仅当在网关的诊断设置中配置了这些日志时,才会生成并发布这些日志。 另请参阅:受支持的 Azure Monitor 资源日志类别。
注意
目前,只能通过 AzureDiagnostics 表获取包含 TLS 侦听器的相互身份验证详细信息的列。
| 类别 | 资源日志类别 | 
|---|---|
| 资源组 | 应用程序网关资源所属的资源组。 | 
| SubscriptionId(订阅ID) | 应用程序网关资源的订阅 ID。 | 
| 资源提供者 | 对于应用程序网关,此值为 MICROSOFT.NETWORK。 | 
| 资源 | 应用程序网关资源的名称。 | 
| 资源类型 | 此值为 APPLICATIONGATEWAYS。 | 
| 规则名称 | 为连接请求提供服务的传递规则的名称。 | 
| instanceId | 处理请求的应用程序网关实例。 | 
| 客户端 IP | 请求的起始 IP。 | 
| receivedBytes | 从客户端接收到网关的数据(以字节为单位)。 | 
| sentBytes | 从网关发送到客户端的数据(以字节为单位)。 | 
| listenerName | 与客户端建立前端连接的侦听器的名称。 | 
| backendSettingName | 用于后端连接的后端设置的名称。 | 
| backendPoolName | 从中选择目标服务器来建立后端连接的后端池的名称。 | 
| 协议 | TCP(无论是 TCP 还是 TLS,协议值始终为 TCP)。 | 
| sessionTime | 会话持续时间(以秒为单位)(此值适用于 client->appgw 会话)。 | 
| upstreamSentBytes | 发送到后端服务器的数据(以字节为单位)。 | 
| upstreamReceivedBytes | 从后端服务器接收的数据(以字节为单位)。 | 
| upstreamSessionTime | 会话持续时间(以秒为单位)(此值适用于 appgw->backend 会话)。 | 
| sslCipher | 用于 TLS 通信的密码套件(针对 TLS 协议侦听器)。 | 
| ssl协议 | 使用的 SSL/TLS 协议(针对 TLS 协议侦听器)。 | 
| serverRouted | 将流量路由到的后端服务器 IP 和端口号。 | 
| serverStatus 服务器状态 | 200 - 会话已成功完成。 400 - 无法分析客户端数据。 500 - 内部服务器错误。 502 - 错误的网关。 例如,当无法访问上游服务器时。 503 - 服务不可用。 例如,如果访问受到连接数量限制。 | 
| error_info | 根据 serverStatus 代码的错误原因。 | 
| 资源 Id | 应用程序网关资源 URI。 | 
活动日志
链接表列出了可在此服务的活动日志中记录的操作。 这些操作是活动日志中所有可能的资源提供程序操作的子集。
有关活动日志条目架构的详细信息,请参阅活动日志架构。
可以使用 Azure 活动日志来查看提交到 Azure 订阅的所有操作及其状态。 默认会收集活动日志条目。 可以在 Azure 门户中查看它们。 Azure 活动日志以前称为操作日志和审核日志。
默认情况下,Azure 会生成活动日志。 日志可在 Azure 事件日志存储中保留 90 天。 了解有关这些日志的详细信息,请参阅查看事件和活动日志一文。
相关内容
- 有关监视应用程序网关的说明,请参阅监视 Azure 应用程序网关。
- 请参阅使用 Azure Monitor 监视 Azure 资源,详细了解如何监视 Azure 资源。