У меня есть проект NodeJS, размещенный на GKE, с помощью агента трассировки и Stackdriver. ведение журнала включено. Проект входит в stdout
, используя winston
следующим образом:
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, я вижу, что журналы связаны и свернуты под первой записью. Любые идеи?
@google-cloud/logging-winston
. На самом деле не стоит просто добавлять traceId и форматирование HTTP-запроса (если я что-то не пропустил). Вместо этого сделал это вручную. Проблема для меня в том, чтоtraceId
были прикреплены, но пользовательский интерфейс Stackdriver не свернул их. - person xiangxin   schedule 23.12.2019