首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何根据请求绑定云日志条目?

如何根据请求绑定云日志条目?
EN

Stack Overflow用户
提问于 2021-07-26 23:28:22
回答 1查看 48关注 0票数 0

我正在尝试让Cloud Logging在Cloud Logs Explorer中根据请求绑定(即分组)日志条目,类似于node-js-logging-winston在Cloud Functions Node运行时所做的事情:https://github.com/googleapis/nodejs-logging-winston#using-as-an-express-middleware它也是App Engine自动执行的操作。

在下面的博客中有如何使用Python和Flask来完成此操作的一般说明:https://medium.com/google-cloud/combining-correlated-log-lines-in-google-stackdriver-dd23284aeb29

这是日志资源管理器中的屏幕截图。

这里有一个脚本,应该可以做到这一点,但条目不是按请求分组的。

代码语言:javascript
复制
import argparse
import datetime
import time
import uuid

from google.cloud import logging


def _log_timestamp():
    return datetime.datetime.now(datetime.timezone.utc)


def _log_trace_id():
    return uuid.uuid4().hex


def _log_request_time(request_start_time):
    return "%.5fs" % (time.time() - request_start_time)


def run(project_id):
    request_start_time = time.time()
    trace_id = _log_trace_id()

    client = logging.Client(project=project_id)

    app_logger = client.logger('child')
    app_logger.log_struct(
        {"message": 'app log entry # 1'},
        severity='INFO',
        trace=f'projects/{project_id}/traces/{trace_id}',
        timestamp=_log_timestamp()
    )
    app_logger.log_struct(
        {"message": 'app log entry # 2'},
        severity='INFO',
        trace=f'projects/{project_id}/traces/{trace_id}',
        timestamp=_log_timestamp()
    )

    request_logger = client.logger('parent')
    request_logger.log_struct(
        {"message": 'TEXT'},
        severity='INFO',
        trace=f'projects/{project_id}/traces/{trace_id}',
        timestamp=_log_timestamp(),
        http_request=dict(
            request_method='GET',
            request_url='https://request.example.com/test-logging',
            status=200,
            user_agent='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko)'
                       ' Chrome/92.0.4515.107 Safari/537.36',
            response_size=15773,
            latency=_log_request_time(request_start_time),
            remote_ip='127.0.0.1',
            referer='https://referer.example.com/',
        )
    )


if __name__ == '__main__':
    parser = argparse.ArgumentParser(
        description=__doc__,
        formatter_class=argparse.RawDescriptionHelpFormatter
    )
    parser.add_argument('--project',
                        required=True,
                        help='Project ID')
    args = parser.parse_args()

    run(args.project)

这是日志资源管理器的屏幕截图,显示请求没有捆绑在一起:

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-28 03:48:32

我收到了Google Cloud Support的回复。我问题中的代码没有问题。为了查看请求绑定的日志,有必要在logs Explorer中过滤父logName。然后,应用程序日志条目嵌套在请求日志条目中。如果父logName没有特别过滤,那么它会在平面列表中显示所有日志条目(请求和应用程序),如我的问题中的屏幕截图所示。

以下是正确嵌套的日志条目的屏幕截图:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68532576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档