0

我通过检查x-appengine-estimated-cpm-us-dollars标头来衡量对 GAE 的请求的成本。这很好用,结合x-appengine-resource-usagex-traceurl我什至可以获得更详细的信息。

但是,我的应用程序的很大一部分是在任务队列的上下文中运行的。因此,队列消耗了很大一部分实例小时成本。每次在请求之外执行代码时,其成本都不包含在x-appengine-estimated-cpm-us-dollars标头中。

我正在寻找一种方法来衡量每个请求所消耗的全部成本。即请求本身产生的成本该请求添加的任务的成本。

4

1 回答 1

1

这是矫枉过正。有一个工具可以下载 google app engine log 并将它们转换为 sqlite。 http://code.google.com/p/google-app-engine-samples/source/browse/trunk/logparser/logparser.py

使用此工具,任务请求和普通请求的 cpm usd 将全部一起下载。您可以将每日日志存储到单独的 sqlite 文件中,并根据需要进行尽可能多的分析。

在将任务成本与原始请求相关联方面。使用此工具下载的日志数据包括logging模块的完整输出。

  1. 所以你可以简单地在原始请求中记录一个生成 id
  2. 将 id 传递给任务。
  3. 在任务请求中再次记录收到的 id。
  4. 通过 id 找到正常和任务请求对。

例如:

# in org request
a_id = genereate_a_random_id() 
logging.info(a_id) # the id will be included 

taskqueue.add(url='/path_to_task', params={'id': a_id})


# in task request
a_id = self.request.get('id')
logging.info(a_id)

编辑1

我认为还有另一种可能的方法来估算正常请求+任务请求的成本。诀窍是将异步任务更改为同步(假设成本相同)。我没有尝试过,但尝试起来要容易得多。

# in org request, add a variable to identify debug
debug = self.request.get('DEBUG')

if debug:
    self.redirect('/path_to_task')
else:
    taskqueue.add(url='/path_to_task')

因此,在使用 DEBUG 参数测试正常请求时。它将首先处理正常请求,然后为正常请求返回 x-appengine-estimated-cpm-us-dollars。稍后它会将您的测试客户端重定向到相关任务请求(任务请求也可以作为正常请求通过 url 客户端访问和触发)并为任务请求返回 x-appengine-estimated-cpm-us-dollars。您可以简单地将它们加在一起以获得总成本。

于 2012-12-11T17:14:54.740 回答