Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào
tài liệu Apigee X. thông tin
Dấu hiệu
Ứng dụng khách nhận được mã trạng thái HTTP 504 kèm theo thông báo Gateway Timeout để phản hồi các lệnh gọi API.
Phản hồi lỗi này cho biết rằng máy khách không nhận được phản hồi kịp thời từ Apigee Edge hoặc máy chủ phụ trợ trong quá trình thực thi lệnh gọi API.
Thông báo lỗi
Ứng dụng khách nhận được mã phản hồi sau:
HTTP/1.1 504 Gateway Time-out
Khi gọi proxy như vậy bằng cURL hoặc trình duyệt web, bạn có thể gặp lỗi sau:
<!DOCTYPE html> <html> <head> <title>Error</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>An error occurred.</h1> <p>Sorry, the page you are looking for is currently unavailable.<br/> Please try again later.</p> </body> </html>
Nguyên nhân gây ra lỗi hết thời gian chờ là gì?
Đường dẫn thông thường cho một yêu cầu API thông qua nền tảng Edge là Client > Router > Message Processor > Backend Server như minh hoạ trong hình sau:
Tất cả các thành phần trong quy trình thời gian chạy Apigee Edge, bao gồm cả máy khách, Bộ định tuyến, Bộ xử lý thông báo và máy chủ phụ trợ, đều được thiết lập với các giá trị thời gian chờ mặc định phù hợp để đảm bảo rằng các yêu cầu API không mất quá nhiều thời gian để hoàn tất. Nếu bất kỳ thành phần nào trong luồng không nhận được phản hồi từ thành phần nguồn trong khoảng thời gian được chỉ định trong cấu hình thời gian chờ, thì thành phần cụ thể đó sẽ hết thời gian chờ và thường sẽ trả về lỗi 504 Gateway Timeout.
Cẩm nang này mô tả cách khắc phục và giải quyết lỗi 504 xảy ra khi Bộ định tuyến hết thời gian chờ.
Hết thời gian chờ trên bộ định tuyến
Thời gian chờ mặc định được định cấu hình trên Bộ định tuyến trong Apigee Edge là 57 giây. Đây là khoảng thời gian tối đa mà một proxy API có thể thực thi kể từ thời điểm yêu cầu API được nhận trên Edge cho đến khi phản hồi được gửi lại, bao gồm cả phản hồi phụ trợ và tất cả các chính sách được thực thi. Bạn có thể ghi đè thời gian chờ mặc định trên Bộ định tuyến/máy chủ ảo như được giải thích trong phần Định cấu hình thời gian chờ I/O trên Bộ định tuyến.
Các nguyên nhân có thể
Trong Edge, các nguyên nhân thường gặp gây ra lỗi 504 Gateway Timeout do Bộ định tuyến hết thời gian chờ là:
| Nguyên nhân | Mô tả | Hướng dẫn khắc phục sự cố áp dụng cho |
|---|---|---|
| Cấu hình thời gian chờ không chính xác trên Bộ định tuyến | Điều này xảy ra nếu Bộ định tuyến được định cấu hình với khoảng thời gian chờ I/O không chính xác. | Người dùng Edge Public Cloud và Private Cloud |
Các bước chẩn đoán thường gặp
Hãy sử dụng một trong các công cụ/kỹ thuật sau để chẩn đoán lỗi này:
- Giám sát API
- Nhật ký truy cập NGINX
Giám sát API
Cách chẩn đoán lỗi bằng tính năng Giám sát API:
- Chuyển đến trang Phân tích > Giám sát API > Điều tra.
- Lọc các lỗi
5xxvà chọn khung thời gian. - Vẽ Mã trạng thái theo Thời gian.
-
Nhấp vào ô cụ thể có lỗi
504để xem thêm thông tin chi tiết và xem nhật ký về những lỗi này như minh hoạ bên dưới:Ví dụ cho thấy Lỗi 504

- Trong ngăn bên phải, hãy nhấp vào Xem nhật ký.

Trong cửa sổ Nhật ký lưu lượng truy cập, hãy lưu ý những thông tin sau đây đối với một số lỗi
504:- Yêu cầu: Phần này cung cấp phương thức yêu cầu và URI được dùng để thực hiện các lệnh gọi
- Thời gian phản hồi: Thông tin này cho biết tổng thời gian đã trôi qua cho yêu cầu.
Trong ví dụ trên,
- Yêu cầu đang trỏ đến
GET /test-timeout. - Thời gian phản hồi là
57.001giây. Điều này cho thấy Bộ định tuyến đã hết thời gian chờ trước khi Bộ xử lý thông báo có thể phản hồi vì giá trị này rất gần với thời gian chờ I/O mặc định được đặt trên Bộ định tuyến, tức là 57 giây.
Bạn cũng có thể nhận tất cả nhật ký bằng cách sử dụng API GET logs (Nhận nhật ký) của API Giám sát. Ví dụ: bằng cách truy vấn nhật ký cho
org,env,timeRangevàstatus, bạn có thể tải xuống tất cả nhật ký cho các giao dịch mà máy khách đã hết thời gian chờ.Vì API Monitoring đặt proxy thành
-(not set) cho các lỗi504này, nên bạn có thể sử dụng API (Logs API) để lấy proxy được liên kết cho máy chủ ảo và đường dẫn.For example :
curl "https://apimonitoring.enterprise.apigee.com/logs/apiproxies?org=ORG&env=ENV&select=https
- Xem xét Thời gian phản hồi để biết thêm các lỗi
504và kiểm tra xem Thời gian phản hồi có nhất quán hay không (giá trị thời gian chờ I/O được đặt trên Bộ định tuyến là 57 giây) trên tất cả các lỗi504.
Nhật ký truy cập NGINX
Cách chẩn đoán lỗi bằng nhật ký truy cập NGINX:
- Kiểm tra nhật ký truy cập NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log - Tìm kiếm để xem có
504Lỗi nào trong một khoảng thời gian cụ thể hay không (nếu vấn đề xảy ra trong quá khứ) hoặc xem có yêu cầu nào vẫn không thành công với504hay không. - Xin lưu ý những thông tin sau đối với một số lỗi
504:- Thời gian phản hồi
- URI yêu cầu

Trong ví dụ này, chúng ta thấy những thông tin sau:
-
Thời gian yêu cầu:
57.001giây. Điều này cho biết Bộ định tuyến đã hết thời gian chờ sau 57,001 giây. - Yêu cầu:
GET /test-timeout - Tên thay thế của máy chủ lưu trữ:
myorg-test.apigee.net
-
Kiểm tra xem Thời gian yêu cầu có giống với thời gian chờ I/O được định cấu hình trên Bộ định tuyến/máy chủ ảo hay không. Nếu có, thì tức là Bộ định tuyến đã hết thời gian chờ trước khi Bộ xử lý thông báo không phản hồi trong khoảng thời gian này.
Trong mục nhập Nhật ký truy cập NGINX ví dụ được minh hoạ ở trên, Thời gian yêu cầu là
57.001giây, rất gần với thời gian chờ I/O mặc định được đặt trên Bộ định tuyến. Điều này cho thấy rõ rằng Bộ định tuyến đã hết thời gian chờ trước khi Bộ xử lý thông báo có thể phản hồi. - Xác định API Proxy mà yêu cầu được thực hiện bằng cách sử dụng đường dẫn cơ sở trong trường Request (Yêu cầu).
Nguyên nhân: Cấu hình thời gian chờ không chính xác trên Bộ định tuyến
Chẩn đoán
- Xác định xem lỗi
504có phải do Bộ định tuyến đã hết thời gian chờ trước khi Trình xử lý thông báo có thể phản hồi hay không. Bạn có thể thực hiện việc này bằng cách kiểm tra xem Thời gian phản hồi trong phần Giám sát API/Thời gian yêu cầu trong Bộ định tuyến (cả hai trường này đều biểu thị cùng một thông tin,nhưng có tên gọi khác nhau) có giống với thời gian chờ I/O được định cấu hình trên Bộ định tuyến/máy chủ ảo hay không và các trường Nguồn lỗi, Lỗi Proxy và Mã lỗi được đặt thành-bằng cách sử dụng nhật ký Giám sát API hoặc nhật ký Truy cập NGINX như được giải thích trong phần Các bước chẩn đoán thường gặp. -
Kiểm tra xem giá trị thời gian chờ I/O được định cấu hình trên Bộ định tuyến hoặc máy chủ ảo cụ thể có thấp hơn so với giá trị được định cấu hình trên Trình xử lý thông báo hoặc API Proxy cụ thể hay không.
Bạn có thể thực hiện việc này bằng cách làm theo các bước trong phần này.
Xác minh thời gian chờ I/O trên máy chủ ảo
Giao diện người dùng Edge
Để xác minh thời gian chờ của máy chủ ảo bằng giao diện người dùng Edge, hãy làm như sau:
- Đăng nhập vào giao diện người dùng Edge.
- Chuyển đến mục Quản trị > Máy chủ ảo.
- Chọn một Môi trường cụ thể mà bạn đang gặp phải vấn đề hết thời gian chờ.
- Chọn máy chủ ảo cụ thể mà bạn muốn xác minh giá trị thời gian chờ I/O.
- Trong mục Properties (Thuộc tính), hãy xem giá trị Proxy Read Timeout (Thời gian chờ đọc proxy) tính bằng giây.

Trong ví dụ trên, Proxy Read Timeout (Thời gian chờ đọc của proxy) được định cấu hình với giá trị
120. Điều này có nghĩa là thời gian chờ I/O được định cấu hình trên máy chủ ảo này là 120 giây.
API quản lý
Bạn cũng có thể xác minh Proxy Read Timeout bằng các API quản lý sau:
-
Thực thi API Lấy máy chủ ảo để lấy cấu hình
virtualhostnhư minh hoạ bên dưới:Người dùng Đám mây công khai
curl -v -X GET https://api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/virtualhosts/VIRTUALHOST_NAME -u USERNAME
Người dùng Đám mây riêng tư
curl -v -X GET http://MANAGEMENT_SERVER_HOST:PORT#/v1/organizations/ORGANIZATION_NAME/environments/v/virtualhosts/VIRTUALHOST_NAME -u USERNAME
Trong trường hợp:
ORGANIZATION_NAME là tên của tổ chức
ENVIRONMENT_NAME là tên của môi trường
VIRTUALHOST_NAME là tên của máy chủ ảo
-
Kiểm tra giá trị được thiết lập cho thuộc tính
proxy_read_timeoutĐịnh nghĩa máy chủ ảo mẫu
{ "hostAliases": [ "api.myCompany,com", ], "interfaces": [], "listenOptions": [], "name": "secure", "port": "443", "retryOptions": [], "properties": { "property": [ { "name": "proxy_read_timeout", "value": "120" } ] }, "sSLInfo": { "ciphers": [], "clientAuthEnabled": "false", "enabled": "true", "ignoreValidationErrors": false, "keyAlias": "myCompanyKeyAlias", "keyStore": "ref://myCompanyKeystoreref", "protocols": [] }, "useBuiltInFreeTrialCert": false }Trong ví dụ trên,
proxy_read_timeoutđược thiết lập với giá trị120. Điều này có nghĩa là thời gian chờ I/O được định cấu hình trên máy chủ lưu trữ ảo này là 120 giây.
Xác minh thời gian chờ I/O trên tệp router.properties
- Đăng nhập vào máy Router.
- Tìm kiếm thuộc tính
proxy_read_timeouttrong thư mục/opt/nginx/conf.dvà kiểm tra xem thuộc tính đó đã được đặt thành giá trị mới hay chưa như sau:grep -ri "proxy_read_timeout" /opt/nginx/conf.d
-
Kiểm tra giá trị được đặt cho thuộc tính
proxy_read_timeouttrong tệp cấu hình máy chủ ảo cụ thể.Kết quả mẫu từ lệnh grep
/opt/nginx/conf.d/0-default.conf:proxy_read_timeout 57; /opt/nginx/conf.d/0-edge-health.conf:proxy_read_timeout 1s;
Trong ví dụ về đầu ra ở trên, hãy lưu ý rằng thuộc tính
proxy_read_timeoutđã được đặt thành giá trị mới57trong0-default.conf. Đây là tệp cấu hình cho máy chủ ảo mặc định. Điều này cho biết thời gian chờ I/O được định cấu hình thành 57 giây trên Bộ định tuyến cho máy chủ ảo mặc định. Nếu có nhiều máy chủ ảo, bạn sẽ thấy thông tin này cho từng máy chủ. Lấy giá trị củaproxy_read_timeoutcho máy chủ ảo cụ thể mà bạn đã dùng để thực hiện các lệnh gọi API không thành công với lỗi504.
Xác minh thời gian chờ I/O trong proxy API
Bạn có thể xem thời gian chờ I/O trong những trường hợp sau:
- Điểm cuối mục tiêu của proxy API
- Chính sách ServiceCallout của proxy API
Xem thời gian chờ I/O trong điểm cuối mục tiêu của proxy API
- Trong giao diện người dùng Edge, hãy chọn một API proxy cụ thể mà bạn muốn xem giá trị thời gian chờ I/O.
- Chọn điểm cuối mục tiêu cụ thể mà bạn muốn kiểm tra.
- Xem thuộc tính
io.timeout.milliscó giá trị phù hợp trong phần tử<HTTPTargetConnection>trong cấu hìnhTargetEndpoint.Ví dụ: thời gian chờ I/O trong mã sau đây được đặt thành 120 giây:
<Properties> <Property name="io.timeout.millis">120000</Property> </Properties>
Xem thời gian chờ I/O trong chính sách ServiceCallout của API proxy
- Trong giao diện người dùng Edge, hãy chọn một API proxy cụ thể mà bạn muốn xem giá trị thời gian chờ I/O mới cho chính sách ServiceCallout.
- Chọn chính sách ServiceCallout cụ thể mà bạn muốn kiểm tra.
-
Xem phần tử
<Timeout>có giá trị phù hợp trong cấu hình<ServiceCallout>.Ví dụ: thời gian chờ I/O của mã sau đây sẽ là 120 giây:
<Timeout>120000</Timeout>
Xác minh thời gian chờ I/O trên Trình xử lý thông báo
- Đăng nhập vào máy xử lý tin nhắn.
-
Tìm kiếm tài sản
HTTPTransport.io.timeout.millistrong thư mục/opt/apigee/edge-message-processor/confbằng lệnh sau:grep -ri "HTTPTransport.io.timeout.millis" /opt/apigee/edge-message-processor/conf
Đầu ra mẫu
/opt/apigee/edge-message-processor/conf/http.properties:HTTPTransport.io.timeout.millis=55000
- Trong đầu ra mẫu ở trên, hãy lưu ý rằng thuộc tính
HTTPTransport.io.timeout.millisđã được đặt với giá trị55000tronghttp.properties. Điều này cho biết bạn đã định cấu hình thành công thời gian chờ I/O thành 55 giây trên Trình xử lý thông báo.
Sau khi xác định thời gian chờ được định cấu hình trên Bộ định tuyến và Trình xử lý thông báo, hãy xác minh xem Bộ định tuyến/máy chủ ảo có được định cấu hình với giá trị thời gian chờ thấp hơn so với giá trị trên Trình xử lý thông báo/API proxy hay không.
Ghi lại các giá trị được đặt trên tất cả các lớp như trong bảng bên dưới:
| Thời gian chờ trên bộ định tuyến (giây) | Hết thời gian chờ trên máy chủ ảo (giây) | Hết thời gian chờ trên Trình xử lý thông báo (giây) | Thời gian chờ trên proxy API (giây) |
|---|---|---|---|
| 57 | - | 55 | 120 |
Trong ví dụ này,
- Giá trị mặc định là 57 giây được định cấu hình trên Bộ định tuyến.
- Giá trị thời gian chờ không được đặt trên máy chủ ảo cụ thể. Điều này có nghĩa là nó sẽ sử dụng giá trị mặc định là 57 giây được định cấu hình trên chính Bộ định tuyến.
- Trên Trình xử lý thông báo, giá trị mặc định là 55 giây.
- Tuy nhiên, trên API Proxy cụ thể, giá trị 120 giây được định cấu hình.
Xin lưu ý rằng giá trị thời gian chờ cao hơn chỉ được định cấu hình trên API proxy, nhưng Router vẫn được định cấu hình với 57 giây. Do đó, Bộ định tuyến hết thời gian chờ sau 57 giây trong khi Trình xử lý thông báo/phần phụ trợ vẫn đang xử lý yêu cầu của bạn. Điều này khiến Router phản hồi lại bằng lỗi 504 Gateway Timeout cho ứng dụng khách.
Độ phân giải
Thực hiện các bước sau để định cấu hình thời gian chờ I/O thích hợp trên Bộ định tuyến và Bộ xử lý thông báo để giải quyết vấn đề này.
- Tham khảo Các phương pháp hay nhất để định cấu hình thời gian chờ I/O để hiểu rõ những giá trị thời gian chờ cần đặt trên các thành phần khác nhau liên quan đến quy trình yêu cầu API thông qua Apigee Edge.
- Trong ví dụ trên, nếu bạn xác định rằng cần đặt giá trị thời gian chờ cao hơn vì máy chủ phụ trợ cần nhiều thời gian hơn và bạn đã tăng giá trị thời gian chờ của Trình xử lý thông báo lên 120 giây, thì hãy đặt giá trị thời gian chờ cao hơn. Ví dụ:
123 secondstrên Bộ định tuyến. Để tránh ảnh hưởng đến tất cả các API Proxy do giá trị thời gian chờ mới, hãy chỉ đặt giá trị của123 secondstrên máy chủ ảo cụ thể được dùng trong API Proxy cụ thể. - Làm theo hướng dẫn trong phần Định cấu hình thời gian chờ I/O trên Bộ định tuyến để đặt thời gian chờ trên máy chủ lưu trữ ảo.