Ошибка шлюза Google App Engine Nodejs Bad

У нас есть проект, размещенный на Google App Engine в гибкой среде Node.js для сбора данных с датчиков.

Мы получаем около 10 POST /collect запросов в секунду, которые могут быть самого разного размера, но в 99% случаев это очень маленькие запросы (~100B до ~12MB).

Глядя на собранные данные, мы видим, что время от времени (например, 5-6 раз в день) мы пропускаем какие-то данные.

Во время инвестирования мы поставили прокси (все еще на App Engine), назовем его PROXY перед нашим сервером, назовем его SERVER, чтобы можно было отслеживать полный поток и увидеть все ошибки и проблемы, с которыми мы могли столкнуться.

Мы заметили, что при отсутствии данных PROXY отправил данные на SERVER и получил обратно 502 Bad Gateway, и это отображается в PROXY. логи (в прокси печатаем когда приходит запрос на прокси и когда сервер отвечает на прокси):

07:11:15.000 SENSOR_ID response: 502 Bad Gateway
07:11:15.000 SENSOR_ID request

Затем мы просмотрели журналы SERVER и обнаружили, что с той же отметкой времени мы получаем следующее:

07:11:15.000 [error] 32#32: *84209 upstream prematurely closed connection while reading response header from upstream, client: 130.211.1.151, server: , request: "POST /collect HTTP/1.1", upstream: "http://172.17.0.1:8080/collect", host: "ourprojectid.appspot.com"

Наше первое предположение заключалось в том, что большие запросы с большим количеством данных по какой-либо причине вызвали сбой сервера, но это не так, и вместо этого нет корреляции между этими событиями сбоя и размером запроса.

Стек, который мы используем: экземпляры App Engine (работающие на nginx) и гибкая среда Nodejs.

Мы понятия не имеем, где проводить дальнейшее расследование.


person smellyarmpits    schedule 20.09.2017    source источник
comment
На ваш вопрос может быть ответ здесь stackoverflow.com/questions/38012797/   -  person Pig and Cat    schedule 20.09.2017
comment
Привет, спасибо за ваш ответ. Хотя моя проблема в другом. Я вижу ошибки в журналах Google App Engine. Кроме того, в этих шагах говорится об экземплярах Compute Engine, но я не вижу ни одного экземпляра Compute Engine в своем проекте. Я вижу экземпляры только в App Engine. У вас есть другие подсказки?   -  person smellyarmpits    schedule 20.09.2017
comment
@MarcoGalassi — вы можете подключиться по SSH к гибкой виртуальной машине GAE из облачной консоли. App Engine -> вкладка «Экземпляры» -> SSH рядом с виртуальной машиной.   -  person KGo    schedule 20.09.2017
comment
Хорошо, я сделал это, и мне удалось успешно прочитать журналы из экземпляра виртуальной машины с помощью SSH. Но журналы, которые я вижу там, просто напоминают журналы, которые я вижу в Google Stackdriver, фильтрующем с помощью nginx.errors.   -  person smellyarmpits    schedule 21.09.2017
comment
Гибкая версия App Engine имеет ограничение 32 МБ на размер запросов. Это вполне может быть тем, с чем вы столкнулись. Вы тестировали повторную отправку запросов определенного размера, чтобы увидеть, начинают ли они терпеть неудачу после определенного порога?   -  person Yannick MG    schedule 06.10.2017
comment
@YannickMG спасибо за ваш ответ, но ошибки обычно соответствуют пакетам размером всего в несколько байтов. Кроме того, в прошлом мы никогда не видели ничего похожего на 32-мегабайтные запросы. Самый большой, который мы когда-либо видели, составляет 12 МБ.   -  person smellyarmpits    schedule 10.10.2017
comment
Мой плохой, неправильно прочитал ваш пост. Я верю этому сообщению, чтобы другие читали ваш вопрос. в группах Google есть правильный ответ.   -  person Yannick MG    schedule 11.10.2017