【问题标题】:GAE REQUEST_LOG_ID env variable is wrongGAE REQUEST_LOG_ID 环境变量错误
【发布时间】: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


【解决方案1】:

使用request.environ.get('REQUEST_LOG_ID') 代替os.environ.get('REQUEST_LOG_ID')

os.environ['REQUEST_LOG_ID'] 可能会在当前请求的开始和您访问它的时间之间发生变化,但是一旦请求被初始化,request.environ['REQUEST_LOG_ID'] 就不应更改。 The docs state 如果一个请求 ID 大于另一个请求 ID,则它比另一个请求 ID 发生得晚。这意味着 Stackdriver 控制台中的 requestID 是在您的电子邮件链接中的请求 ID 之前生成的。这让我觉得在您访问之前,os.environ['REQUEST_LOG_ID'] 正在从'....000' 更新为'....101',而request.environ['REQUEST_LOG_ID'] 中的副本应该保持不变。

有关request.environ 的更多信息,请查看google.appengine.runtime.request_environment.py 中的源代码。我还没有真正找到这方面的文档,但该代码让我相信os.environ 不像request.environ 那样安全。

【讨论】:

    猜你喜欢
    • 2013-07-28
    • 2016-11-04
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    相关资源
    最近更新 更多