我正在使用我的WSGI服务器的Gunicorn在Google Kubernetes Engine上运行Django REST API。当我的应用程序遇到500服务器错误时,Python堆栈跟踪未显示在GCP Logging console中(在“ GKE容器”资源中)。在我的另一个使用Daphne作为ASGI / WSGI服务器的Django项目中,此追溯 被正确记录了。更奇怪的是,Gunicorn应用程序在几周前才正确记录了错误。这些错误也会出现在Error Reporting console中。
要清楚,这是我想在GCP日志中看到的信息类型:
Internal Server Error: /v1/user/errant-endpoint
Traceback (most recent call last):
File "/path/to/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
...
File "/path/to/project/file.py", line 176, in my_file
print(test)
NameError: name 'test' is not defined
对于Gunicorn项目,会记录一些Python追溯,就像启动Gunicorn时的这样:
/usr/local/lib/python3.6/site-packages/django/db/models/fields/__init__.py:1421: RuntimeWarning: DateTimeField User.last_login received a naive datetime (2019-02-04 05:49:47.530648) while time zone support is active.
但是,有500个错误,仅记录HTTP信息:
[04/Feb/2019:06:03:58 +0000] "POST /v1/errant-endpoint HTTP/1.1" 500
我已经查看了用于设置Stackdriver Logging和Stackdriver Error Reporting的资源,但是这些似乎都不适用,因为1)仅在您要明确记录错误时才起作用(例如client.report_exception()
中),以及2)错误报告在没有进行我的设置的情况下捕获了先前的错误,因此似乎有可能无需安装那些客户端库。
这里有很多变量在起作用,我不确定从哪里开始。我可能没有在此处提供足够的信息来正确诊断此问题(docker设置,kubernetes配置等),但我认为我可能对该过程有一些根本性的误解,有人可能会很乐于启发我。
编辑:
我在GKE documentation中找到了如何确保为集群启用Stackdriver日志记录的方法。还是没有运气。
更新(部分解决方案):
我在DEBUG = True
中设置了settings.py
,这提示错误开始在Stackdriver Logging和Error Reporting中记录。我已经在我的canary环境中进行了此操作,但是由于它公开了一些后端代码,因此它并不理想。仍然不确定为什么它可以在我的其他GCP项目中运行而不在调试模式下运行。