Logs are Not Nested Under Requests in Flexible VM

两盒软妹~` 提交于 2019-11-28 12:06:22

You can now write nested application logs that behave similarly to App Engine Standard by following the instructions here: https://cloud.google.com/logging/docs/view/service/appengine-logs#linking_application_logs_and_requests

As you might imagine, App Engine Flexible uses a good bit of different machinery from traditional App Engine, and these different environments do log differently. It is unfortunately not currently possible to induce Flexible to log in the same data format as Classic.

If this is sufficiently important to you, you can always directly log via the Cloud Logging API, which is what the App Engine logging API ends up passing through to today. You can infer the data format to log by looking at traditional App Engine entries, though we have open a feature request to publicly document this more explicitly.

Also, as a passing note, on the Stackdriver Logging (formerly Cloud Logging) front, we're definitely thinking about ways to support this kind of denormalization of log data more generally, rather than just special-casing for App Engine logging in a specific format, as this would be broadly useful functionality. However, we don't have any specific plans or timelines that we can share at this point—just noting that this is on our radar.

The suggestion by Marc Unangst to link application logs and requests sounds great, unfortunately the documentation on how to achieve this is not very clear (https://cloud.google.com/appengine/articles/logging#linking_app_logs_and_requests).

Using the "Google App Engine flexible Log Handler" from the Google Cloud Client Libraries for Python (https://google-cloud-python.readthedocs.io/en/latest/logging/handlers-app-engine.html) I have been able to log to the 'app' log that is part of the log-stack of the app engine flexible app itself. So I am currently in the same boat as the topic starter.

I noticed that, as required for log linking, the resource.labels and resource.type properties are automatically set correctly this way. However, trace information is absent, instructions seem to be missing on how to include this.

Next, the timing seems to always be off as well. The instructions require the timestamp of the app log entries to be in between parent.timestamp - parent.httpRequest.latency of the corresponding HTTP request. I'm noticing that the timestamps of my app log entries are always slightly later then the timestamp of the corresponding request. Which is weird since these entries are made during the request.

To me it currently looks like the log handler is unaware of an HTTP request cycle going on while writing log entries (I am using this with Django), hence the missing trace id's? Not sure on how to continue from here, love to hear what others may have achieved.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!