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 nhận được trạng thái phản hồi HTTP 503 kèm theo thông báo Service Unavailable sau lệnh gọi proxy API.
Thông báo lỗi
Ứng dụng khách sẽ nhận được mã phản hồi sau:
HTTP/1.1 503 Service Unavailable
Ngoài ra, bạn có thể 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ể dẫn đến vấn đề này
| Nguyên nhân | Mô tả | Hướng dẫn khắc phục sự cố áp dụng cho |
|---|---|---|
| Máy chủ đích đóng kết nối quá sớm | Máy chủ đích kết thúc kết nối quá 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. | Người dùng Edge Public Cloud và Private Cloud |
Các bước chẩn đoán thường gặp
Xác định Mã 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 đang diễn ra, 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 hiện vấn đề –
503 Service Unavailablevới 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 trong 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ực hiện được 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ã thông báo cho lỗi 503.
Điều này đặc biệt hữu ích nếu vấn đề đã xảy ra trong quá khứ hoặc nếu vấn đề xảy ra không liên tục 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ó
503Lỗi nào cho một proxy API cụ thể 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 gặp lỗi với503hay không. - Nếu có bất kỳ
503Lỗi nào với X-Apigee-fault-code messaging.adaptors.http.flow.ServiceUnavailable, hãy lưu ý mã thông báo cho một hoặc nhiều yêu cầu như vậy như minh hoạ trong ví dụ sau:Mẫu mục nhập cho thấy lỗi
503
Nguyên nhân: Máy chủ đích đóng kết nối quá sớm
Chẩn đoán
- Nếu bạn là người dùng Đám mây công khai hoặc Đám mây riêng tư:
- Sử dụng công cụ Theo dõi (như được 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 Đã ghi lại dữ liệu Analytics:
- X-Apigee.fault-code:
messaging.adaptors.http.flow.ServiceUnavailable - X-Apigee.fault-source:
target

- X-Apigee.fault-code:
- Sử dụng công cụ Trace (theo 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 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 xem phần Sử dụng tcpdump để điều tra thêm.
- Sử dụng công cụ Theo dõi (như được 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 Đã ghi lại dữ liệu Analytics:
- Nếu bạn là người dùng Đám mây riêng:
- Xác định mã thông báo của yêu cầu không thành công.
- Tìm mã nhận dạng thư trong nhật ký Message Processor (Bộ xử lý thư) (
/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: Broken pipe occurred while writing to channel 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
Ngoại lệ 2: Ngoại lệ onExceptionWrite: {}
java.io.IOException: Broken pipe2021-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 biết rằng trong khi 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ợ, thì máy chủ phụ trợ đã đóng kết nối quá sớm. Do đó, Message Processor sẽ gửi ngoại lệ
java.io.IOException: Broken pipe. Remote:IP:PORTcho biết địa chỉ IP và số cổng của máy chủ phụ trợ đã phân giải.- Thuộc tính
bytesWritten=76295trong 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 tải trọng gồm76295byte đến máy chủ phụ trợ khi kết nối bị đóng sớm. - Thuộc tính
bytesRead=0cho biết rằng Trình xử lý thông báo chưa nhận được dữ liệu (phản hồi) nào từ máy chủ phụ trợ. - Để điều tra thêm về vấn đề này, hãy thu thập
tcpdumptrê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
tcpdumptrên máy chủ phụ trợ hoặc Trình xử lý tin nhắn bằng các lệnh sau:Lệnh thu thập
tcpdumptrên máy chủ phụ trợ:tcpdump -i any -s 0 host MP_IP_ADDRESS -w FILE_NAME
Lệnh thu thập
tcpdumptrên Trình xử lý thông báo:tcpdump -i any -s 0 host BACKEND_HOSTNAME -w FILE_NAME
- Phân tích
tcpdumpđã ghi lại:Ví dụ về đầu ra của tcpdump (được thu thập trên Trình xử lý thông báo):

Trong
tcpdumpở trên, bạn có thể thấy những thông tin sau:- Trong gói
4, Message Processor đã gửi một yêu cầuPOSTđến máy chủ phụ trợ. - Trong gói
5,8,9,10,11, Message Processor tiếp tục gửi tải trọng yêu cầu đến máy chủ phụ trợ. - Trong gói
6và7,máy chủ phụ trợ đã phản hồi bằngACKcho 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ằngACKcho các gói dữ liệu ứng dụng đã nhận và sau đó 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ằngFIN ACKđể bắt đầu đóng kết nối. - Điều này cho thấy rõ rằng máy chủ phụ trợ đang đóng kết nối quá 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 một lỗi
IOException: Broken Pipevà trả về503cho ứng dụng
- Trong gói
Độ phân giải
- Làm việc với một hoặc cả hai nhóm ứng dụng và mạng để phân tích và khắc phục vấn đề về việc ngắt kết nối sớm ở phía máy chủ phụ trợ.
- Đả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 được toàn bộ tải trọng yêu cầu.
- Nếu bạn có bất kỳ thiết bị hoặc lớp mạng trung gian nào giữa Apigee và máy chủ phụ trợ, hãy đảm bảo rằng chúng 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 phần 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 vấn đề vẫn tiếp diễn ngay cả sau khi bạn 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 Nhóm hỗ trợ Apigee Edge:
Nếu bạn là người dùng Đám mây công cộng, hãy cung cấp những thông tin sau:
- Tên tổ chức
- Tên môi trường
- Tên API Proxy
- 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 hiện tại không xảy ra lỗi
503, hãy cung cấp khoảng thời gian kèm theo thông tin về múi giờ khi lỗi503xảy ra trong quá khứ.
Nếu bạn là người dùng Đám mây riêng, hãy cung cấp những thông tin sau:
- Thông báo lỗi hoàn chỉnh được ghi nhận cho 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 quan sát thấy lỗi
503 - Gói API Proxy
- 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ý Bộ xử lý tin nhắn
/opt/apigee/var/log/edge-message-processor/logs/system.log - Khoảng thời gian có thông tin về múi giờ khi xảy ra lỗi
503 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