Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X. информация
Симптом
Клиентское приложение получает код состояния 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: Клиент -> Маршрутизатор -> Обработчик сообщений -> Внутренний сервер, как показано на рисунке ниже:
Клиентское приложение, маршрутизаторы и процессоры сообщений настраиваются с подходящими значениями таймаута. Apigee Edge ожидает ответа на каждый запрос API в течение периода времени, основанного на значениях тайм-аута. Если ответ не получен в течение указанного периода времени, возвращается ответ 504 Gateway Timeout.
Возможные причины
В Apigee Edge типичной причиной ответа 504 Gateway Timeout от внутреннего сервера является:
Причина | Описание | Инструкции по устранению неполадок для |
---|---|---|
Внутренний сервер отвечает тайм-аутом шлюза 504 | Внутренний сервер истекает по тайм-ауту и возвращает процессору сообщений ответ 504 Gateway Timeout. | Пользователи Edge частного и публичного облака |
Внутренний сервер отвечает тайм-аутом шлюза 504
Внутренний сервер может ответить кодом ответа HTTP 504 Gateway Timeout.
Диагностика
В этом разделе объясняется, как правильно диагностировать тайм-аут шлюза 504. Перечислены процедуры для пользователей частного и публичного облака.
Процедура № 1. Использование трассировки (пользователи частного и общедоступного облака)
- Включите трассировку в пользовательском интерфейсе Apigee для затронутого API.
- Отправьте запрос на внутренний сервер.
- Если при неудачном запросе API отображается ответ 504 от внутреннего сервера в Trace, то причиной тайм-аута шлюза 504 является внутренний сервер.
- Чтобы определить время ответа, щелкните этап «Ответ, полученный от целевого сервера» в разделе «Отслеживание». В показанном примере прошедшее время составляет 60004 мс:
В разделе «Сведения о этапе» представлена дополнительная информация:
- Он выделяет ответ 504 Gateway Timeout, полученный от внутреннего сервера.
- В разделе «Содержимое ответа» отображается полное тело ответа внутреннего сервера. Как отмечалось ранее, формат и содержимое полезных данных ответа могут различаться в зависимости от реализации внутреннего сервера.
- В разделе «Заголовок ответа» > «Сервер» может быть указано место происхождения ответа.
- Чтобы просмотреть данные Analytics и подтвердить диагноз, нажмите на этап «Записанные данные аналитики» в Trace, как показано на рисунке ниже:
В разделе «Заголовки ответов» сведений о этапе отображаются значения
X-Apigee-fault-code
иX-Apigee-fault-source
, как показано на рисунке ниже:Если эти поля содержат значения, показанные в таблице ниже, ответ об ошибке 504 исходит от внутреннего сервера:
Заголовки ответов Ценить X-Apigee-источник-ошибки цель X-Apigee-код неисправности messages.adaptors.http.flow.ErrorResponseCode - Проверьте цепочку прокси . Выполните следующие действия, чтобы определить, вызывает ли внутренний сервер другой прокси-сервер в Apigee:
- Вернитесь к этапу «Запрос отправлен на целевой сервер» и нажмите кнопку «Показать завиток» , чтобы просмотреть псевдоним хоста внутреннего сервера.
- Если псевдоним хоста внутреннего сервера указывает на псевдоним виртуального хоста, то цепочка прокси-серверов установлена. Повторите описанные выше шаги для каждого связанного прокси-сервера, чтобы диагностировать причину ответа об ошибке 504 Gateway Timeout. 504 Тайм-ауты шлюза, возникающие в связанных прокси-серверах на других этапах цикла запроса/ответа, можно диагностировать с помощью этого сборника сценариев .
- Если псевдоним хоста внутреннего сервера указывает на внутренний сервер, перейдите к разделу Решение .
Процедура № 2. Непосредственный вызов API внутреннего сервера (пользователи публичного и частного облака).
Вызовите внутренний сервер напрямую, чтобы подтвердить то же поведение ответа 504 Gateway Timeout, которое наблюдалось при выполнении запроса через Apigee Edge.
- Убедитесь, что у вас есть все необходимые заголовки, параметры запроса и учетные данные, необходимые для передачи на внутренний сервер как часть запроса.
- Если серверная служба общедоступна, вы можете использовать команду
curl
, Postman или любой другой клиент REST и напрямую вызвать API внутреннего сервера. - Если внутренний сервер доступен только из процессоров сообщений, используйте команду
curl
, Postman или любой другой клиент REST, чтобы вызвать API внутреннего сервера непосредственно из процессора сообщений. - Если серверная служба возвращает 504 Ответ на тайм-аут шлюза, перейдите к разделу «Решение» .
Процедура №3. Проверьте журналы доступа NGINX (только для пользователей частного облака)
Журналы доступа NGINX могут помочь определить, был ли ответ об ошибке 504 отправлен внутренним сервером. Это особенно полезно, если проблема возникла в прошлом, носит периодический характер или не может быть зафиксирована в Trace. Выполните следующие действия, чтобы проверить журналы доступа NGINX:
- Просмотрите журналы доступа NGINX с помощью этой команды:
/opt/apigee/var/log/edge-router/nginx/ ORG ~ENV.PORT# _access_log
- Проверьте наличие ответов об ошибках 504 для затронутого прокси-сервера API. Вы можете проверить определенный период времени, возникала ли проблема в прошлом, или определить, выполняются ли запросы по-прежнему с ошибкой 504.
- Если есть какие-либо ответы об ошибках 504, определите, исходит ли ответ об ошибке от внутреннего сервера.
- Просмотрите затронутый прокси-сервер API, чтобы проверить цепочку прокси-серверов , т. е. внутренний сервер/целевая конечная точка вызывает другой прокси-сервер в Apigee. Если прокси-сервер API использует цепочку прокси-серверов , повторите описанные выше шаги для каждого связанного прокси-сервера, чтобы диагностировать причину ответа об ошибке 504 Gateway Timeout. 504 Тайм-ауты шлюза, возникающие в связанных прокси-серверах на других этапах, можно диагностировать с помощью этого сборника правил .
- Если цепочки прокси-серверов нет, а ответ об ошибке 504 исходит от внутреннего сервера, перейдите к разделу Разрешение .
На рисунке ниже показан пример записи журнала NGINX, показывающий ответ об ошибке 504, вызванный целевым сервером:
Если поля X-Apigee-fault-source
и X-Apigee-fault-code
содержат значения, показанные в таблице ниже, ответ 504 исходит от внутреннего сервера:
Заголовки ответов | Ценить |
---|---|
X-Apigee-источник-ошибки | цель |
X-Apigee-код неисправности | messages.adaptors.http.flow.ErrorResponseCode |
Процедура № 4. Использование мониторинга API (только для пользователей публичного облака)
Мониторинг API позволяет быстро изолировать проблемные области для диагностики ошибок, проблем с производительностью и задержкой, а также их источников, таких как приложения для разработчиков, прокси-серверы API, целевые серверные части или платформа API.
Ознакомьтесь с примером сценария , который демонстрирует, как устранять проблемы 5xx с вашими API с помощью мониторинга API. Например, настройте оповещение, чтобы уведомлять администраторов, когда количество кодов состояния 504 превышает определенный порог.
Разрешение
Используя диагностические процедуры, описанные выше, вы можете вместе с командой внутреннего сервера устранить проблему на внутреннем сервере. Это может включать настройку тайм-аутов на внутренних серверах или тайм-аутов в любых балансировщиках нагрузки перед целевыми серверами.
Сбор диагностической информации
Если проблема не устранена, поделитесь следующей диагностической информацией со службой поддержки Apigee .
Если вы являетесь пользователем Public Cloud, предоставьте следующую информацию:
- Название организации
- Имя среды
- Имя 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