Ошибка 504: превышено время ожидания шлюза от внутреннего сервера

Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X.
Информация

Symptom

Клиентское приложение получает код статуса HTTP 504 с сообщением "Время ожидания шлюза истекло" в ответ на вызовы API.

Этот ответ с ошибкой означает, что клиент не получил своевременный ответ от Apigee Edge или внутреннего сервера во время выполнения вызова API.

Сообщение об ошибке

Клиентское приложение получает следующий код ответа:

HTTP/1.1 504 Gateway Timeout

После этого кода может появиться сообщение об ошибке, похожее на приведенное ниже:

<html>
<head><title>504 Gateway Timeout</title></head>
<body bgcolor="white">
<center><h1>504 Gateway Timeout</h1></center>
</body>
</html>

Что вызывает тайм-ауты шлюза?

Обычный путь запроса API, выполненного через Apigee Edge, выглядит так: Клиент > Маршрутизатор > Обработчик сообщений > Внутренний сервер, как показано на рисунке ниже.

Путь запроса к API

В клиентском приложении, маршрутизаторах и процессорах сообщений заданы подходящие значения времени ожидания. Apigee Edge ожидает ответа на каждый запрос к API в течение периода времени, заданного значениями времени ожидания. Если ответ не получен в течение указанного периода времени, возвращается ответ "504 Gateway Timeout" (Время ожидания шлюза истекло).

Возможные причины

В Apigee Edge типичная причина ответа "504 Gateway Timeout" от внутреннего сервера:

Cause Описание Инструкции по устранению неполадок
Серверная часть отвечает ошибкой 504 Gateway Timeout Бэкенд-сервер превышает время ожидания и возвращает Message Processor ответ "504 Gateway Timeout" (Шлюз не отвечает). Пользователи частного и общедоступного облака Edge

Внутренний сервер отвечает с ошибкой 504 Gateway Timeout

Внутренний сервер может ответить кодом HTTP 504 Gateway Timeout (Тайм-аут шлюза).

диагностика;

В этом разделе рассказывается, как правильно диагностировать ошибку 504 Gateway Timeout. Ниже приведены процедуры для пользователей частного и общедоступного облака.

Процедура 1. Использование Trace (для пользователей частного и общедоступного облака)

  1. Включите трассировку в интерфейсе Apigee для нужного API.
  2. Отправьте запрос на серверную часть.
  3. Если в Trace для неудачного запроса к API от внутреннего сервера получен ответ 504, то причиной ошибки "Превышено время ожидания шлюза" является внутренний сервер.
  4. Чтобы определить время ответа, нажмите на этап Response received from target server (Ответ получен от целевого сервера) в разделе Trace (Трассировка). В приведенном ниже примере прошедшее время составляет 60004 мс:

    данные о фазах из интерфейса;

    В разделе "Сведения об этапе" приведена дополнительная информация:

    • На нем выделен ответ 504 Gateway Timeout, полученный от внутреннего сервера.
    • В разделе Response Content (Содержимое ответа) показано полное тело ответа от внутреннего сервера. Как уже отмечалось, формат и содержимое полезной нагрузки ответа могут различаться в зависимости от реализации внутреннего сервера.
    • В разделе Response Header > Server (Заголовок ответа > Сервер) может быть указано, откуда пришел ответ.
  5. Чтобы посмотреть данные Аналитики и подтвердить диагноз, нажмите на этап Записанные данные Аналитики в разделе "Трассировка", как показано на рисунке ниже.

    данные аналитики из трассировки;

    В разделе Заголовки ответа на странице "Сведения об этапе" показаны значения X-Apigee-fault-code и X-Apigee-fault-source, как на рисунке ниже.

    подробные сведения об этапе анализа из интерфейса;

    Если в этих полях указаны значения, приведенные в таблице ниже, то ответ с ошибкой 504 был получен от внутреннего сервера:

    Заголовки ответов Значение
    X-Apigee-fault-source target
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
  6. Проверьте, не используется ли цепочка прокси-серверов. Чтобы определить, вызывает ли серверный сервис другой прокси-сервер в Apigee, выполните следующие действия:
    1. Вернитесь к этапу Запрос отправлен на целевой сервер и нажмите кнопку Показать Curl, чтобы посмотреть псевдоним хоста серверной части.
    2. Если псевдоним хоста внутреннего сервера указывает на псевдоним виртуального хоста, то используется цепочка прокси. Повторите описанные выше действия для каждого прокси-сервера в цепочке, чтобы определить причину ошибки "504 Gateway Timeout". Ошибки 504, связанные с истечением времени ожидания шлюза, которые возникают в цепочке прокси-серверов на других этапах цикла запроса/ответа, можно диагностировать с помощью этого руководства.
    3. Если псевдоним хоста внутреннего сервера указывает на внутренний сервер, перейдите к разделу Решение.

Способ 2. Вызов API внутреннего сервера напрямую (для пользователей общедоступного и частного облака)

Вызовите серверную часть напрямую, чтобы убедиться, что при отправке запроса через Apigee Edge возникает та же ошибка 504 Gateway Timeout.

  1. Убедитесь, что у вас есть все необходимые заголовки, параметры запроса и учетные данные, которые нужно передать на серверную часть в составе запроса.
  2. Если бэкенд-служба общедоступна, вы можете использовать команду curl, Postman или любой другой клиент REST и напрямую вызвать API бэкенд-сервера.
  3. Если серверная часть доступна только из Message Processors, используйте команду curl, Postman или любой другой клиент REST, чтобы вызвать API серверной части непосредственно из Message Processor.
  4. Если бэкенд-служба возвращает ответ 504 Gateway Timeout (Время ожидания ответа от шлюза истекло), перейдите к разделу Решение.

Процедура 3. Проверьте журналы доступа NGINX (только для пользователей частного облака)

Журналы доступа NGINX могут помочь определить, был ли ответ с ошибкой 504 отправлен внутренним сервером. Это особенно полезно, если проблема возникла в прошлом, носит непостоянный характер или не может быть зафиксирована в трассировке. Чтобы проверить журналы доступа NGINX, выполните следующие действия:

  1. Посмотреть журналы доступа NGINX можно с помощью следующей команды:
    /opt/apigee/var/log/edge-router/nginx/ ORG ~ENV.PORT# _access_log 
  2. Проверьте, есть ли в ответе затронутого прокси-сервера API ошибка 504. Вы можете проверить определенный период времени, если проблема возникла в прошлом, или определить, по-прежнему ли запросы завершаются с ошибкой 504.
  3. Если вы получили ответ с ошибкой 504, определите, исходит ли он от внутреннего сервера.
  4. На рисунке ниже показан пример записи в журнале NGINX, в которой указан ответ с ошибкой 504, вызванной целевым сервером:

    примеры журналов nginx;

    Если поля X-Apigee-fault-source и X-Apigee-fault-code содержат значения, указанные в таблице ниже, ответ 504 исходит от внутреннего сервера:

    Заголовки ответов Значение
    X-Apigee-fault-source target
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
  5. Проверьте затронутый прокси-сервер API на наличие цепочки прокси, то есть на то, что бэкенд-сервер или целевая конечная точка вызывает другой прокси-сервер в Apigee. Если прокси-сервер API использует цепочку прокси , повторите описанные выше действия для каждого прокси в цепочке, чтобы диагностировать причину ошибки 504 Gateway Timeout. Ошибки 504, возникающие в цепочке прокси-серверов на других этапах, можно диагностировать с помощью этого руководства.
  6. Если цепочка прокси-серверов отсутствует и ответ с ошибкой 504 получен от внутреннего сервера, перейдите к разделу Решение.

Процедура 4. Использование мониторинга API (только для пользователей общедоступного облака)

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

Пошаговое руководство по устранению ошибок 5xx в API с помощью API Monitoring. Например, можно настроить оповещение для администраторов, которое будет отправляться, когда количество кодов статуса 504 превысит определенный порог.

.

Разрешение

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

Как получить диагностическую информацию

Если проблема не исчезнет, предоставьте службе поддержки Apigee следующую диагностическую информацию:

Если вы используете общедоступное облако, предоставьте следующую информацию:

  • Название организации
  • Название среды
  • Название прокси API
  • Полная curl команда, использованная для воспроизведения ошибки 504
  • Файл трассировки с запросами API, которые получают ответ об ошибке 504 Gateway Timeout

Если вы используете частное облако, предоставьте следующую информацию:

  • Полное сообщение об ошибке, которое появляется при неудачных запросах.
  • Название среды
  • Пакет прокси API
  • Файл трассировки с запросами API, для которых получен ответ с ошибкой 504 Gateway Timeout (Время ожидания ответа от шлюза истекло)
  • Журналы доступа NGINX
    /opt/apigee/var/log/edge-router/nginx/ ORG ~ENV.PORT# _access_log 
  • Журналы процессора сообщений
    /opt/apigee/var/log/edge-message-processor/logs/system.log