【发布时间】:2019-12-24 17:46:56
【问题描述】:
我正在使用自结构化 JSON 有效负载从基于 Node.js/Express 的 Cloud Run 服务进行日志记录,但我无法使用 trace 方法从同一请求中获取日志以进行关联。
容器日志不会自动与请求日志相关联,除非 您使用 Stackdriver Logging 客户端库。如果你想要这个 不使用客户端库的关联,使用结构化的 JSON 日志 包含带有传入内容的跟踪字段的行 X-Cloud-Trace-Context 标头。然后您的日志将正确 与请求日志相关。
我知道我的结构化 JSON 日志正在工作,因为 level/severity 和 message 正在按预期提取和显示。
我作为trace 的值传递的正是X-Cloud-Trace-Context 标头传递的值,我使用Express 提供的req.get 方法获得:req.get('X-Cloud-Trace-Context')。
这是正在记录的 JSON:
{
"message": "Create Query",
"level": "debug",
"severity": "DEBUG",
"trace": "40f...........................cc/131...............23;o=1"
}
下面是该日志行在 Stackdriver Logging 中的显示示例。
我也尝试使用Special fields in structured payloads documentation 中提到的logging.googleapis.com/trace 属性。我相当确定 X-Cloud-Trace-Context 标头的值对此属性无效,但我不确定如何格式化标头值以匹配此页面上记录的值。
鉴于上述情况,我的问题是:
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"
}
【问题讨论】:
标签: logging stackdriver google-cloud-run