使用调试

本页面适用于 ApigeeApigee Hybrid

查看 Apigee Edge 文档。

本部分介绍如何创建和管理调试会话,以及如何使用 Apigee 界面和 API 查看请求以及响应数据。

使用离线调试查看和分析之前下载的调试会话。

创建调试会话

创建调试会话时,您可以在界面中查看请求和响应数据(仅针对在 API 或其他外部来源中创建的请求)。

使用 Apigee 界面或 API 创建调试会话,如以下部分所述。

新版代理编辑器

如需在新版代理编辑器中创建调试会话,请执行以下操作:

  1. 如果您使用的是 Cloud 控制台中的 Apigee 界面:选择代理开发 > API 代理

    如果您使用的是经典版 Apigee 界面:请选择开发 > API 代理,然后在代理窗格中,选择要调试的代理的环境。

  2. 选择您要调试的 API 代理。此时将显示代理编辑器概览视图。

  3. 点击窗口左上角的调试标签页。
  4. 点击调试窗格右上角的启动调试会话。这将显示启动调试会话对话框。

    “启动调试会话”对话框。

    在该对话框中:

    1. 选择要运行调试会话的环境
    2. (可选)从过滤条件下拉列表中,选择一个过滤条件以应用于您要创建的调试会话中的所有事务。默认值为 None (All transactions),其中包含调试数据中的所有事务。

      如需了解如何使用过滤条件,请参阅在调试会话中使用过滤条件。如需了解内置过滤条件,请参阅使用预定义的过滤条件

    3. 点击开始

Apigee 界面现在显示调试会话正在进行视图。

调试会话正在进行

创建会话后,调试会话将记录 10 分钟的请求。结束时间字段显示会话中的剩余时间。

在向您在所选环境中调试的代理发送请求之前,您不会在“调试”窗格中看到任何信息。调试会话的环境

发送请求后,它会显示在左侧窗格的底部。

“启动调试会话”对话框。

注意:在主动调试会话期间,您可以在 Apigee 界面中启动另一个会话。为此,只需再次点击启动调试会话即可。

查看事务的甘特图

如需在“调试”视图中查看事务的详细信息(请求和响应),请点击上图中显示的事务所在的行。

这将在右侧窗格中显示甘特图,其中显示请求和响应中的步骤。

右侧窗格中事务步骤的甘特图。

图的水平轴表示每个步骤发生的时间(以毫秒为单位)。每个步骤用一个矩形表示,从步骤开始时间延伸到结束时间。

您可以使用调试窗格右下角的返回下一步按钮逐步调试调试会话。点击:

  • 返回,将选定的行移动到图表中的上一步。
  • 下一步,将选定的行移动到图表中的下一步。

在上面显示的示例中,图表显示了在响应中执行的两个政策:

  • ResponsePayload
  • 添加 CORS

您可以点击任一步骤来查看其详细信息。例如,如果您点击添加 CORS 政策,则会看到如下所示的甘特图详细信息。

添加 CORS 政策详细信息。

然后,如果您决定更改政策配置中的某项内容,则可以点击开发以切换到开发视图,您将在其中看到相同的内容响应 PostFlow 中的两个政策。

查看与调试会话相关的“开发”标签页。

共享调试会话

您可以与有权访问您的组织和必要权限的其他用户共享调试会话。为此,只需在查看调试会话时向其发送浏览器中显示的网址即可。链接仅在调试会话创建后 24 小时内有效。

下载调试会话

调试会话完成后,您可以下载它,以便稍后在离线调试工具中进行分析。为此,请点击左侧窗格中的下载会话

下载调试会话。

请注意,调试会话在完成后的 24 小时内删除,因此,如果您希望在该时间之后查看调试会话,则应在此之前下载调试会话。

当您下载调试会话时,下载文件的名称采用“debug-{session ID}.json”的格式,其中 {session id} 是调试会话的 ID。不过,您可以根据需要重命名该文件。

经典版代理编辑器

如需在经典版代理编辑器中创建调试会话,请执行以下操作:

  1. 登录 Apigee 界面
  2. 从主视图中选择 API 代理
  3. 选择您要调试的 API 代理。

    此时将显示概览标签页。

  4. 点击页面右上角的调试标签页:

    标签页

    调试视图会显示以下内容:

    包含“启动调试会话”“近期调试会话”和“发送请求”窗格的调试视图

  5. 启动调试会话面板中:
    1. 环境变量下拉列表中,选择要调试的 API 代理的环境和修订版本号。
    2. 以下示例展示了启动调试会话面板:

      “启动调试会话”窗格

    3. (可选)从过滤条件下拉列表中,选择一个过滤条件以应用于您要创建的调试会话中的所有事务。默认值为 None,其中包含调试数据中的所有事务。

      如需了解如何使用过滤条件,请参阅在调试会话中使用过滤条件。如需了解内置过滤条件,请参阅使用预定义的过滤条件

    4. 点击启动调试会话

      Apigee 界面现在会在调试详情面板中显示有关当前调试会话的详细信息,包括其 ID。

      虽然界面创建了调试会话,但您仍需要发送请求才能收集数据。

      调试详情面板中,您可以执行以下操作:

      图标 函数 说明
      “下载”图标 下载 下载活跃会话的调试数据,然后您就可以离线观看
      “返回”图标 返回 返回上一个面板,您可以在其中启动另一个调试会话。当前调试会话会一直持续到达到其超时或事务计数。
      “删除”图标 删除 删除当前选定的调试会话的数据。这将删除会话的数据,但不会停止会话。

      您在界面中启动的调试会话的默认超时上限为 10 分钟(通过 API 启动的会话不同)。

      点击开始调试会话后时钟立即开始运行,因此您可以选择等到下一步之后再点击开始调试会话,以最大化收集的数据量。

  6. 发送请求面板中:
    1. 网址字段中,输入要向其发送请求的端点。(可选)将查询字符串参数附加到网址。您不能提交 GET 以外的请求。
      如何查找端点网址
      1. 转到管理 > 环境 > 群组
      2. 网址是您希望用于运行调试会话的相应环境的主机名
    2. 发送请求面板仅显示基于界面的请求数据。 但请注意,该调试还会记录并非由界面启动的请求的数据。

    3. 点击发送

      Apigee 向指定网址发送请求。每次点击发送时,Apigee 界面都会将请求记录在调试详情面板中。

      以下示例展示了几个成功的请求(导致 HTTP 状态代码为 200):

      捕获的调试请求

      点击复制以复制调试 ID 供日后参考或查询。

      此外,界面在发送请求面板的“事务映射和阶段详情”部分中显示调试数据,并填充“代理端点”“请求标头”“请求内容”和“属性”部分,如以下示例所示:

      捕获的调试请求

      如需详细了解发送请求视图的阶段、事务映射和其他部分,请参阅如何阅读调试信息

    调试会话现已处于活跃状态,并记录所有请求的相关数据(除非它们被过滤掉)。会话会一直保持活动状态,直到达到超时或超过会话所记录的请求数量。

  7. 您可以在界面中创建任意数量的调试会话。如需了解详情,请参阅启动另一个调试会话

在界面中启动另一个调试会话

在主动调试会话期间,您可以在 Apigee 界面中启动另一个会话。为此,请点击调试详情面板中的返回箭头图标 ():

返回箭头返回“启动调试会话”面板

界面将返回到启动调试会话面板,您可以在其中启动新的调试会话。

调试会话何时结束?

您无法轻易地停止有效的调试会话。但是,您可以按照删除调试会话数据中所述,删除活跃会话的数据。

创建调试会话时,由两个属性决定何时结束:

  • 超时:您在会话期间收集数据的时长。默认长度取决于您启动会话的方式(通过界面或 API)。最大值为 600 秒(或 10 分钟)。
  • 计数每个消息处理器在单个会话中记录的请求数量上限。由于大多数集群中的消息处理器数量是可变的,因此计数的影响可能是不可预测的。Apigee 不建议自定义此设置。

达到超时或计数时,相应消息处理器的调试会话将结束。

以下术语用于描述调试会话的状态:

  • 活跃会话是尚未达到超时限制或超出其计数的调试会话。活跃会话仍在记录未经过滤的请求的请求数据。
  • 已完成的会话是指已经超时或超过其计数的调试会话;完成的会话不会再记录有关新请求的数据,系统会在该会话结束后的 24 小时内删除其数据。

如何阅读调试信息

调试工具包含两个主要部分,即事务映射和阶段详情:

  • 事务映射使用图标来标记 API 代理事务期间发生的每个重要步骤,包括政策执行、条件步骤和转换。将鼠标悬停在任何图标上可查看摘要信息。请求流程步骤位于事务映射的顶部,底部是响应流程步骤。
  • 该工具的阶段详情部分列出了代理内部处理的相关信息,包括设置或读取的变量、请求和响应标头等。点击任何图标可查看该步骤的阶段详情

下面是一个已标记主代理处理细分的调试工具映射示例:

调试工具的事务映射

显示“开始代理”请求以开始目标响应以开始启动代理响应的调试图表

事务示意图图例

下表介绍了您将在事务示意图中看到的图标的意图。这些图标标记整个代理流程中每个重要的处理步骤。

事务示意图图标

客户端应用图标 向 API 代理的 ProxyEndpoint 发送请求的客户端应用。
转换端点图标 圆圈在代理流程中标记过渡端点。当请求从客户端传入时、当请求到达目标时、当响应来自目标时以及当响应返回客户端时,都会有圆圈标记。
流程细分图标

高竖条表示 API 代理流程中流程细分的开始。流程细分包括:ProxyEndpoint 请求、TargetEndpoint 请求、TargetEndpoint 响应和 ProxyEndpoint 响应。一个细分包括 PreFlow、条件流程和 PostFlow。

如需了解详情,请参阅配置流程

分析图标

指示已在后台进行 Analytics 操作。

true 条件图标

一个评估为 true 的条件流程。如需了解条件流程的简介,请参阅配置流程

请注意,某些条件是由 Apigee 生成的。例如,以下表达式用于让 Apigee 检查 ProxyEndpoint 是否出现错误:

((error.state equals PROXY_REQ_FLOW) or (error.state equals PROXY_RESP_FLOW))
false 条件图标

计算结果为 false 的条件流程。如需了解条件流程,请参阅配置流程

请注意,某些条件是由 Apigee 生成的。例如,以下表达式是 Apigee 用来检查 TargetEndpoint 中是否出现错误的表达式:

(((error.state equals TARGET_REQ_FLOW) or (error.state equals TARGET_RESP_FLOW)) or ((error.state equals REQ_SENT) or (error.state equals RESP_START)))

从 xml 到 JSON 图标

配额图标

政策 每种类型的政策都有一个唯一的图标。此政策适用于 AssignMessage 政策。通过这些图标,您可以了解政策执行顺序是否正确,以及政策是否成功。您可以点击政策图标以查看其执行结果,以及预期的执行结果。例如,您可以查看消息是否已正确转换或是否正在缓存。

正确执行的政策由对勾标记明确指明。如果发生错误,图标上会显示一个红色感叹号。

服务器图标 API 代理调用的后端目标。
毫秒图标 时间线表示处理完成所需的时间(以毫秒为单位)。比较运行时间细分有助于隔离耗时最长的政策,进而减慢 API 调用速度。
Epsilon 图标 Epsilon 表示时间范围小于 1 毫秒。
“已停用”图标

已停用。当政策处于停用状态时,该政策会显示在政策图标上。可以使用公共 API 停用政策。请参阅 API 代理配置参考

“错误”图标 错误。在“政策步骤”条件评估结果为 false 时,出现在政策图标上(参阅流变量和条件),或在执行 RaiseFault 政策时,出现在 RaiseFault 政策图标上。
“已跳过”图标 已跳过。在政策步骤未执行时,在政策图标上显示为 false。如需了解详情,请参阅流变量和条件

了解阶段详情

该工具的阶段详情部分向您详细介绍了代理在每个处理步骤的状态。以下是“阶段详情”中提供的一些详细信息。点击调试工具中的任意图标可查看所选步骤的详细信息,也可以使用下一步/返回按钮从一个步骤移动到另一个步骤。

阶段详情 说明
代理端点 指明要执行哪个 ProxyEndpoint。一个 API 代理可以有多个已命名的代理端点。
变量

列出根据政策读取并分配值的流变量,另请参阅使用流变量

注意

  • 等号 (=) 表示分配给变量的值。
  • 不等号 (≠) 表示无法为变量分配值,因为它是在只读或执行政策时出错。
  • 空字段表示已读取变量值。
请求标头 列出 HTTP 请求标头。
请求内容 显示 HTTP 请求正文。
属性 属性表示 API 代理的内部状态。默认情况下,这些列不会显示。
目标端点 指明要执行哪个 TargetEndpoint。
响应标头 列出 HTTP 响应标头。
响应内容 显示 HTTP 响应正文。
PostClientFlow 显示有关 PostClientFlow 的信息,在请求返回到发出请求的客户端应用后执行。只有 MessageLogging 政策可以附加到 PostClientFlow。PostClientFlow 目前主要用于测量响应消息的开始时间戳和结束时间戳之间的时间间隔。

Apigee API

要使用 API 创建调试会话,请向以下资源发出 POST 请求:

https://apigee.googleapis.com/v1/organizations/$ORG/environments/$ENV/apis/$API/revisions/$REV/debugsessions

您也可以:

以下示例演示了如何使用 API 创建调试会话。

curl "https://apigee.googleapis.com/v1/organizations/ORG/environments/ENV/apis/PROXY/revisions/REV/debugsessions" \
  -X POST \
  -H "Authorization: Bearer $TOKEN"

按照获取 OAuth 2.0 访问令牌中的说明,将 $TOKEN 设置为您的 OAuth 2.0 访问令牌。如需了解此示例中使用的 curl 选项,请参阅使用 curl。如需了解所使用的环境变量,请参阅为 Apigee API 请求设置环境变量

以下提供了一个响应示例:

{
  "name":"56382416-c4ed-4242-6381-591bbf2788cf",
  "validity":300,
  "count":10,
  "tracesize":5120,
  "timeout":"600"
}

系统会评估对 API 代理的后续请求(直到达到会话时长或最大请求数),并可能存储在调试会话数据中。

如需了解详情,请参阅创建调试会话 API

使用 API 设置调试会话的长度

要使用 API 设置调试会话的长度,请在调试会话创建请求中添加以下载荷:

{
  "timeout":"debug_session_length_in_seconds"
}

以下示例创建了一个仅 42 秒的调试会话:

curl https://apigee.googleapis.com/v1/organizations/ORG/environments/ENV/apis/PROXY/revisions/REV/debugsessions"
  -X "POST" \
  -H "Authorization: Bearer $TOKEN" \
  -d ' {
    "timeout":"42"
  } '

您只能在调试会话创建请求中设置会话的 timeout;创建会话后,您无法更改会话的持续时间。

timeout 的默认值为 300 秒(5 分钟)。最大值为 600 秒(10 分钟)。

使用调试工具进行调试

通过调试,您可以查看有关 API 代理的许多内部详细信息。例如:

  • 您可以一目了然地看到哪些政策执行正确或失败。
  • 假设您通过其中一个 Analytics 信息中心注意到您的某个 API 导致性能下降。现在,您可以使用调试来帮助确定瓶颈发生的位置。调试提供了完成每个处理步骤所需的时间(以毫秒为单位)。如果您发现一个步骤用时太长,您可以采取纠正措施。
  • 您可以检查发送到后端的标头、查看由政策设置的变量等。
  • 通过验证基本路径,您可以确保政策将消息路由到正确的服务器。

在调试会话中过滤数据

创建调试会话时,您可以向该会话添加过滤条件,以便 Apigee 仅返回您需要的数据。过滤条件是 Apigee 根据请求和响应消息评估的条件语句,以确定其调试数据是否应包含在调试会话中。例如,您可以过滤掉 HTTP 响应代码小于 599 的所有请求,或者将请求中的值与自定义变量进行比较。

请注意以下事项:

  • 未包含在调试会话中的请求,不会计入调试会话中的事务数上限,因为这些请求被过滤掉。
  • Apigee 不支持在查询字符串中添加过滤条件。
  • 会话开始后,您无法向调试会话添加过滤条件。如需添加过滤条件,您必须创建一个调试会话。

使用过滤器

使用 Apigee 界面或 API 创建调试会话时,请使用过滤条件,如以下部分所述。

经典版 Apigee 界面

在界面中创建调试会话时,可以在过滤条件下拉列表中选择要在启动调试会话面板中应用的预定义过滤条件,或者选择自定义过滤条件并使用过滤条件语法构建自己的过滤条件。

Apigee API

如需使用 API 创建具有过滤条件的调试会话,请在调试会话创建请求中将以下内容作为载荷添加:

{
  "filter":"filter_body"
}

如需了解如何构建过滤条件,请参阅过滤条件语法

以下示例创建了一个调试会话,该会话仅包含事务,其中标头 A 等于 42 且标头 B 等于 43,或者故障代码为 ExpectedEOF

curl -H "Authorization: Bearer $TOKEN" -X "POST"
  https://apigee.googleapis.com/v1/organizations/ORG/environments/ENV/apis/PROXY/revisions/REV/debugsessions
  -d ' {
    "filter":"(request.header.A == '42' && request.header.B == '43') || fault.code == 'jsonparser.ExpectedEOF'"
  } '

您只能在调试会话创建请求中定义过滤条件;不能向现有调试会话添加过滤条件,也不能从活跃的调试会话中删除过滤条件。

过滤器语法

过滤条件支持 Apigee 条件使用的语法,如条件参考中所述。其中包括:

此外,过滤条件可以访问流变量参考中描述的所有流变量以及自定义变量。以下示例展示了可在过滤条件中使用的部分可能流变量:

# Response codes:
  response.status.code <= 599
  response.status.code >=301 && response.status.code <=420

# Requests/responses:
  request.verb == "GET"
  request.header.A == 'B' || request.queryparam.X == 'Y'

# Query parameters:
  request.queryparam.myparam == 'fish'
  (request.queryparam.param1 == 'X' || request.queryparam.param2 == 'Y') && request.queryparam.param3 == 'Z'

# Faults:
  fault.code != 'messaging.runtime.RouteFailed'
  fault.name == 'IPDeniedAccess'

如需了解如何使用自定义变量,请参阅 Apigee 社区中的如何在 Apigee 中使用自定义特性

预定义的界面过滤条件

Apigee 界面提供了一组常用的过滤条件,因此您不必编写自己的自定义过滤条件。下表汇总了预定义的过滤条件。

过滤条件名称 说明
Response Time Greater Than

检查下列情况下的延迟时间问题:

  • target.duration目标延迟时间,或请求发送到目标和从目标接收请求所需的时间量(计算为 target.received.end.timestamptarget.sent.start.timestamp 之间的差值)(以毫秒为单位)。
  • client.duration客户端延迟时间,也就是请求发送到客户端和从客户端接收请求所需的时间量(计算为 client.received.end.timestampclient.sent.start.timestamp 之间的差值)(以毫秒为单位)。

例如:

target.duration > 420 && client.duration > 1000

如需了解详情,请参阅流变量参考中的 clienttarget

Response Code

检查 HTTP 响应代码是否与指定值相符;例如:

response.status.code <= 599
Header

检查指定的请求标头是否等于指定值;例如:

request.header.cache-control.1 == "16544"
Path

检查请求是否与指定路径匹配。您可以在值中使用通配符匹配;例如:

request.path == /myproxy/customer/4*
Query Param

检查指定的请求查询参数是否等于指定值;例如:

request.queryparam.lang == "language:en-us"
Custom

通过此方法,您可以插入自己的表达式。您可以在流变量参考条件参考中的语法中使用任何对象。此外,您还可以使用自定义变量。

如需详细了解如何创建自定义过滤条件,请参阅过滤条件语法

 

查看调试会话

Apigee 会将调试会话数据保存 24 小时。您不能配置此值;24 小时之后,这些数据将不再可用。在此之前,您可以查看调试会话。

使用 Apigee 界面或 API 查看最近的调试会话,如以下部分所述。

新版代理编辑器

如需使用新版代理编辑器查看调试会话,请执行以下操作:

  1. 如果您使用的是 Cloud 控制台中的 Apigee 界面:选择代理开发 > API 代理

    如果您使用的是经典版 Apigee 界面:请选择开发 > API 代理,然后在代理窗格中,选择要调试的代理的环境。

  2. 选择要调试的代理。
  3. 点击调试标签页。
  4. 最近的调试会话会显示可用的调试会话列表。
  5. 点击要查看的会话的链接。

经典版代理编辑器

如需使用经典版代理编辑器查看调试会话,请执行以下操作:

  1. 登录 Apigee 界面
  2. 从主视图中选择 API 代理
  3. 选择要调试的代理。
  4. 点击部署视图右上角的调试标签页。
  5. 近期调试会话面板中:
    1. 环境下拉列表中,选择您要查看其调试会话的 API 代理的环境。
    2. 修订版本下拉列表中,选择您想要查看其调试会话的 API 代理的修订版本号。

    Apigee 界面显示可用的调试会话列表。

  6. 点击要查看的会话的链接。

    Apigee 界面会加载调试会话,并使用调试数据填充发送请求面板。

在界面中选择视图选项

在 Apigee 界面中,您可以选择调试会话的视图选项。

视图选项列表

选项 说明
显示已停用的政策 显示所有已停用的政策。可以使用公共 API 停用政策。请参阅 API 代理配置参考
显示已跳过的阶段 显示跳过的所有阶段。由于未按步骤条件评估为 false,导致政策执行时发生的跳过阶段。如需了解详情,请参阅使用流变量的条件
显示所有 FlowInfo 表示流程细分内的转换。
自动比较选定的阶段 将所选阶段与前一阶段进行比较。将此模式关闭,仅查看所选阶段。
显示变量 显示或隐藏已读取和/或已分配值的变量。
显示属性 属性表示 API 代理的内部状态。(默认情况下隐藏)。

Apigee API

您可以借助此 API 执行以下操作:

使用 API 查看所有调试会话

如需查看环境中为 API 代理修订版本定义的所有最新调试会话,请向以下资源发出 GET 请求:

https://apigee.googleapis.com/v1/organizations/org/environments/env/apis/api/revisions/rev/debugsessions

(可选)您可以指定以下某个查询参数来控制返回的数据量:

  • pageSize - 需要列出的调试会话数量上限。页面大小默认为 25。
  • pageToken - 之前调用返回的页面令牌,可用于检索下一页。

以下示例演示了如何查看 test 环境中 helloworld API 代理修订版 1 的调试会话。

curl "https://apigee.googleapis.com/v1/organizations/myorg/environments/test/apis/helloworld/revisions/1/debugsessions" \
  -X GET \
  -H "Authorization: Bearer $TOKEN"

按照获取 OAuth 2.0 访问令牌中的说明,将 $TOKEN 设置为您的 OAuth 2.0 访问令牌。如需了解此示例中使用的 curl 选项,请参阅使用 curl。如需了解所使用的环境变量,请参阅为 Apigee API 请求设置环境变量

该响应包含一个 sessions 对象,其中包含当前处于活跃状态的调试会话列表,如以下示例所示:

{
  "sessions": [
    {
      "id": "a423ac73-0902-4cfa-4242-87a353a84d87",
      "timestamp_ms": 1566330186000
    },
    {
      "id": "f1eccbbe-1fa6-2424-83e4-3d063b47728a",
      "timestamp_ms": 1566330286000
    }
  ]
}

响应中只包含至少含一个事务的调试会话;不含任何事务的调试会话不包括在此列表中。

如需了解详情,请参阅列出调试会话 API

使用 API 查看调试会话的所有事务

如需查看调试会话的交易列表,请对以下资源发出 GET 请求:

https://apigee.googleapis.com/v1/organizations/org/environments/env/apis/api/revisions/rev/debugsessions/debugsession/data

其中,debugsession是您在查看调试会话时返回的调试会话的 ID。

以下示例演示了如何查看 test 环境中 helloworld API 修订版 1 的调试会话的事务。

curl "https://apigee.googleapis.com/v1/organizations/myorg/environments/test/apis/helloworld/revisions/1/debugsessions/a423ac73-0902-4cfa-4242-87a353a84d87/data" \
  -X GET \
  -H "Authorization: Bearer $TOKEN"

按照获取 OAuth 2.0 访问令牌中的说明,将 $TOKEN 设置为您的 OAuth 2.0 访问令牌。如需了解此示例中使用的 curl 选项,请参阅使用 curl。如需了解所使用的环境变量,请参阅为 Apigee API 请求设置环境变量

响应包括交易 ID 数组,如以下示例所示:

[
  "myorg-test-ver-5qxdb-64",
  "myorg-test-ver-5qxdb-65",
  "myorg-test-ver-5qxdb-66",
  "myorg-test-ver-5qxdb-67",
  "myorg-test-ver-5qxdb-68",
  "myorg-test-ver-5qxdb-69",
  "myorg-test-ver-5qxdb-70",
  "myorg-test-ver-5qxdb-71",
  "myorg-test-ver-5qxdb-72"
]

如需了解详情,请参阅列出调试会话数据 API

使用 API 查看调试会话的事务数据

如需查看调试会话的事务数据,请向以下资源发出 GET 请求:

https://apigee.googleapis.com/v1/organizations/{org}/environments/{env}/apis/{api}/revisions/{rev}/debugsessions/{debugsession}/data/{transactionId}

其中,debugsession 是您在查看调试会话时返回的调试会话的 ID。transactionId 是您查看调试会话的事务列表时返回的事务 ID。

在调试会话期间以 JSON 格式保存事务数据。您可以在离线调试工具中加载此数据。

以下示例演示了如何为 test 环境中 helloworld API 修订版 1 的调试会话下载事务数据。

curl "https://apigee.googleapis.com/v1/organizations/myorg/environments/test/apis/helloworld/revisions/1/debugsessions/a423ac73-0902-4cfa-4242-87a353a84d87/data/myorg-test-ver-5qxdb-64" \
  -X GET \
  -H "Authorization: Bearer $TOKEN"

按照获取 OAuth 2.0 访问令牌中的说明,将 $TOKEN 设置为您的 OAuth 2.0 访问令牌。如需了解此示例中使用的 curl 选项,请参阅使用 curl。如需了解所使用的环境变量,请参阅为 Apigee API 请求设置环境变量

响应由 JSON 载荷组成,该载荷包含指定事务的数据(如下载数据结构中所述)。

调试数据以专有 JSON 格式包含有关流的每个部分的请求和响应的所有信息。您可以保存这些数据,稍后在离线调试工具中使用这些数据。

如果在会话结束之前未向会话添加任何请求,则响应将如下所示:

[]

如需了解详情,请参阅获取调试会话数据 API

下载调试会话数据

您可以下载原始调试结果文件进行离线观看。下载的文件显示了调试会话的完整详细信息,包括所有标头、变量和政策的内容。

调试会话数据仅限 24 小时之内在界面中下载或查看。之后,Apigee 会删除会话数据。

新版代理编辑器

如需在新版代理编辑器中下载当前调试会话,请点击调试视图左侧窗格中的下载会话

下载调试会话。

请注意,调试会话在完成后的 24 小时内删除,因此,如果您希望在该时间之后查看调试会话,则需要在此之前下载调试会话。

经典版代理编辑器

如需使用经典版代理编辑器下载当前调试会话的数据,请执行以下操作:

  • 活跃会话:点击调试详情面板中的下载图标 (“下载”图标)。
  • 上一会话:点击最近调试会话面板中的会话名称,如查看调试会话中所述。然后在调试详情面板中点击“下载”图标

Apigee API

如需使用 Apigee API 查看当前调试会话的所有事务的 ID,请输入以下命令:

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     https://apigee.googleapis.com/v1/organizations/ORG/environments/ENV/apis/PROXY/revisions/REV/debugsessions/SESSION_ID/data

其中,SESSION_ID 是您要下载的调试会话的 ID。

请参阅列出调试会话中的事务 ID

如需使用 Apigee API 获取事务的调试数据,请输入以下命令:

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://apigee.googleapis.com/v1/organizations/ORG/environments/ENV/apis/PROXY/revisions/REV/debugsessions/SESSION_ID/data/TRANSACTION_ID

下载数据结构

Apigee 界面和 Apigee API 的调试会话数据的下载结构不同。

经典版 Apigee 界面

使用 Apigee 界面下载数据时,数据结构如下:

  • 包含整个会话中的所有事务
  • 将事务存储在 Messages 数组中
  • 包含会话的相关元数据(作为 DebugSession 对象)

Apigee API

查看调试会话中所述,您无法使用 Apigee API 同时查看整个会话的数据;您只能使用 API 查看个别事务数据。

例如:

{
  "completed": true,
  "point": [
    ...
  ...
}

下载数据示例

以下示例在下载的数据中突出显示了 DebugSession 元数据对象。此对象位于会话中包含事务的 Messages 数组。

{
  "DebugSession": {
    "Retrieved": "2019-06-08T13:08:13.395Z",
    "Organization": "myorg",
    "Environment": "prod",
    "API": "myproxy",
    "Revision": "1",
    "SessionId": "a2a271aa-4242-4ac6-97cb-aec8dcb115a9"
  },
  "Messages": [
    {
      "completed": true,
      "point": [
        {
          "id": "Paused"
        },
        {
          "id": "Resumed"
        },
        {
          "id": "StateChange",
          "results": [
            {
              "ActionResult": "DebugInfo",
              "properties": {
                "property": [
                  {
                    "name": "To",
                    "value": "REQ_HEADERS_PARSED"
                  },
                  {
                    "name": "From",
                    "value": "REQ_START"
                  }
                ]
              },
              "timestamp": "8-6-19 13:08:37:718"
            },
            {
              "ActionResult": "RequestMessage",
              "headers": [
                {
                  "name": "accept",
                  "value": "*/*"
                },
                {
                  "name": "accept-encoding",
                  "value": "gzip,gzip,deflate,br"
                },
                {
                  "name": "content-length",
                  "value": "0"
                },
                {
                  "name": "host",
                  "value": "myorg.example.domain.net"
                },
                {
                  "name": "user-agent",
                  "value": "Google-Apigee"
                },
                {
                  "name": "x-b3-sampled",
                  "value": "0"
                },
                {
                  "name": "x-b3-spanid",
                  "value": "d4ee579206759662"
                },
                {
                  "name": "x-b3-traceid",
                  "value": "adc1e171777c237dd4ee579206759662"
                },
                {
                  "name": "x-forwarded-for",
                  "value": "66.102.8.98"
                },
                {
                  "name": "x-forwarded-proto",
                  "value": "https"
                },
                {
                  "name": "x-request-id",
                  "value": "54e05cba-4242-4490-4242-60c45c156f90"
                }
              ],
              "uRI": "/myproxy",
              "verb": "GET"
            }
          ]
        },
        {
          "id": "FlowInfo",
          "results": [
            {
              "ActionResult": "DebugInfo",
              "properties": {
                "property": [
                  {
                    "name": "environment.name",
                    "value": "prod"
                  },
                  {
                    "name": "environment.qualifiedname",
                    "value": "myorg__prod"
                  },
                  {
                    "name": "environment.orgname",
                    "value": "myorg"
                  }
                ]
              },
              "timestamp": "8-6-19 13:08:37:718"
            }
          ]
        },
        {
          "id": "FlowInfo",
          "results": [
            {
              "ActionResult": "DebugInfo",
              "properties": {
                "property": [
                  {
                    "name": "organization.name",
                    "value": "myorg"
                  }
                ]
              },
              "timestamp": "8-6-19 13:08:37:718"
            }
          ]
        },
        {
          "id": "FlowInfo",
          "results": [
            {
              "ActionResult": "DebugInfo",
              "properties": {
                "property": [
                  {
                    "name": "apiproxy.qualifiedname",
                    "value": "myproxy__1"
                  },
                  {
                    "name": "apiproxy.basepath",
                    "value": "/"
                  },
                  {
                    "name": "apiproxy.revision",
                    "value": "1"
                  },
                  {
                    "name": "apiproxy.name",
                    "value": "myproxy"
                  }
                ]
              },
              "timestamp": "8-6-19 13:08:37:718"
            }
          ]
        },
        ...
      ...
    }
  ]
}

如果调试会话不包含任何请求,则 Message 数组为空,如以下示例所示:

{
  "DebugSession": {
    "Retrieved": "2019-06-08T13:08:13.395Z",
    "Organization": "myorg",
    "Environment": "prod",
    "API": "myproxy",
    "Revision": "1",
    "SessionId": "a2a271aa-4242-4ac6-97cb-aec8dcb115a9"
  },
  "Messages": []
}

删除调试会话的数据

如以下部分所述,使用 Apigee 界面或 API 删除调试会话的数据。

新版代理编辑器

如需在新版代理编辑器中删除调试会话,请执行以下操作:

  1. 选择要删除的会话所在的行。
  2. 点击行末的三点状菜单,然后选择删除

经典版代理编辑器

点击调试会话的调试详情面板中的 “删除”图标

Apigee API

如需使用 API 删除所有调试会话数据,请向以下资源发出 DELETE 请求:

https://apigee.googleapis.com/v1/organizations/org/environments/env/apis/api/revisions/rev/debugsessions/debugsession/data

其中,debugsession是您在查看调试会话时返回的调试会话的 ID。

以下示例演示了如何删除 test 环境中 helloworld API 修订版 1 的调试会话数据。

curl "https://apigee.googleapis.com/v1/organizations/myorg/environments/test/apis/helloworld/revisions/1/debugsessions/a423ac73-0902-4cfa-4242-87a353a84d87/data" \
  -X DELETE \
  -H "Authorization: Bearer $TOKEN"

按照获取 OAuth 2.0 访问令牌中的说明,将 $TOKEN 设置为您的 OAuth 2.0 访问令牌。如需了解此示例中使用的 curl 选项,请参阅使用 curl。如需了解所使用的环境变量,请参阅为 Apigee API 请求设置环境变量

如果成功,则响应正文将为空。

调试会话数据只会保留 24 小时。如果您未在该时间段之前明确删除该服务,则 Apigee 会为您删除该服务。