Мне нужно подключить инструменты мониторинга и трассировки для нашего приложения. Наш основной код находится на Express 4, работающем в Google Cloud Functions. Все запросы, поступающие от переднего прокси-сервера nginx, который обрабатывает имена доменов и красивых маршрутов. К сожалению, агент трассировки отслеживает эти запросы, поступающие на прокси-сервер nginx, без какой-либо дополнительной информации, а этого недостаточно для сбора полезной информации о приложении. Я нашел специальный API драйвера стека, который, насколько я понимаю, может помочь в сборе соответствующих данных во время выполнения, но я не понимаю, как я могу подключить его к приложению Google Cloud Functions. Все остальные примеры говорят, что мы должны расширить наш сценарий запуска, но Google Cloud Functions полностью автоматизирован, здесь нет такой возможности.

1
QuestionAndAnswer 15 Июн 2017 в 14:08

2 ответа

Нашел решение. Я включил require("@google-cloud/trace-agent"); не в начало index.js . Он должен быть включен перед всеми остальными модулями. После этого заработало.

1
QuestionAndAnswer 15 Июн 2017 в 14:42
Могу я узнать, как вы убедились, что это происходит раньше всех остальных модулей?
 – 
Ayyappa
2 Апр 2020 в 23:08
1
@Ayyappa, первая строка вашего основного файла, та, которая будет вызываться из cli. Или вы можете использовать флаг --require на cli на узле, я думаю.
 – 
QuestionAndAnswer
2 Апр 2020 в 23:11

Размещение require ("@ google-cloud / trace-agent") в качестве самого первого импорта у меня не сработало. Я все еще продолжал получать:

ERROR:@google-cloud/trace-agent: express tracing might not work as /var/tmp/worker/node_modules/express/index.js was loaded before the trace agent was initialized.

Однако мне удалось обойти это, вручную исправив экспресс:

var traceApi = require('@google-cloud/trace-agent').get();
require("@google-cloud/trace-agent/src/plugins/plugin-express")[0].patch(
  require(Object.keys(require('module')._cache).find( _ => _.indexOf("express") !== -1)),
  traceApi
);
1
Paweł Badeński 26 Июн 2017 в 17:41
Я также столкнулся с этой ошибкой, когда вернулся к trace-agent в другом проекте. Трасс-агент нам не понадобился так критически для этого проекта, поэтому мы отложили интеграцию. Я проверил старый проект, в котором уже был установлен trace-agent , и новых ошибок не было. На данный момент это хорошо работает в контексте моего первоначального вопроса.
 – 
QuestionAndAnswer
26 Июн 2017 в 17:46
У меня есть одно дополнение к этой ошибке, о которой вы упомянули. Я думаю, что эта ошибка на самом деле относится к экспресс-применению GCF корневого уровня. У меня есть предположение, что определяемый пользователем HTTP GCF обернут в экспресс-приложение, а экспресс-запрос корневого уровня (который не контролируется нами и был определен инженерами Google) передает запрос нашей экспортированной функции, которая затем обрабатывает запросы. В любом случае подключение trace-agent, как это было предложено в документации, работает даже с этой ошибкой.
 – 
QuestionAndAnswer
26 Июл 2017 в 00:15