gpt4 book ai didi

logging - 如何关联 Cloud Run 中的请求日志?

转载 作者:行者123 更新时间:2023-12-01 01:40:54 24 4
gpt4 key购买 nike

我正在使用自结构的 JSON 有效负载从基于 Node.js/Express 的 Cloud Run 服务进行日志记录,但我无法使用 trace 从同一请求中获取日志以进行关联。方法。

documentation说:

Container logs are not automatically correlated to request logs unless you use a Stackdriver Logging client library. If you want this correlation without using a client library, use a structured JSON log line that contains a trace field with the content of the incoming X-Cloud-Trace-Context header. Then your logs will be correctly correlated to the request log.



我知道我的结构化 JSON 日志作为 level/severity 工作和 message正在按预期提取和显示。

我作为 trace 的值传递正是 X-Cloud-Trace-Context传递的内容我使用的标题 req.get Express提供的方法: req.get('X-Cloud-Trace-Context') .

这是正在记录的 JSON:
{
"message": "Create Query",
"level": "debug",
"severity": "DEBUG",
"trace": "40f...........................cc/131...............23;o=1"
}

以下是该日志行在 Stackdriver Logging 中的显示方式示例。

我也试过使用 logging.googleapis.com/trace属性如 Special fields in structured payloads documentation 中所述.我相当确定 X-Cloud-Trace-Context 的值(value) header 对此属性无效,但我不确定如何设置 header 值的格式以匹配此页面上记录的值。

综上所述,我的问题是:
  • 哪个是用于 trace 的正确属性名称?
  • 如何根据 X-Cloud-Trace-Context 的值正确格式化此属性的值头?


  • 以下是 Stackdriver Logging 中显示的完整日志消息示例(已删除 ID):

    {
    insertId: "..."
    jsonPayload: {
    level: "debug"
    message: "Create Query"
    trace: "40f...........................cc/131...............23;o=1"
    }
    labels: {
    instanceId: "0.........................................2"
    }
    logName: "projects/b.............0/logs/run.googleapis.com%2Fstdout"
    receiveTimestamp: "2019-08-16T18:05:58.816240093Z"
    resource: {
    labels: {
    configuration_name: "a..................ing"
    location: "..."
    project_id: "b.............0"
    revision_name: "a..................ing-01987"
    service_name: "a..................ing"
    }
    type: "cloud_run_revision"
    }
    severity: "DEBUG"
    timestamp: "2019-08-16T18:05:58.479527Z"
    }

    最佳答案

    哪个是用于跟踪的正确属性名称?

    JSON 字符串中所需的属性名称是 logging.googleapis.com/trace .这是从 jsonpayload 中拉出并进入 trace您可以在“INFO”日志上查看示例用法的属性。

    如何根据 X-Cloud-Trace-Context header 的值正确格式化此属性的值?

    所需格式如下:projects/[project]/traces/[trace]哪里[project]是您的 Google Cloud 项目,即 b.......0[trace]从你的例子是 40f...........................cc .需要省略 base 和 query 参数(这不是特别有据可查的)。

    以下是在此处找到的 Google 文档中在 JS 中执行的片段:https://cloud.google.com/run/docs/logging

    // Build structured log messages as an object.
    const globalLogFields = {};

    // Add log correlation to nest all log messages beneath request log in Log Viewer.
    const traceHeader = req.header('X-Cloud-Trace-Context');
    if (traceHeader && project) {
    const [trace] = traceHeader.split('/');
    globalLogFields[
    'logging.googleapis.com/trace'
    ] = `projects/${project}/traces/${trace}`;
    }

    下面是我在提取信息并正确格式化方面取得成功的 Golang 函数:
    func extractTracePath(r *http.Request, app *application) string {
    s := r.Header.Get("X-Cloud-Trace-Context")
    traceURL, err := url.Parse(s)
    if err != nil {
    app.infoLog.Fatal("Invalid trace URL")
    }
    tracePath := traceURL.Path
    trace := strings.Split(tracePath, "/")[0]
    project := os.Getenv("GCLOUD_PROJECT")
    partialTracePath, err := url.Parse("projects/" + project + "/traces/")
    tracePath = partialTracePath.Path
    tracePath = path.Join(tracePath, trace)
    return tracePath
    }

    关于logging - 如何关联 Cloud Run 中的请求日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57557884/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com