日志未嵌套在灵活VM中的请求下

时间:2016-04-27 07:23:18

标签: google-app-engine logging google-cloud-logging

我有一个在App Engine Classic中运行的模块和另一个在App Engine Flexible中运行的模块。查看在App Engine Classic中运行的日志时,日志条目将嵌套在每个请求中。

但是,在查看在App Engine Flexible中运行的日志时,它们不会嵌套。每个日志条目似乎都与请求无关。这使得确定哪个日志与哪个请求相关联非常困难。

是否可以将App Engine Flexible中的日志嵌套在每个请求下(与App Engine Classic一样)?

我在文档中找不到解释这种差异的任何内容。

4 个答案:

答案 0 :(得分:4)

正如您可能想象的那样,App Engine Flexible使用了与传统App Engine不同的机器,这些不同的环境会以不同的方式记录。遗憾的是,目前无法使Flexible能够以与Classic相同的数据格式登录。

如果这对您来说非常重要,您可以随时直接通过Cloud Logging API进行日志记录,这就是App Engine日志API最终传递到今天的内容。您可以通过查看传统的App Engine条目来推断要记录的数据格式,尽管我们已经打开了一个功能请求,可以更明确地公开记录。

另外,作为传递说明,在Stackdriver Logging(以前称为Cloud Logging)方面,我们一直在考虑如何更普遍地支持这种日志数据的非规范化,而不仅仅是针对App的特殊外壳引擎以特定格式记录,因为这将是广泛有用的功能。但是,我们没有任何具体的计划或时间表,我们可以在这一点上分享 - 只是注意到这是我们的关注。

答案 1 :(得分:3)

现在,您可以按照此处的说明编写与App Engine Standard类似的嵌套应用程序日志:scipy.stats.randint

答案 2 :(得分:0)

Marc Unangst关于链接应用程序日志和请求的建议听起来很棒,遗憾的是,关于如何实现这一点的文档不是很清楚(https://cloud.google.com/appengine/articles/logging#linking_app_logs_and_requests)。

使用Google Cloud Client Libraries for Python中的“Google App Engine灵活日志处理程序”(https://google-cloud-python.readthedocs.io/en/latest/logging/handlers-app-engine.html)我已经能够登录到作为日志堆栈一部分的“app”日志app引擎灵活的应用程序本身所以我目前和主题首发一样。

我注意到,根据日志链接的需要,resource.labelsresource.type属性会以这种方式自动设置。但是,trace信息不存在,似乎缺少有关如何包含此信息的说明。

接下来,时间似乎总是关闭。这些说明要求应用程序日志条目的timestamp位于相应HTTP请求的parent.timestamp - parent.httpRequest.latency之间。我注意到我的应用程序日志条目的时间戳总是稍晚于相应请求的timestamp。这很奇怪,因为这些条目是在请求期间

对我来说,目前看起来日志处理程序并不知道在写日志条目时我正在进行HTTP请求周期(我正在使用Django),因此缺少trace id?不确定如何从这里继续,喜欢听别人可能取得的成就。

答案 3 :(得分:0)

与您一样,我遇到了一个确切的问题。我的应用程序在Django框架上运行,因此我创建了用于管理日志嵌套的中间件,并开始使用{google.cloud-logging“库通过Google Cloud Logging API进行日志记录。

Google Cloud Loggin API文档对此没有很好的文档。

在创建日志时,您需要添加“ TRACE”。此跟踪应指向其父日志。

我能够获得以下结果: enter image description here

请查看有关实现此解决方案here的分步博客

请在Github上检查存储库源代码here