你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用于容器的应用程序网关的诊断日志
了解如何排查适用于容器的应用程序网关中的常见问题。
可以通过以下方式监视适用于容器的 Azure 应用程序网关资源:
日志:通过日志记录,可出于监视目的从资源保存或使用性能、访问及其他数据。
指标:适用于容器的应用程序网关有几个指标可以帮助你验证系统是否按预期运行。
诊断日志
可以在 Azure 中使用不同类型的日志对适用于容器的应用程序网关进行管理和故障排除。 可通过门户访问其中部分日志。 可从 Azure Blob 存储提取所有日志并在 Azure Monitor 日志、Excel 和 Power BI 等各种工具中查看。 可从以下列表了解有关不同类型日志的详细信息:
- 活动日志:可使用 Azure 活动日志(以前称为操作日志和审核日志)查看提交到 Azure 订阅的所有操作及其状态。 默认情况下会收集活动日志条目,可在 Azure 门户中查看这些条目。
- 访问日志:可以使用此日志查看适用于容器的应用程序网关访问模式并分析重要信息。 此日志包括调用方的 IP、请求的 URL、响应延迟、返回代码,以及传入和传出的字节数。访问日志每 60 秒收集一次。 数据可能存储在启用日志记录时指定的存储帐户中。
配置访问日志
每个 Resource Manager 资源都会自动启用活动日志记录。 必须启用访问日志记录才能开始收集通过这些日志提供的数据。 若要启用日志记录,需要在 Azure Monitor 中配置诊断设置。
使用以下步骤,通过 Azure 门户为适用于容器的应用程序网关启用对存储帐户的所有日志记录。 可用的存储帐户必须与适用于容器的应用程序网关位于同一区域中。
使用 Azure 帐户登录到 Azure 门户。
在“搜索资源、服务和文档”中,键入“适用于容器的应用程序网关”,然后选择适用于容器的应用程序网关名称。
在“监视”下,选择“诊断设置” 。
选择“添加诊断设置”。
输入“诊断设置名称”(例如:agfc-logs),选择要保存的日志和指标并选择目标,例如“存档到存储帐户”。 若要保存所有日志,请选择“allLogs”和“AllMetrics”。
选择“保存”以保存设置。 请参阅以下示例:
注意
最初启用诊断日志后,可能需要长达一小时才能在所选目标处获取日志。
有关详细信息和 Azure Monitor 部署教程,请参阅 Azure Monitor 中的诊断设置。
访问日志格式
适用于容器的应用程序网关中的每个访问日志条目都包含以下信息。
值 | 说明 |
---|---|
backendHost | 附加了端口的后端目标地址。 例如 <ip>:<port> |
backendIp | 适用于容器的应用程序网关将请求代理到的后端目标的 IP 地址。 |
backendPort | 后端目标的端口号。 |
backendResponseLatency | 第一个字节从适用于容器的应用程序网关接收到后端目标所花费的时间(以毫秒为单位)。 |
backendTimeTaken | 响应从后端目标传输到适用于容器的应用程序网关所花费的时间(以毫秒为单位)。 |
clientIp | 向适用于容器的应用程序网关前端发起请求的客户端的 IP 地址 |
frontendName | 从客户端接收请求的适用于容器的应用程序网关前端的名称 |
frontendPort | 适用于容器的应用程序网关用于侦听请求的端口号 |
frontendTLSFailureReason | 包含有关 TLS 协商失败的原因的信息。 通常用于了解客户端相互身份验证失败的身份验证请求 |
frontendTLSPeerFingerprint | 客户端提供给用于容器的应用程序网关前端的证书的指纹 |
hostName | 适用于容器的应用程序网关从客户端收到的主机头值 |
httpMethod | 适用于容器的应用程序网关根据 RFC 7231 从客户端收到的请求的 HTTP 方法。 |
httpStatusCode | 从适用于容器的应用程序网关返回到客户端的 HTTP 状态代码 |
httpVersion | 适用于容器的应用程序网关从客户端收到的请求的 HTTP 版本 |
referrer | 适用于容器的应用程序网关从客户端收到的请求的引荐者标头 |
requestBodyBytes | 适用于容器的应用程序网关从客户端收到的请求的正文有效负载大小(以字节为单位) |
requestHeaderBytes | 适用于容器的应用程序网关从客户端收到的请求的标头大小(以字节为单位) |
requestUri | 适用于容器的应用程序网关从客户端收到的请求的 URI(URL 的 <protocol>://<host> 后面的所有内容) |
responseBodyBytes | 适用于容器的应用程序网关返回到客户端的响应的正文有效负载大小(以字节为单位) |
responseHeaderBytes | 适用于容器的应用程序网关返回到客户端的响应的标头大小(以字节为单位) |
timeTaken | 适用于容器的应用程序网关收到客户端请求到适用于容器的应用程序网关将最后一个字节返回到客户端所花费的时间(以毫秒为单位) |
tlsCipher | 客户端和适用于容器的应用程序网关前端之间协商的 TLS 密码套件 |
tlsProtocol | 客户端和适用于容器的应用程序网关前端之间协商的 TLS 版本 |
trackingId | 适用于容器的应用程序网关生成的 guid,可帮助跟踪和调试。 此值与从适用于容器的应用程序网关返回到客户端的 x-request-id 标头相关联。 |
userAgent | 适用于容器的应用程序网关从客户端收到的请求的用户代理标头 |
注意
在 requestUri 字段中记录的“secret”,“password”、“pwd”、“passwd”、“key”、“token”、“pat”、“accesskey”、“accesstoken”、“credential”、“sas”、“personalAccessToken”和“personal.access.token”等查询字符串参数值将替换为“修订”<>的值,以防止记录敏感信息。 这是不可配置的。
下面是以 JSON 格式向存储帐户发出的访问日志的示例。
{
"category": "TrafficControllerAccessLog",
"operationName": "ReqRespLogs",
"properties": {
"backendHost": "10.1.0.15:80",
"backendIp": "10.1.0.15",
"backendPort": "80",
"backendResponseLatency": "2",
"backendTimeTaken": "-",
"clientIp": "xxx.xxx.xxx.xxx:52526",
"frontendName": "frontend-primary",
"frontendPort": "443",
"frontendTLSFailureReason": "-",
"frontendTLSPeerFingerprint": "2c01bbc93009ad1fc977fe9115fae7ad298b665f",
"hostName": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.fzXX.alb.azure.com",
"httpMethod": "GET",
"httpStatusCode": "200",
"httpVersion": "HTTP\/1.1",
"referer": "-",
"requestBodyBytes": "0",
"requestHeaderBytes": "223",
"requestUri": "\/index.php",
"responseBodyBytes": "91",
"responseHeaderBytes": "190",
"timeTaken": "2",
"tlsCipher": "TLS_AES_256_GCM_SHA384",
"tlsProtocol": "-",
"trackingId": "0ef125db-7fb7-48a0-b3fe-03fe0ffed873",
"userAgent": "curl\/7.81.0"
},
"resourceId": "/SUBSCRIPTIONS/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/RESOURCEGROUPS/YYYYYY/PROVIDERS/MICROSOFT.SERVICENETWORKING/TRAFFICCONTROLLERS/ZZZZZZZ",
"time": "2023-07-22T06:26:58.895Z",
"location": "northcentralus"
}