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 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 sẽ nhận được mã phản hồi sau đây:
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 | Mô tả | Hướng dẫn khắc phục sự cố áp dụng cho |
---|---|---|
Máy chủ mục tiêu đóng sớm kết nối | Máy chủ đích kết thúc sớm kết nối trong khi Trình xử lý thư vẫn đang đang gửi tải trọng yêu cầu. | Người dùng Edge công khai và riêng tư |
Các bước chẩn đoán phổ biến
Xác định Mã nhận dạng tin nhắn 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 sự cố vẫn tiếp diễn, hãy bật 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 Unavailable
có mã lỗimessaging.adaptors.http.flow.ServiceUnavailable.
- Chọn một trong các yêu cầu không thực hiện được.
- Chuyển đến giai đoạn AX và xác định mã thông báo
(
X-Apigee.Message-ID
) của yêu cầu bằng cách cuộn xuống trong phần Phần Chi tiết giai đoạn như trong hình bên dưới.
Nhật ký truy cập NGINX
Cách xác định mã nhận dạng thư 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ư cho các 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 đề 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ó lỗi
503
nào đối với proxy API cụ thể 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ới503
. - Nếu xảy ra lỗi
503
với thông báo X-Apigee-fault-code Messaging.adaptors.http.flow.ServiceAvailable, lưu ý mã nhận dạng thông báo cho một hoặc nhiều yêu cầu như trong ví dụ sau:Mục nhập mẫu cho thấy 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 Các bước chẩn đoán phổ biến)
và xác minh rằng bạn có cả hai tập hợp sau đây trong ngăn Analytics Data Record (Đã 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ụ Theo dõi (như giải thích trong Các bước chẩn đoán phổ biến)
và xác minh rằng bạn đã đặt cả hai điều sau trong ngăn 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:
- Vui lòng truy cập 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 Các bước chẩn đoán phổ biến)
và xác minh rằng bạn có cả hai tập hợp sau đây trong ngăn Analytics Data Record (Đã ghi lại dữ liệu Analytics):
- 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 kiếm mã nhận dạng thư trong nhật ký Trình 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ệ số 1: java.io.IOException: Xảy ra sự cố dòng tiêu đề 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
Ngoại lệ số 2: Ngoại lệ onExceptionWrite: {}
java.io.IOException: Dấu sổ thẳ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 chỉ ra rằng trong khi Trình xử lý thư vẫn đang ghi
tải trọng yêu cầu đến máy chủ phụ trợ, thì kết nối đã bị đóng sớm bởi
máy chủ phụ trợ. Do đó, Trình xử lý thư sẽ gửi ngoại lệ
java.io.IOException: Broken pipe
. Remote:IP:PORT
cho biết máy chủ phụ trợ đã được phân giải Địa chỉ IP và số cổng.- Thuộc tính
bytesWritten=76295
trong thông báo lỗi ở trên cho biết Trình xử lý thư đã gửi tải trọng76295
byte đến phần phụ trợ khi kết nối bị đóng sớm. - Thuộc tính
bytesRead=0
cho biết Trình xử lý thư chưa đã nhận được bất kỳ 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
tcpdump
trên phần phụ trợ hoặc Trình xử lý thư và phân tích như được 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 Trình xử lý thư:tcpdump -i any -s 0 host BACKEND_HOSTNAME -w FILE_NAME
- Phân tích
tcpdump
đã thu thập:Đầu ra tcpdump mẫu (được thu thập trên Trình xử lý thư):
Trong
tcpdump
ở trên, bạn có thể thấy những thông tin sau:- Trong gói
4
, Trình xử lý thư đã gửi yêu cầuPOST
tới máy chủ phụ trợ. - Trong gói
5
,8
,9
,10
,11
, Trình xử lý thư đã 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ừ Bộ xử lý tin nhắn. - 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 và sau đó phản hồi bằng các phản hồi tải trọng thì máy chủ phụ trợ sẽ phản hồi bằngFIN ACK
khởi tạo đó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ư vẫn đang gửi tải trọng yêu cầu.
- Điều này khiến cho Trình xử lý thư ghi lại
IOException: Broken Pipe
và trả về một503
cho ứng dụng
- Trong gói
Độ phân giải
- Làm việc với một hoặc cả nhóm ứng dụng và nhóm mạng để phân tích và khắc phục sự cố ngắt kết nối sớm ở phía máy chủ phụ trợ.
- Đảm bảo ứ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ỳ thiết bị kết nối mạng trung gian nào hoặc lớp kết nối giữa Apigee và máy chủ phụ trợ, sau đó đảm bảo rằng các yêu cầu 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 ngay cả sau khi đã làm theo các hướng dẫn trên, hãy thu thập những thông tin sau thông tin chẩn đoán rồi liên hệ với Bộ phận hỗ trợ Apigee Edge:
Nếu bạn là người dùng Cloud Public, 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 hiện 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 thông tin múi giờ khi xảy ra503
lỗi trong quá khứ.
Nếu bạn là người dùng Đám mây riêng tư, hãy cung cấp các thông tin sau:
- Đã nhậ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ực hiện được
- Tổ chức, tên môi trường và tên proxy API mà bạn đang quan sát
503
lỗi - 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ý Công cụ 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 xảy ra lỗi
503
Tcpdumps
được thu thập trên Trình xử lý thư và máy chủ phụ trợ khi đã xảy ra lỗi