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 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 rằng khách hàng 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 sẽ 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 gây ra 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à Ứng dụng > Bộ định tuyến > Nội dung Bộ xử lý > Máy chủ phụ trợ như minh hoạ 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, Bộ định tuyến, Tin nhắn
Các bộ xử lý và máy chủ phụ trợ đượ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 thành. Nếu bất kỳ thành phần nào trong
flow không nhận được phản hồi từ thành phần ngược dòng (upstream) 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ề
504 Gateway Timeout
lỗi.
Cẩm nang này mô tả cách khắc phục sự 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à tối đa khoảng thời gian một proxy API có thể thực thi từ khi nhận được yêu cầu API trên Edge cho đến thì phản hồi sẽ đượ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. Thời gian chờ mặc định có thể được ghi đè trên Bộ định tuyến/máy chủ ảo như được giải thích trong Đị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
là do
Thời gian chờ trên bộ định tuyến 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 công khai và riêng tư |
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 thẻ Analyze (Phân tích) > Giám sát API > Điều tra.
- Lọc ra
5xx
lỗi rồi chọn khung thời gian. - Vẽ Mã trạng thái theo Thời gian.
-
Nhấp vào ô cụ thể hiện lỗi
504
để tìm hiểu thêm và xem nhật ký về các lỗi này như được trình bày dưới đây:Ví dụ minh hoạ 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 truy cập), hãy lưu ý những thông tin chi tiết sau đây đối với một số lỗi
504
:- Request (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: Mục này cho biết tổng thời gian đã trôi qua của 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.001
giây. Điều này cho biết rằng Bộ định tuyến đã hết thời gian trước khi Trình xử lý thư có thể phản hồi lại vì giá trị rất gần thời gian chờ I/O mặc định đã đặt trên Bộ định tuyến, là 57 giây.
Bạn cũng có thể lấy tất cả nhật ký bằng cách sử dụng tính năng Giám sát API GET nhật ký. Ví dụ: bằng cách truy vấn nhật ký cho
org
,env
,timeRange
, vàstatus
, bạn sẽ có thể tải xuống tất cả nhật ký của các giao dịch mà ứng dụng đã hết thời gian chờ.Vì tính năng Giám sát API đặt proxy thành
-
(not set) cho các504
này lỗi, bạn có thể sử dụng API (Nhật ký API) để lấy proxy liên kết cho đường dẫn và máy chủ lưu trữ ả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
504
lỗi khác rồi 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ể hay không (nếu sự cố đã xảy ra trong quá khứ) hoặc nếu có bất kỳ yêu cầu nào vẫn không thành công với504
. - 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 sẽ thấy thông tin sau:
-
Thời gian yêu cầu:
57.001
giây. Điều này cho thấy rằng Bộ định tuyến hết thời gian chờ sau 57.001 giây. - Yêu cầu:
GET /test-timeout
- Bí danh của máy chủ lưu trữ:
myorg-test.apigee.net
-
Kiểm tra xem Request Time (Thời gian yêu cầu) có giống với thời gian chờ I/O hay không được định cấu hình trên Bộ định tuyến/máy chủ ảo. Nếu có, điều đó có nghĩa là Bộ định tuyến đã hết thời gian chờ trước Công cụ xử lý thư không phản hồi trong khoảng thời gian này.
Trong ví dụ về mục Nhật ký truy cập NGINX hiển thị ở trên, nút Yêu cầu Thời gian
57.001
giây rất gần với thời gian chờ I/O mặc định đã đặt trên Bộ định tuyến. Điều này chỉ ra rằng Bộ định tuyến đã hết thời gian chờ trước Thông báo Bộ xử lý có thể phản hồi. - Xác định Proxy API cho yêu cầu được thực hiện bằng cách sử dụng đường dẫn cơ sở trong Yêu cầu .
Nguyên nhân: Cấu hình hết 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
504
có phải là do Bộ định tuyến đã hết thời gian chờ trước đó hay không Trình xử lý thư có thể phản hồi lại. 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 Giám sát API/Thời gian yêu cầu trong Bộ định tuyến (cả hai trường thể hiện cùng một thông tin nhưng được gọi bằng các tên khác nhau) cũng giống như Thời gian chờ I/O được định cấu hình trên Bộ định tuyến/máy chủ ảo 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 chức năng Giám sát API hoặc quyền truy cập NGINX nhật ký như được giải thích trong Các bước chẩn đoán phổ biến. -
Kiểm tra xem liệu 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 Proxy API cụ thể.
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 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 mục Thuộc tính, 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 với giá trị là
120
. Tức 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ách sử dụng các API quản lý sau:
-
Thực thi Nhận API máy chủ ảo để lấy cấu hình
virtualhost
như trình bày dưới đây:Người dùng Cloud 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 trên đá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 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 với giá trị là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 Route.properties
- Đăng nhập vào máy Bộ định tuyến.
- Tìm kiếm thuộc tính
proxy_read_timeout
trong Thư mục/opt/nginx/conf.d
và kiểm tra xem thư mục này đã được thiết lập bằng giá trị mới hay chưa như sau:grep -ri "proxy_read_timeout" /opt/nginx/conf.d
-
Kiểm tra giá trị đã đặt cho thuộc tính
proxy_read_timeout
trong thực thể ảo cụ thể tệp cấu hình máy chủ lưu trữ.Kết quả mẫu của 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ả của ví dụ ở trên, hãy lưu ý rằng thuộc tính
proxy_read_timeout
có đã được thiết lập với giá trị mới57
trong0-default.conf
, đây là giá trị cho máy chủ ảo mặc định. Điều này cho biết rằng thời gian chờ I/O là đượ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 bạn có nhiều máy chủ ảo, bạn sẽ thấy thông tin này cho mỗi máy chủ ảo. Lấy giá trị củaproxy_read_timeout
cho máy chủ ảo cụ thể mà bạn đã sử dụng để tạo API không thực hiện được lệnh gọi với504
lỗi.
Xác minh thời gian chờ I/O trong proxy API
Bạn có thể xem thời gian chờ I/O trong các phần sau:
- Điểm cuối mục tiêu của proxy API
- Chính sách ServiceAnnotation 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 proxy API cụ thể mà bạn muốn xem I/O giá trị hết thời gian chờ.
- Chọn điểm cuối mục tiêu 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>
trongTargetEndpoint
.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 ServiceAnnotation 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 I/O mới giá trị hết thời gian chờ cho chính sách ServiceAnnotation.
- Chọn chính sách ServiceAnnotation 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 nhập vào máy 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
Kết quả mẫu
/opt/apigee/edge-message-processor/conf/http.properties:HTTPTransport.io.timeout.millis=55000
- Trong kết quả của ví dụ ở trên, hãy lưu ý rằng thuộc tính
Đã đặt
HTTPTransport.io.timeout.millis
với 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 để 55 giây trên Trình xử lý tin nhắn.
Khi bạn đã xác định được thời gian chờ được định cấu hình trên Bộ định tuyến và Bộ xử lý thư, 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ị trên Bộ xử lý thư/proxy API.
Ghi lại các giá trị được đặt trên tất cả các lớp như được hiển thị trong bảng bên dưới:
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 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à Chrome 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ư, giá trị mặc định là 55 giây được định cấu hình.
- Tuy nhiên, trên 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
được định cấu hình với 57 giây. Do đó, Bộ định tuyến hết thời gian chờ 57 giây trong khi Thông báo
Đơn vị xử lý/máy chủ 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 bằng
504 Gateway Timeout
lỗi với ứ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à Thông báo Bộ xử lý cần xử lý để 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 để nắm được giá trị thời gian chờ nào phải được thiết lập trên nhiều thành phần 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 chắc chắn rằng cần đặt giá trị thời gian chờ cao hơn
vì máy chủ phụ trợ yêu cầu nhiều thời gian hơn và bạn đã tăng thời gian chờ
của Trình xử lý thư là 120 giây, sau đó đặt giá trị thời gian chờ cao hơn cho
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ị thời gian chờ mới, hãy chỉ đặt giá trị123 seconds
trên máy chủ ảo cụ thể dùng trong Proxy API cụ thể. - Làm theo hướng dẫn trong Đị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.