Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến tài liệu về
Apigee X. thông tin
Triệu chứng
Ứng dụng sẽ nhận được mã trạng thái HTTP 504
kèm theo thông báo Gateway Timeout
để phản hồi lệnh gọi API.
Phản hồi lỗi này cho biết ứng dụng không nhận được phản hồi kịp thời của 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 đây:
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 nào gây ra thời gian chờ?
Đường dẫn điển hình cho một yêu cầu API thông qua nền tảng Edge là Ứng dụng > Bộ định tuyến > Bộ xử lý tin nhắn > Máy chủ phụ trợ như trong hình sau:
Tất cả thành phần trong quy trình thời gian chạy Apigee Edge, bao gồm cả ứng dụng khách, Bộ định tuyến, Bộ xử lý tin nhắn và máy chủ phụ trợ đều được thiết lập với giá trị thời gian chờ mặc định phù hợp để đảm bảo 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 tải lê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 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ừ khi nhận được yêu cầu API trên Edge cho đến khi phản hồi được gửi trả lại, bao gồm cả phản hồi trong phần phụ trợ và mọi 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ư giải thích trong bài viết Đị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 điển hình gây ra lỗi 504 Gateway Timeout
do thời gian chờ của Bộ định tuyến là:
Nguyên nhân | Nội dung mô tả | Hướng dẫn khắc phục sự cố áp dụng cho |
---|---|---|
Cấu hình hết 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 và Private Cloud |
Các bước chẩn đoán phổ biến
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
5xx
lỗi và chọn khung thời gian. - Vẽ Mã trạng thái dựa trên Thời gian.
-
Nhấp vào ô cụ thể hiển thị các lỗi
504
để xem thêm thông tin chi tiết và xem nhật ký về các lỗi này như minh hoạ dưới đây:Ví dụ về lỗi 504
- Trong ngăn bên phải, hãy nhấp vào Xem nhật ký.
Trong cửa sổ Traffic Logs (Nhật ký lưu lượng), hãy lưu ý thông tin chi tiết sau đây về một số lỗi
504
:- Yêu cầu: Mục này cung cấp phương thức yêu cầu và URI dùng để thực hiện lệnh gọi
- Thời gian phản hồi: Chỉ số này cho biết tổng thời gian đã trôi qua cho yêu cầu.
Trong ví dụ trên,
- Request (Yêu cầu) đang trỏ đến
GET /test-timeout
. - Thời gian phản hồi là
57.001
giây. Điều này cho biết 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 lại vì giá trị 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 nhật ký của dịch vụ Giám sát API. Ví dụ: bằng cách truy vấn nhật ký cho
org
,env
,timeRange
vàstatus
, bạn có thể tải mọi nhật ký của những giao dịch mà ứng dụng đã hết thời gian chờ xuống.Vì tính năng Giám sát API sẽ đặt proxy thành
-
(not set) cho những lỗi504
này, nên bạn có thể sử dụng API (Logs API) để lấy proxy được liên kết cho đường dẫn và máy chủ ảo.For example :
curl "https://apimonitoring.enterprise.apigee.com/logs/apiproxies?org=ORG&env=ENV&select=https
- Xem lại Thời gian phản hồi để biết thêm các lỗi
504
và 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ó Lỗi
504
nào trong một khoảng thời gian cụ thể không (nếu vấn đề đã xảy ra trong quá khứ) hoặc có yêu cầu nào vẫn không thành công với504
hay không. - Xin lưu ý những thông tin sau về 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 sẽ thấy thông tin sau:
-
Thời gian yêu cầu:
57.001
giâ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
- Email đại diện 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 Trình 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 hiển thị ở trên, Thời gian yêu cầu
57.001
giâ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 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 lại. - Xác định Proxy API cho yêu cầu bằng cách sử dụng đường dẫn cơ sở trong trường Yêu cầu .
Nguyên nhân: Cấu hình hết thời gian chờ trên Bộ định tuyến không chính xác
Chẩn đoán
- Xác định xem lỗi
504
có phải là do 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 lại hay không. Bạn có thể thực hiện điều này bằng cách kiểm tra xem Thời gian phản hồi trong Giám sát API/Thời gian yêu cầu trong Bộ định tuyến 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. Thời gian chờ I/O trong Bộ định tuyến/máy chủ ảo và các trường Nguồn lỗi, Lỗi lỗi và Lỗi mã nguồn được đặt thành-
theo các bước chẩn đoán phổ biến của API hoặc NGIN trong phần Kiểm tra phổ biến API trong Nhật ký giám sát API hay NGIN -
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 Bộ xử lý thông báo hoặc Proxy API 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.
- Di chuyển đến phần 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 sự cố 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 Tài sản, hãy xem giá trị Thời gian chờ đọc proxy tính bằng giây.
Trong ví dụ trên, Thời gian chờ đọc proxy được định cấu hình bằng 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 Thời gian chờ đọc proxy bằng các API quản lý sau:
-
Thực thi API Tải máy chủ ảo để lấy cấu hình
virtualhost
như minh hoạ bên dưới:Người dùng Public Cloud
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 định cấu hình 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 định cấu hình bằng 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.
Xác minh thời gian chờ I/O trên tệp local.properties
- Đăng nhập vào máy Bộ định tuyến.
- Tìm thuộc tính
proxy_read_timeout
trong thư mục/opt/nginx/conf.d
và kiểm tra xem thuộc tính này đã được đặt bằng giá trị mới như sau chưa:grep -ri "proxy_read_timeout" /opt/nginx/conf.d
-
Kiểm tra giá trị được đặt cho thuộc tính
proxy_read_timeout
trong 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 kết quả ví dụ ở trên, hãy lưu ý rằng thuộc tính
proxy_read_timeout
đã được thiết lập bằng giá trị mới57
trong0-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 là 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ủ ảo. Nhận giá trị củaproxy_read_timeout
cho máy chủ ảo cụ thể mà bạn đã sử dụng để thực hiện các lệnh gọi API không thành công kèm theo 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 phần dưới đây:
- Điểm cuối mục tiêu của proxy API
- Chính sách về chú thích dịch vụ của proxy API
Thời gian chờ của chế độ xem I/O trong điểm cuối đích của proxy API
- Trong giao diện người dùng Edge, hãy chọn proxy API cụ thể mà bạn muốn xem giá trị thời gian chờ I/O.
- Chọn điểm cuối đích cụ thể mà bạn muốn kiểm tra.
- Hãy xem thuộc tính
io.timeout.millis
với giá trị thích hợp trong phần tử<HTTPTargetConnection>
của cấu hìnhTargetEndpoint
.Ví dụ: thời gian chờ I/O trong mã sau đượ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 Chú thích dịch vụ của proxy API
- Trong giao diện người dùng Edge, hãy chọn proxy API cụ thể mà bạn muốn xem giá trị thời gian chờ I/O mới cho chính sách ServiceChú thích.
- Chọn chính sách về Chú thích dịch vụ cụ thể mà bạn muốn kiểm tra.
-
Hãy xem phần tử
<Timeout>
có giá trị thích hợp trong cấu hình<ServiceCallout>
.Ví dụ: thời gian chờ I/O của mã sau sẽ là 120 giây:
<Timeout>120000</Timeout>
Xác minh thời gian chờ I/O trên Bộ xử lý thông báo
- Đăng nhập vào máy Bộ xử lý thư.
-
Tìm kiếm thuộc tính
HTTPTransport.io.timeout.millis
trong thư mục/opt/apigee/edge-message-processor/conf
bằng lệnh sau:grep -ri "HTTPTransport.io.timeout.millis" /opt/apigee/edge-message-processor/conf
Ví dụ về mã được tạo
/opt/apigee/edge-message-processor/conf/http.properties:HTTPTransport.io.timeout.millis=55000
- Trong kết quả ví dụ ở trên, hãy lưu ý rằng thuộc tính
HTTPTransport.io.timeout.millis
đã được thiết lập bằng giá trị55000
tronghttp.properties
. Điều này cho biết thời gian chờ I/O đã được định cấu hình thành công là 55 giây trên Bộ xử lý thông báo.
Sau khi bạn xác định thời gian chờ được định cấu hình trên Bộ định tuyến và Bộ xử lý thông báo, hãy xác minh xem Bộ định tuyến/máy chủ ảo đã được định cấu hình với giá trị thời gian chờ thấp hơn so với giá trị thời gian chờ trên proxy Bộ xử lý thông báo/API hay chưa.
Hãy ghi lại các giá trị được đặt trên tất cả các lớp như minh hoạ trong bảng dưới đây:
Thời gian chờ trên bộ định tuyến (giây) | Thời gian chờ trên máy chủ ảo (giây) | Thời gian chờ trên Trình xử lý thư (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 Bộ xử lý thư, giá trị mặc định là 55 giây được định cấu hình.
- Tuy nhiên, trên một Proxy API cụ thể, giá trị 120 giây được định cấu hình.
Lưu ý rằng giá trị thời gian chờ cao hơn chỉ được định cấu hình trên proxy API, nhưng Bộ định tuyến vẫn được định cấu hình trong 57 giây. Do đó, Bộ định tuyến hết thời gian chờ là 57 giây trong khi Bộ 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 Bộ định tuyến phản hồi lại kèm theo lỗi 504 Gateway Timeout
cho ứng dụng.
Độ 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 nhằm 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 để tìm hiểu xem nên đặt giá trị thời gian chờ nào cho các thành phần liên quan đến luồng yêu cầu API thông qua Apigee Edge.
- Trong ví dụ trên, nếu bạn chắc chắn cần đặt giá trị thời gian chờ cao hơn vì máy chủ phụ trợ yêu cầu thời gian dài 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, hãy đặt giá trị thời gian chờ cao hơn. Ví dụ:
123 seconds
trên Bộ định tuyến. Để tránh ảnh hưởng đến tất cả các Proxy API do giá trị hết thời gian chờ mới, hãy chỉ đặt giá trị của123 seconds
trên máy chủ ảo cụ thể được dùng trong Proxy API cụ thể. - Làm theo hướng dẫn trong bài viết Đị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ủ ảo.