具有相同跟踪 ID 的 Stackdriver 日志条目未关联
Posted
技术标签:
【中文标题】具有相同跟踪 ID 的 Stackdriver 日志条目未关联【英文标题】:Stackdriver log entries with same trace ID not associated 【发布时间】:2020-04-09 13:22:31 【问题描述】:我在 GKE 上托管了一个 NodeJS 项目,并启用了 trace agent 和 Stackdriver 日志记录。该项目正在使用winston
登录到stdout
,如下所示:
const createLogger, format, transports = require('winston');
const combine, json = format;
const addTraceId = format(info =>
const agent = global._google_trace_agent;
if (agent)
const traceProjectId = agent.getWriterProjectId();
const traceId = agent.getCurrentContextId();
if (traceProjectId && traceId)
info['logging.googleapis.com/trace'] = `projects/$traceProjectId/traces/$traceId`;
);
createLogger(
level: 'debug',
transports: new transports.Console()
format: combine(
addTraceId(),
json()
);
);
我可以看到 traceId 出现在 Stackdriver 中,并且在同一跟踪中的日志中保持一致。但它们都是单独的日志条目,而不是折叠在第一个条目下。
我检查了请求日志也有标题x-cloud-trace-context: "a54d7110fc59c879b7ae67fb481fb89b/113593995793831;o=1"
。
另外,我可以在跟踪列表控制台中看到正确完成的跟踪。 当我将其部署到 GAE 时,我可以看到关联的日志并在第一个条目下折叠。有什么想法吗?
【问题讨论】:
您可能想看看this,似乎已经有报告表明您正在处理与该线程中的解决方案相同的行为 谢谢。我没有使用@google-cloud/logging-winston
。仅仅添加 traceId 和 http 请求格式并不值得(除非我错过了什么。)而是手动进行的。我的问题是 traceId
s 已附加但 Stackdriver UI 没有折叠它们。
您分享的两个条目具有不同的严重性,这可能与它们没有被组合在一起的原因有关。我知道这不会在 App Engine 中发生,您能否分享那里的日志条目?
【参考方案1】:
使用logName
app
而不是stdout
【讨论】:
以上是关于具有相同跟踪 ID 的 Stackdriver 日志条目未关联的主要内容,如果未能解决你的问题,请参考以下文章
无法跟踪实体类型“***”的实例,因为已经在跟踪另一个与{“ID”}具有相同键值的实例。
Google StackDriver:如何将其他日志与跟踪日志关联(和嵌套)?
来自 Python 应用的 Opencensus Stackdriver 跟踪未出现在 GCP 的跟踪列表中
Stackdriver Strace 使用 python 为一个请求嵌入跟踪