Java googleappengine中任务队列成本的度量

Java googleappengine中任务队列成本的度量,java,python,google-app-engine,task-queue,measurement,Java,Python,Google App Engine,Task Queue,Measurement,我通过检查x-appengine-estimated-cpm-us-dollars标题来衡量对GAE的请求成本。这非常有效,并且与x-appengine-resource-usage结合使用 x-traceurl我甚至可以得到更详细的信息 但是,我的应用程序的很大一部分是在任务队列的上下文中运行的。因此,很大一部分实例小时成本由队列消耗。每次在请求之外执行代码时,其成本不包括在x-appengine-estimate-cpm-us-dollars标题中 我正在寻找一种方法来衡量每个请求消耗的全部

我通过检查x-appengine-estimated-cpm-us-dollars标题来衡量对GAE的请求成本。这非常有效,并且与x-appengine-resource-usage结合使用 x-traceurl我甚至可以得到更详细的信息

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


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

这是一种过度消耗。有一个工具,你可以下载谷歌应用引擎日志,并将其转换为sqlite。

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

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

  • 因此,您可以简单地在原始请求中记录一个generate id
  • 将id传递给任务
  • 在任务请求中再次记录收到的id
  • 通过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 我认为还有另一种可能的方法来估算正常请求+任务请求的成本。 诀窍是将异步任务更改为sync(假设成本相同)。 我没有试过,但试起来容易多了

    # 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')
    

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

    如果您查看appengine.appspot.com上的日志,它将列出所有请求,并告诉您每个请求的cpm美元。所以你可以把普通请求和任务请求的cpm加在一起,谢谢!这对于手动测试是可以的。但是我如何通过编程获得这些信息呢。例如,是否有我可以点击的URL来访问此文件?另外,如何将这些任务的成本与原始请求联系起来?我不想手动测试成本,而是想自动测量成本,看看它们是如何随时间变化的。谢谢!我同意解析日志是一种解决方案。但是,如果appstats包含对后台工作的引用(例如提交任务的名称),则可以简化。对*.appspot.com/appstats/stats?time=123&type=json的每次调用都将包括对任务队列API的调用,如taskqueue.BulkAdd。因此,一个更强大的解决方案可能是将其更改为包含任务名称taskqueue.BulkAdd[task1,task2]。因此,可以通过点击另一个带有已提交任务名称的appstats URL来检索后台工作成本。我还没有找到这方面的功能请求。谢谢,这是个好主意!这样我们就可以测量准确的成本,因为每件事情都是同步执行的。不幸的是,该应用程序在调试和prod期间的行为会有所不同。例如,在调试期间,该应用程序的响应速度会比prod慢得多。但考虑到GAE目前提供的功能,这可能是最好的解决方案。