【发布时间】:2017-05-27 01:24:46
【问题描述】:
使用下面的代码,我会发送一封出错的电子邮件。我正在尝试在电子邮件中包含指向 Cloud Console 日志的链接,但请求 ID 似乎有 30% 的情况是错误的。
如果我发现请求的 ID 错误,它几乎总是完美匹配,除了最后三个字符是 0(在 Stackdriver 控制台中)而不是 101(从 env 变量返回),总是相同的替换- 这是云控制台的错误还是我尝试使用这些 ID 错误?
代码(精简版):
class ErrorAlertMiddleware(object):
def process_response(self, request, response):
if response.status_code == 500:
logger.info(os.environ.get('REQUEST_LOG_ID'))
msg = 'Link to logs: https://console.cloud.google.com/logs/viewer?' + '&'.join((
'project=%s' % MY_APP_ID,
'expandAll=true',
'filters=request_id:%s' % os.environ.get('REQUEST_LOG_ID'),
'resource=gae_app',
))
# this is a utility func that simply sends email
sendemail(ERROR_RECIPIENT, msg)
return response
注意,我还记录了 REQUEST_LOG_ID 以确保它没有被编码或其他什么,并且日志输出与链接中显示的内容相匹配
【问题讨论】:
-
值得我看到同样的问题,所以我怀疑谷歌的基础设施某处存在错误。我赞成这个问题并增加了赏金以希望得到答案。我还通过我的付费谷歌支持帐户抱怨过,让我们看看它是否在某个地方:-)
-
试试这个字段:
advancedFilter=protoPayload.requestId(不是 100% 确定如何准确地制定整个请求还有待检查...)。 -
嗯,有趣的是
filter=request_id:%s实际上映射到operation.id,而不是我假设的protoPayload.requestId(通过转换为高级过滤器确认)。但是,我找不到两者不同的任何实例。我一直在做的只是re.sub('101$', '0', os.environ.get('REQUEST_LOG_ID'))已经完成了工作
标签: python google-app-engine logging google-cloud-platform