Записи журнала Stackdriver с тем же идентификатором трассировки не связаны

У меня есть проект 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, я вижу, что журналы связаны и свернуты под первой записью. Любые идеи?


person xiangxin    schedule 17.12.2019    source источник
comment
Вы можете взглянуть на это, похоже, уже быть отчетом о том же поведении, которое вы получаете вместе с решением в этом потоке   -  person rsalinas    schedule 18.12.2019
comment
Спасибо. Я не использовал @google-cloud/logging-winston. На самом деле не стоит просто добавлять traceId и форматирование HTTP-запроса (если я что-то не пропустил). Вместо этого сделал это вручную. Проблема для меня в том, что traceId были прикреплены, но пользовательский интерфейс Stackdriver не свернул их.   -  person xiangxin    schedule 23.12.2019
comment
Две записи, которыми вы поделились, имеют разную степень серьезности, и это может иметь какое-то отношение к причине того, что они не сгруппированы вместе. Я понимаю, что в App Engine этого не происходит, не могли бы вы поделиться записью журналов оттуда?   -  person rsalinas    schedule 27.12.2019


Ответы (1)


Используйте logName app вместо stdout

person Nikita Davydov    schedule 26.10.2020