是否有推荐/最佳方法来生成 API 代理在每个策略上花费的时间报告?
目前我的做法是使用 JS 收集时间戳并计算每个策略的延迟,然后使用 stats 收集策略进行报告。
这对于性能检查来说太具有侵入性了,仅我的数据收集就增加了整体响应的时间。
在跨多个请求分析数据时,报告每个步骤所用时间的最佳无创方法是什么(跟踪模式下的 ui 确实基于单个请求显示每个策略的时间)
谢谢,
里卡多
是否有推荐/最佳方法来生成 API 代理在每个策略上花费的时间报告?
目前我的做法是使用 JS 收集时间戳并计算每个策略的延迟,然后使用 stats 收集策略进行报告。
这对于性能检查来说太具有侵入性了,仅我的数据收集就增加了整体响应的时间。
在跨多个请求分析数据时,报告每个步骤所用时间的最佳无创方法是什么(跟踪模式下的 ui 确实基于单个请求显示每个策略的时间)
谢谢,
里卡多
不支持公共 API 来计算此信息并返回汇总策略执行时间数据的良好、干净的响应。最好的办法是尝试使用 Analytics 报告request_processing_latency
和response_processing_latency
度量。(http://apigee.com/docs/content/analytics-reference)。然后,如果需要,利用跟踪来识别策略执行时间。
或者,您可以尝试下载跟踪会话并解析策略之间的时间戳以构建您的信息,但 UI 中的跟踪已经这样做了。
You consider using debug API. http://apigee.com/docs/api/debug-sessions
First you'll need to start a session for example:
curl -H "Content-type:application/octet-stream" -X POST https://api.enterprise.apigee.com/v1/organizations/{org}/environments/{env}/apis/{api_name}/revisions/{revision #}/debugsessions?"session=MySession" \
-u $ae_username:$ae_password
Get info from session:
curl -X GET -H "Accept:application/json" \
https://api.enterprise.apigee.com/v1/organizations/{org}/environments/{env}/apis/{api_name}/revisions/{revision #}/debugsessions/MySession/data \
-u $ae_username:$ae_password
可以使用 UI 中的调试跟踪找到每个策略花费的时间。
请参阅下面的屏幕截图。
正如 Diego 所说,您可以使用 debugsession API 调用来获取调试会话。
对于调试会话,您还可以定义要运行调试会话的时间限制。有了这个,如果您运行 1 小时的性能测试,您可以创建这么多时间的调试会话。
curl -v -u jhans@apigee.com http://management:8080/v1/organizations/weatherapi/environments/prod/apis/ForeCast/revisions/6/debugsessions?session=ab\&timeout=300 -X POST
您可以从 UI 下载跟踪会话,该会话将包含一个 XML,该 XML 具有每个策略的时间戳
<Point id="Condition">
<DebugInfo>
<Timestamp>05-02-14 04:38:14:088</Timestamp>
<Properties>
<Property name="ExpressionResult">true</Property>
</Point>
<Point id="StateChange">
以上是从 UI 的调试跟踪中获取任何策略的时间戳的示例。
里卡多,这是我的建议。
免责声明:这是非常细致和耗时的。仅当您在性能问题上真正受阻并且没有其他解决方案时,我才会推荐这种方法。
假设您的代理几乎没有策略,即对外部服务和后端的服务调用。
因此,总延迟将是 (p1, p2, p3...) + 服务调用目标 + 后端所用时间的总和。
在这一系列负载测试结束时,您将知道哪个策略、后端对性能影响最大。