App引擎中的Logger Entity

时间:2011-09-01 17:24:51

标签: python google-app-engine nosql google-cloud-datastore

在app引擎中有一个记录器实体来写日志是否可行?我将有一个~1500req / sec的应用程序,并且正在考虑使用任务队列来完成它。每当我收到请求时,我都会创建一个任务并将其放入队列中,以便将某些内容写入日志实体(具有日期和字符串属性)。

我需要这个,因为我必须在站点中放置统计信息,我认为这样做并且稍后用后端读取日志将解决问题。如果我有编程访问应用程序引擎日志(来自日志记录)会摇滚,但由于那是不可用的,我没有看到任何其他方法来做它..

非常欢迎反馈

2 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点:

  1. 累积日志并将其写入请求结尾处放置的单个数据存储区中。这是最高延迟选项,但只是稍微 - 数据存储区放置相当快。此解决方案还消耗所有选项中最少的资源。
  2. 累积日志并将任务队列任务排入队列,将任务队列任务写入数据存储区(或者使用它们执行任何其他操作)。这稍微快一点(任务队列排队往往很快),但它稍微复杂一些,并且限制在100kb的数据(希望不应该是限制)。
  3. 使用数据排队拉取任务,并使用常规推送任务或后端使用队列并批量插入数据存储区。这比选项2更复杂,但也更有效。
  4. 运行后端,累积并写入日志,并对其进行URLFetch调用以存储日志。 urlfetch处理程序可以将数据写入后端的内存并异步返回,这使得它在增加的用户延迟方面最快(对于urlfetch调用,小于1ms)!但这需要等待Python 2.7,因为您需要多线程来异步处理日志条目。
  5. 您可能还想查看一下Prospective Search API,它可能允许您对日志数据进行一些过滤和预处理。

答案 1 :(得分:0)

如何保留请求信息的记忆数据结构(在它们到达时记录),然后运行每5分钟(或更快)的cron作业,该作业在内存缓存的最后5分钟内处理统计信息,并记录这些数据存储中的统计数据为5分钟。然后,相同(或不同)的cron作业也可以清除内存缓存 - 这样它就不会太大。

然后,您可以根据5分钟间隔统计数据的总和进行大图分析,这可能比分析1500req / s数据的小时数更易于管理。