教程:使用请求跟踪调试 API
适用于:所有 API 管理层级
本教程介绍如何在 Azure API 管理中检查(跟踪)请求处理。 跟踪有助于调试 API 并排查 API 问题。
本教程介绍如何执行下列操作:
- 在测试控制台中跟踪示例调用
- 查看请求处理步骤
- 为 API 启用跟踪
先决条件
- 了解 Azure API 管理术语。
- 请完成以下快速入门:创建一个 Azure API 管理实例。
- 完成以下教程:导入和发布第一个 API。
警告
- 仅允许跟踪用于调试目的的订阅。 与未经授权的用户共享允许跟踪的订阅密钥,可能会导致跟踪日志中包含的敏感信息泄露,例如密钥、访问令牌、密码、内部主机名和 IP 地址。
- 在订阅上启用跟踪 1 小时后,API 管理会自动禁用跟踪。
在门户中跟踪调用
按照以下步骤在门户的测试控制台中跟踪 API 请求。 此示例假定你在上一个教程中导入了示例 API。 可以使用导入的其他 API 执行类似的步骤。
登录到 Azure 门户,并导航到 API Management 实例。
选择“API”>“API”。
从 API 列表中选择“Petstore API”。
选择“测试”选项卡。
选择“按 ID 查找宠物”操作。
在 petId 查询参数中,输入“1”。
(可选)通过选择“眼睛”图标,检查请求中使用的 Ocp-Apim-Subscrition-Key 标头的值。
提示
可通过在门户中检索另一个订阅的密钥来替代 Ocp-Apim-Subscription-Key 的值。 选择“订阅”,然后打开另一个订阅的上下文菜单 (…)。 选择“显示/隐藏密钥”并复制其中一个密钥。 也可以按需再生成密钥。 然后,在测试控制台中,选择“+ 添加标头”以使用新密钥值添加 Ocp-Apim-Subscrition-Key 标头。
选择“跟踪”。
查看跟踪信息
调用结束后,转到“HTTP 响应”中的“跟踪”选项卡。
选择以下任何链接跳转到详细跟踪信息:入站、后端、出站、出错时。
入站 - 显示从调用方收到的原始请求 API 管理和应用于该请求的策略。 例如,如果你在教程:转换和保护 API 中添加了策略,它们就会出现在此处。
后端 - 显示 API 管理发送到 API 后端的请求以及收到的响应。
出站 - 显示在将响应发送给调用方之前应用于该响应的策略。
出错时 - 显示在处理请求期间发生的错误以及应用于错误的策略。
提示
每个步骤还显示了自 API 管理收到请求以来消逝的时间。
为 API 启用跟踪
使用 curl
、REST 客户端(如带 REST 客户端扩展的 Visual Studio Code)或客户端应用时,为了能够跟踪对 API 管理的请求,需要执行以下简要步骤。 目前必须使用 API 管理 REST API 执行以下步骤:
- 获取用于跟踪的令牌凭据。
- 将
Apim-Debug-Authorization
请求标头中的令牌值添加到 API 管理网关。 - 获取
Apim-Trace-Id
响应标头中的跟踪 ID。 - 检索与跟踪 ID 对应的跟踪。
详细步骤如下。
注意
- 这些步骤需要 API 管理 REST API 版本 2023-05-01-preview 或更高版本。 你必须在 API 管理实例上获得“参与者”或更高角色才能调用 REST API。
- 有关向 REST API 进行身份验证的信息,请参阅 Azure REST API 参考。
获取令牌凭据 - 调用 API 管理网关的列出调试凭据 API。 在 URI 中,针对云中实例的托管网关输入“managed”,或者针对自承载网关输入网关 ID。 例如,若要获取用于实例托管网关的跟踪凭据,请使用类似于下面的请求:
POST https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/gateways/managed/listDebugCredentials?api-version=2023-05-01-preview
在请求正文中,传递要跟踪的 API 的完整资源 ID,并将
purposes
指定为tracing
。 默认情况下,响应中返回的令牌凭据将在 1 小时后过期,但你可以在有效负载中指定其他值。 例如:{ "credentialsExpireAfter": PT1H, "apiId": ""/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/apis/{apiName}", "purposes": ["tracing"] }
令牌凭据在响应中返回,如下所示:
{ "token": "aid=api-name&......." }
在请求标头中添加令牌值 - 若要为针对 API 管理网关的请求启用跟踪,请在
Apim-Debug-Authorization
标头中发送令牌值。 例如,若要跟踪对上一教程中导入的 Petstore API 的调用,可以使用如下所示的请求:curl -v https://apim-hello-world.azure-api.cn/pet/1 HTTP/1.1 -H "Ocp-Apim-Subscription-Key: <subscription-key>" -H "Apim-Debug-Authorization: aid=api-name&......."
根据令牌,响应包含以下标头之一:
如果令牌有效,响应将包含一个
Apim-Trace-Id
标头,其值为跟踪 ID,如下所示:Apim-Trace-Id: 0123456789abcdef....
如果令牌已过期,响应将包含一个
Apim-Debug-Authorization-Expired
标头,其中包含有关到期日期的信息。如果获取了其他 API 的令牌,响应将包含一个带有错误消息的
Apim-Debug-Authorization-WrongAPI
标头。
检索跟踪 - 将上一步获取的跟踪 ID 传递给网关的列出跟踪 API。 例如,若要检索托管网关的跟踪,请使用类似于下面的请求:
POST https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/gateways/managed/listTrace?api-version=2023-05-01-preview
在请求正文中,传递在上一步中获取的跟踪 ID。
{ "traceId": "0123456789abcdef...." }
响应正文中将包含对网关的上一个 API 请求的跟踪数据。 该跟踪类似于通过在门户测试控制台中跟踪调用可以看到的跟踪。
有关自定义跟踪信息的详细信息,请参阅跟踪策略。
后续步骤
在本教程中,你了解了如何执行以下操作:
- 在测试控制台中跟踪示例调用
- 查看请求处理步骤
- 为 API 启用跟踪
转到下一教程: