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 trạng thái phản hồi HTTP 503
kèm theo thông báo Service Unavailable
sau một lệnh gọi proxy API.
Thông báo lỗi
Ứng dụng khách nhận được mã phản hồi sau:
HTTP/1.1 503 Service Unavailable
Ngoài ra, bạn có thể nhận thấy thông báo lỗi sau:
{ "fault": { "faultstring": "The Service is temporarily unavailable", "detail": { "errorcode": "messaging.adaptors.http.flow.ServiceUnavailable" } } }
Nguyên nhân có thể xảy ra
Nguyên nhân | Nội dung mô tả | Hướng dẫn khắc phục sự cố áp dụng cho |
---|---|---|
Máy chủ mục tiêu đóng kết nối sớm | Máy chủ mục tiêu kết thúc sớm kết nối trong khi Bộ xử lý thông báo vẫn đang gửi tải trọng yêu cầu. | Người dùng Edge Public và Private Cloud |
Các bước chẩn đoán phổ biến
Xác định mã nhận dạng thông báo của yêu cầu không thành công
Công cụ theo dõi
Cách xác định mã nhận dạng thông báo của yêu cầu không thành công bằng công cụ Theo dõi:
- Nếu vấn đề vẫn tiếp diễn, hãy bật phiên theo dõi cho API bị ảnh hưởng.
- Thực hiện lệnh gọi API và tái tạo vấn đề –
503 Service Unavailable
kèm theo mã lỗimessaging.adaptors.http.flow.ServiceUnavailable.
- Chọn một trong các yêu cầu không thành công.
- Chuyển đến giai đoạn AX và xác định mã nhận dạng thông báo (
X-Apigee.Message-ID
) của yêu cầu bằng cách di chuyển xuống phần Thông tin chi tiết về giai đoạn như minh hoạ trong hình sau.
Nhật ký truy cập NGINX
Cách xác định mã thông báo của yêu cầu không thành công bằng nhật ký truy cập NGINX:
Bạn cũng có thể tham khảo nhật ký Truy cập NGINX để xác định mã nhận dạng thông báo cho các lỗi 503
.
Điều này đặc biệt hữu ích nếu vấn đề này đã xảy ra trước đây hoặc nếu vấn đề không liên tục xảy ra và bạn không thể ghi lại dấu vết trong giao diện người dùng. Hãy làm theo các bước sau để xác định thông tin này từ 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
503
nào đối với proxy API cụ thể 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ới503
hay không. - Nếu có bất kỳ Lỗi
503
nào xảy ra với X-Apigee-fault-code ích.adapators.http.flow.ServiceAvailable, hãy lưu ý đến mã thông báo cho một hoặc nhiều yêu cầu như vậy như trong ví dụ sau:Mục mẫu hiển thị Lỗi
503
Nguyên nhân: Máy chủ mục tiêu đóng kết nối sớm
Chẩn đoán
- Nếu bạn là người dùng Đám mây công cộng hoặc Đám mây riêng tư:
- Sử dụng công cụ Theo dõi (như giải thích trong phần Các bước chẩn đoán phổ biến) và xác minh rằng bạn đã thiết lập cả hai chế độ sau trong ngăn Dữ liệu phân tích đã ghi:
- X-Apigee.fault-code:
messaging.adaptors.http.flow.ServiceUnavailable
- X-Apigee.fault-source:
target
- X-Apigee.fault-code:
- Sử dụng công cụ Theo dõi (như giải thích trong phần Các bước chẩn đoán thường gặp) và xác minh rằng bạn đã thiết lập cả hai mục sau trong ngăn Error (Lỗi) ngay sau thuộc tính state
TARGET_REQ_FLOW
:- error.class:
com.apigee.errors.http.server.ServiceUnavailableException
- error.cause:
Broken pipe
- error.class:
- Hãy chuyển đến phần Sử dụng tcpdump để tìm hiểu thêm.
- Sử dụng công cụ Theo dõi (như giải thích trong phần Các bước chẩn đoán phổ biến) và xác minh rằng bạn đã thiết lập cả hai chế độ sau trong ngăn Dữ liệu phân tích đã ghi:
- Nếu bạn là người dùng Đám mây riêng tư:
- Xác định mã nhận dạng thông báo của yêu cầu không thành công.
- Tìm mã nhận dạng thông báo trong nhật ký Trình xử lý thông báo (
/opt/apigee/var/log/edge-message-processor/logs/system.log
). - Bạn sẽ thấy một trong các trường hợp ngoại lệ sau:
Ngoại lệ 1: java.io.IOException: Đường ống dẫn bị hỏng khi ghi vào kênh ClientOutputChannel
2021-01-30 15:31:14,693 org:anotherorg env:prod api:myproxy rev:1 messageid:myorg-opdk-test-1-30312-13747-1 NIOThread@1 INFO HTTP.SERVICE - ExceptionHandler.handleException() : Exception java.io.IOException: Broken pipe occurred while writing to channel ClientOutputChannel(ClientChannel[Connected: Remote:IP:PORT Local:0.0.0.0:42828]@8380 useCount=1 bytesRead=0 bytesWritten=76295 age=2012ms lastIO=2ms isOpen=false)
hoặc
Trường hợp ngoại lệ #2: Ngoại lệ onExceptionWrite: {}
java.io.IOException: Đường ống bị hỏng2021-01-31 15:29:37,438 org:anotherorg env:prod api:503-test rev:1 messageid:leonyoung-opdk-test-1-18604-13978-1 NIOThread@0 ERROR HTTP.CLIENT - HTTPClient$Context$2.onException() : ClientChannel[Connected: Remote:IP:PORT Local:0.0.0.0:57880]@8569 useCount=1 bytesRead=0 bytesWritten=76295 age=3180ms lastIO=2 ms isOpen=false.onExceptionWrite exception: {} java.io.IOException: Broken pipe
- Cả hai trường hợp ngoại lệ này đều cho thấy rằng mặc dù Trình xử lý thông báo vẫn đang ghi tải trọng yêu cầu vào máy chủ phụ trợ, nhưng kết nối đã bị máy chủ phụ trợ đóng sớm. Do đó, Trình xử lý thông báo sẽ gửi ngoại lệ
java.io.IOException: Broken pipe
. Remote:IP:PORT
cho biết địa chỉ IP và số cổng của máy chủ phụ trợ đã được phân giải.- Thuộc tính
bytesWritten=76295
trong thông báo lỗi ở trên cho biết rằng Trình xử lý thông báo đã gửi một gói dữ liệu76295
byte tới máy chủ phụ trợ khi kết nối bị đóng sớm. - Thuộc tính
bytesRead=0
cho biết rằng Trình xử lý thông báo chưa nhận được bất kỳ dữ liệu (phản hồi) nào từ máy chủ phụ trợ. - Để tìm hiểu thêm về vấn đề này, hãy thu thập
tcpdump
trên máy chủ phụ trợ hoặc Trình xử lý thông báo rồi phân tích theo giải thích bên dưới.
Sử dụng tcpdump
-
Ghi lại
tcpdump
trên máy chủ phụ trợ hoặc Trình xử lý thông báo bằng các lệnh sau:Lệnh thu thập
tcpdump
trên máy chủ phụ trợ:tcpdump -i any -s 0 host MP_IP_ADDRESS -w FILE_NAME
Lệnh thu thập
tcpdump
trên Bộ xử lý thông báo:tcpdump -i any -s 0 host BACKEND_HOSTNAME -w FILE_NAME
- Phân tích
tcpdump
đã chụp:Kết quả tcpdump mẫu (được thu thập trên Bộ xử lý tin nhắn):
Trong
tcpdump
ở trên, bạn có thể thấy những nội dung sau:- Trong gói
4
, Trình xử lý thông báo đã gửi một yêu cầuPOST
đến máy chủ phụ trợ. - Trong gói
5
,8
,9
,10
,11
, Trình xử lý thông báo tiếp tục gửi tải trọng yêu cầu đến máy chủ phụ trợ. - Trong gói
6
và7
,máy chủ phụ trợ đã phản hồi bằngACK
cho một phần tải trọng yêu cầu nhận được từ Trình xử lý thông báo. - Tuy nhiên, trong gói
12
, thay vì phản hồi bằngACK
cho các gói dữ liệu ứng dụng nhận được rồi phản hồi bằng tải trọng phản hồi, máy chủ phụ trợ sẽ phản hồi bằng mộtFIN ACK
để bắt đầu đóng kết nối. - Điều này cho thấy rõ ràng rằng máy chủ phụ trợ đang đóng kết nối sớm trong khi Trình xử lý thông báo vẫn đang gửi tải trọng yêu cầu.
- Điều này khiến Trình xử lý thông báo ghi lại lỗi
IOException: Broken Pipe
và trả về một503
cho máy khách
- Trong gói
Độ phân giải
- Hãy làm việc với một hoặc cả nhóm phụ trách ứng dụng và nhóm kết nối mạng để phân tích và khắc phục vấn đề về tình trạng ngắt kết nối sớm ở phía máy chủ phụ trợ.
- Hãy đảm bảo rằng ứng dụng máy chủ phụ trợ không hết thời gian chờ hoặc đặt lại kết nối trước khi nhận toàn bộ tải trọng yêu cầu.
- Nếu bạn có bất kỳ lớp hoặc thiết bị mạng trung gian nào giữa Apigee và máy chủ phụ trợ, hãy đảm bảo rằng các thiết bị này không hết thời gian chờ trước khi nhận được toàn bộ tải trọng yêu cầu.
Nếu vấn đề vẫn tiếp diễn, hãy chuyển đến mục Phải thu thập thông tin chẩn đoán.
Phải thu thập thông tin chẩn đoán
Nếu sự cố vẫn tiếp diễn sau khi làm theo hướng dẫn ở trên, hãy thu thập thông tin chẩn đoán sau đây rồi liên hệ với Bộ phận hỗ trợ Apigee:
Nếu bạn là người dùng Public Cloud, hãy cung cấp những thông tin sau:
- Tên tổ chức
- Tên môi trường
- Tên proxy API
- Hoàn tất lệnh
curl
để tái tạo lỗi503
- Tệp theo dõi chứa yêu cầu có lỗi
503 Service Unavailable
- Nếu lỗi
503
hiện không xảy ra, hãy cung cấp khoảng thời gian kèm theo thông tin múi giờ khi lỗi503
xảy ra trong quá khứ.
Nếu bạn là người dùng Đám mây riêng tư, hãy cung cấp những thông tin sau:
- Đã phát hiện thấy thông báo lỗi hoàn chỉnh đối với các yêu cầu không thành công
- Tổ chức, Tên môi trường và Tên proxy API mà bạn đang gặp phải
lỗi
503
- Gói Proxy API
- Tệp theo dõi chứa các yêu cầu có lỗi
503 Service Unavailable
- Nhật ký truy cập NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- Nhật ký Trình xử lý thư
/opt/apigee/var/log/edge-message-processor/logs/system.log
- Khoảng thời gian kèm theo thông tin múi giờ khi
503
lỗi xảy ra Tcpdumps
được thu thập trên Bộ xử lý thông báo và máy chủ phụ trợ khi xảy ra lỗi