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

Logs are Not Nested Under Requests in Flexible VM

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

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

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

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

正如您想象的那样,App Engine Flexible 使用了很多与传统 App Engine 不同的机制,并且这些不同的环境确实以不同的方式记录。遗憾的是,目前无法诱导 Flexible 以与 Classic 相同的数据格式登录。

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

此外,顺便提一下,在 Stackdriver Logging(以前称为 Cloud Logging)方面,我们肯定在考虑如何更普遍地支持这种日志数据的非规范化,而不仅仅是 App 的特殊外壳以特定格式记录引擎日志,因为这将是广泛有用的功能。但是,我们目前没有任何具体的计划或时间表可以分享——只是注意到这在我们的雷达范围内。

您现在可以按照此处的说明编写行为类似于 App Engine 标准的嵌套应用程序日志:https://cloud.google.com/logging/docs/view/service/appengine-logs#linking_application_logs_and_requests

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

使用 Google 云客户端库中的 "Google App Engine flexible Log Handler" Python (https://google-cloud-python.readthedocs.io/en/latest/logging/handlers-app-engine.html) 我已经能够登录 'app' 日志是应用引擎灵活应用程序本身的日志堆栈的一部分。所以我目前和话题发起人在同一条船上。

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

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

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

我遇到了和你一样的问题。我的应用程序是 运行 在 Django 框架上,所以我创建了中间件来管理日志嵌套并使用 "google-cloud-logging" 库通过 Google Cloud Logging API 开始记录。

Google Cloud Loggin API 文档没有这方面的好文档。

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

我获得了以下结果:

请查看我关于实施此解决方案的分步博客 here

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