Не удается выполнить трассировку Stackdriver в Google Cloud Run, при этом нормально работает на localhost - PullRequest
1 голос
/ 06 октября 2019

У меня работает сервер узлов в Google Cloud Run. Теперь я хочу включить трассировку стекового драйвера. Когда я запускаю службу локально, я могу найти следы в GCP. Однако когда я запускаю службу как Google Cloud Run, я получаю сообщение об ошибке:

"@google-cloud/trace-agent ERROR TraceWriter#publish: Received error with status code 403 while publishing traces to cloudtrace.googleapis.com: Error: The request is missing a valid API key." 

Я убедился, что учетная запись службы имеет роль агента трассировки.

Первая строка в моемapp.js

require('@google-cloud/trace-agent').start();

работает локально Я использую файл .env, содержащий

GOOGLE_APPLICATION_CREDENTIALS=<path to credentials.json>

Согласно https://github.com/googleapis/cloud-trace-nodejs These values are auto-detected if the application is running on Google Cloud Platform, поэтому у меня нет этих учетных данныхна изображении gcp

1 Ответ

0 голосов
/ 26 октября 2019

Существует две проблемы использования этой библиотеки с Cloud Run:

  1. Несмотря на примечание об автоопределении, Cloud Run является исключением. Это еще не определено автоматически. Сейчас это можно решить с помощью некоторой явной конфигурации.
  2. Поскольку у служб Cloud Run есть ресурсы только до тех пор, пока они не ответят на запрос, данные трассировки в очереди не могут быть отправлены до того, как ресурсы ЦП будут отозваны. , Сейчас это можно решить, настроив агент трассировки на сброс ASAP
const tracer = require('@google-cloud/trace-agent').start({
  serviceContext: {
    service: process.env.K_SERVICE || "unknown-service",
    version: process.env.K_REVISION || "unknown-revision"
  },
  flushDelaySeconds: 1,
});

В быстром обзоре я не смог увидеть, как вызвать сброс трассировки, ноболее короткое время ожидания должно помочь избежать некоторых задержек при отображении данных трассировки в Stackdriver.

...