502 Bad Gateway - Socket treo

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 của 502 Bad Gateway với mã ECONNRESET là phản hồi cho các lệnh gọi API trong Edge Microgateway.

Thông báo lỗi

Khách hàng sẽ thấy mã phản hồi sau đây:

HTTP/1.1 502 Bad Gateway

Phản hồi sẽ bao gồm thông báo lỗi sau:

{"message":"socket hang up","code":"ECONNRESET"}

Các nguyên nhân có thể

Nguyên nhân Nội dung mô tả Hướng dẫn khắc phục sự cố áp dụng cho
Định cấu hình thời gian chờ duy trì hoạt động không đúng cách Thời gian chờ duy trì hoạt động được định cấu hình không chính xác giữa Edge Microgateway và máy chủ đích. Người dùng Edge Public và Private Cloud
Máy chủ mục tiêu đóng kết nối sớm Máy chủ mục tiêu sẽ đóng kết nối sớm trong khi Edge Microgateway đ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

  1. Kiểm tra nhật ký Edge Microgateway:
    /var/tmp/edgemicro-`hostname`-*.log
    
  2. Tìm kiếm để xem có lỗi 502 nào với mã ECONNRESET trong một khoảng thời gian cụ thể hay không (nếu vấn đề này xảy ra trong quá khứ) hoặc có yêu cầu nào vẫn không thành công với 502 hay không.
    2021-06-23T03:52:24.110Z [error][0:8000][3][myorg][test]
    [emg_badtarget/flakey/hangup][][][6b089a00-d3d6-11eb-95aa-911f1ee6c684]
    [microgateway-core][][GET][502][socket hang up][ECONNRESET][]
    
  3. Nếu bạn đặt cấp độ ghi nhật ký thành warn hoặc info, thì cũng sẽ có thông báo [warn] bao gồm tên máy chủ mục tiêu và cổng trong phần tử thứ hai. Trong ví dụ này, giá trị thuộc tính là X.X.X.X:8080 và sau này bạn có thể dùng giá trị này để chụp tcpdump.
    2021-06-23T03:52:24.109Z
    [warn][X.X.X.X:8080][3][myorg][test][emg_badtarget/flakey/hangup]
    [][][6b089a00-d3d6-11eb-95aa-911f1ee6c684][plugins-middleware]
    [targetRequest error][GET][][socket hang up][ECONNRESET][395]
    
  4. Mã lỗi [socket hang up][ECONNRESET] cho biết rằng máy chủ đích đã đóng kết nối với Edge Microgateway. Bạn có thể tìm kiếm vấn đề này trong nhật ký để xác định tần suất xảy ra vấn đề.

Nguyên nhân: Thời gian chờ duy trì hoạt động không được định cấu hình chính xác

Chẩn đoán

  1. Hãy làm theo các bước trong phần Các bước chẩn đoán thường gặp và xác minh xem bạn có gặp lỗi [socket hang up][ECONNRESET] hay không.
  2. Nếu có, hãy tìm hiểu thêm với sự trợ giúp của tcpdump như giải thích dưới đây:

Sử dụng tcpdump

  1. Ghi lại tcpdump giữa Edge Microgateway và máy chủ phụ trợ trên hệ điều hành của máy chủ Edge Microgateway bằng lệnh sau:
    tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
    
  2. Phân tích tcpdump đã chụp:

    Kết quả tcpdump mẫu: ( xem hình ảnh lớn hơn)

    Trong mẫu tcpdump ở trên, bạn có thể thấy những nội dung sau:

    1. Trong gói 250288, ứng dụng gửi một yêu cầu POST.
    2. Trong gói 250371, máy chủ phản hồi bằng 200 OK.
    3. Trong gói 250559, ứng dụng gửi một ACK.
    4. Trong gói 250560, máy chủ sẽ gửi thông báo Continuation.
    5. Trong gói 250561, ứng dụng gửi một ACK.
    6. Trong gói 262436, máy chủ gửi một FIN, ACK đến ứng dụng để bắt đầu đóng kết nối. Xin lưu ý rằng gói này mất khoảng 5 giây sau gói trước (250561).
    7. Trong gói 262441, ứng dụng gửi một yêu cầu POST khác. Tuy nhiên, thao tác này không thành công vì máy chủ đã bắt đầu đóng kết nối. Ứng dụng này phản hồi bằng RST trong gói 262441.

    Kết nối đó đã được sử dụng lại ít nhất một lần thành công trong ví dụ này. Tuy nhiên, trong yêu cầu cuối cùng, máy chủ sẽ bắt đầu đóng kết nối sau 5 giây không hoạt động, trùng với thời điểm ứng dụng gửi một yêu cầu mới. Điều này cho thấy rằng thời gian chờ duy trì hoạt động của máy chủ phụ trợ rất có thể ngắn hơn hoặc bằng giá trị đã đặt trong ứng dụng. Để xác thực thông tin này, hãy xem phần So sánh thời gian chờ duy trì hoạt động trên Edge Microgateway và máy chủ phụ trợ.

So sánh thời gian chờ duy trì hoạt động

  1. Edge Microgateway không có thuộc tính thời gian chờ duy trì hoạt động cụ thể. Tệp này do hệ điều hành nơi tệp đang chạy xác định. Các ví dụ phổ biến là vùng chứa Windows, Linux và Docker.
  2. Có thể kích thước này được tuỳ chỉnh trong hệ điều hành. Hãy kiểm tra với quản trị viên hệ thống của bạn. Theo mặc định, các hệ điều hành Linux có thời gian chờ mặc định duy trì hoạt động là hai giờ.
  3. Tiếp theo, hãy kiểm tra thuộc tính thời gian chờ duy trì hoạt động được định cấu hình trên máy chủ phụ trợ của bạn. Giả sử máy chủ phụ trợ của bạn được định cấu hình với giá trị là 10 giây.
  4. Nếu bạn xác định rằng giá trị của thời gian chờ duy trì hoạt động trên hệ điều hành cao hơn giá trị của thuộc tính thời gian chờ duy trì hoạt động trên máy chủ phụ trợ như trong ví dụ trên, thì đó chính là nguyên nhân gây ra lỗi 502.

Độ phân giải

Đảm bảo rằng thuộc tính thời gian chờ duy trì hoạt động luôn thấp hơn trên hệ điều hành mà Edge Microgateway đang chạy so với thuộc tính trên máy chủ phụ trợ.

  1. Xác định giá trị đã đặt cho thời gian chờ duy trì hoạt động trên máy chủ phụ trợ.
  2. Định cấu hình một giá trị thích hợp cho thuộc tính thời gian chờ duy trì hoạt động trong hệ điều hành, sao cho thuộc tính thời gian chờ duy trì hoạt động thấp hơn giá trị được đặt trên máy chủ phụ trợ, bằng cách sử dụng các bước áp dụng cho hệ điều hành của bạn.

Phương pháp hay nhất

Bạn nên lưu ý rằng các thành phần ở hạ nguồn luôn có ngưỡng thời gian chờ duy trì hoạt động thấp hơn so với đã định cấu hình trên các máy chủ tải lên để tránh các loại điều kiện tranh đấu và lỗi 502 này. Mỗi hop xuôi dòng phải thấp hơn mỗi hop ngược dòng. Trong Edge Microgateway, bạn nên sử dụng các nguyên tắc sau:

  1. Thời gian chờ duy trì hoạt động trên ứng dụng khách hoặc trình cân bằng tải phải nhỏ hơn thời gian chờ giữ hoạt động của Edge Microgateway.

    Để định cấu hình thời gian chờ duy trì hoạt động trên Cổng vi mô Edge, hãy thêm giá trị keep_alive_timeout vào tệp ~/.edgemicro/org-env-config.yaml.

    edgemicro:
      keep_alive_timeout: 65000
    
  2. Thời gian chờ duy trì hoạt động của hệ điều hành Edge Microgateway phải nhỏ hơn thời gian chờ duy trì hoạt động của máy chủ đích.
  3. Nếu có bất kỳ bước nhảy nào khác phía trước hoặc sau Edge Microgateway, bạn cũng nên áp dụng quy tắc tương tự. Ứng dụng ở hạ nguồn có trách nhiệm đóng nhiệm vụ đóng kết nối với tải lên.

Nguyên nhân: Máy chủ mục tiêu đóng kết nối sớm

Chẩn đoán

  1. Hãy làm theo các bước được giải thích trong phần Các bước chẩn đoán thường gặp và xác minh xem bạn có gặp lỗi [socket hang up][ECONNRESET] hay không.
  2. Nếu có, hãy tìm hiểu thêm với sự trợ giúp của tcpdump như giải thích bên dưới.

    Thông báo lỗi [targetRequest error][GET][][socket hang up][ECONNRESET] trong ví dụ trên cho biết lỗi này xảy ra khi Edge Microgateway đang gửi yêu cầu đến máy chủ phụ trợ (đích). Tức là Edge Microgateway đã gửi yêu cầu API đến máy chủ phụ trợ và đang chờ phản hồi. Tuy nhiên, máy chủ phụ trợ đã chấm dứt kết nối đột ngột trước khi Edge Microgateway nhận được phản hồi.

  3. Kiểm tra nhật ký máy chủ phụ trợ và xem có lỗi hoặc thông tin nào có thể đã khiến máy chủ phụ trợ chấm dứt kết nối đột ngột hay không. Nếu bạn tìm thấy lỗi hoặc thông tin nào, hãy chuyển đến phần Giải pháp và khắc phục vấn đề một cách phù hợp trong máy chủ phụ trợ.
  4. Nếu bạn không tìm thấy lỗi hoặc thông tin nào trong máy chủ phụ trợ của mình, hãy thu thập kết quả tcpdump trên máy chủ Edge Microgateway:
    tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
    
  5. Phân tích tcpdump đã chụp:

    Kết quả tcpdump mẫu: ( xem hình ảnh lớn hơn)

    Trong mẫu tcpdump ở trên, bạn có thể thấy những nội dung sau:

    1. Trong gói 4, Edge Microgateway đã gửi một yêu cầu GET đến máy chủ mục tiêu.
    2. Trong gói 5, máy chủ mục tiêu đã phản hồi bằng ACK để xác nhận yêu cầu.
    3. Tuy nhiên, trong gói 6, thay vì phản hồi bằng tải trọng phản hồi, máy chủ mục tiêu sẽ gửi một FIN, ACK để bắt đầu đóng kết nối.
    4. Trong các gói 7 trở đi, kết nối sẽ đóng lẫn nhau. Vì kết nối đã bị đóng trước khi phản hồi được gửi nên Edge Microgateway sẽ trả về lỗi HTTP 502 cho ứng dụng.
    5. Hãy lưu ý rằng dấu thời gian của gói 8, 2021-06-23T03:52:24.110Z tương ứng với dấu thời gian mà lỗi được ghi trong nhật ký của Edge Microgateway. Dấu thời gian trong tệp nhật ký và trong tcpdump thường có thể được dùng để tương quan giữa các lỗi với gói thực tế.

    Độ phân giải

    Khắc phục vấn đề trên máy chủ phụ trợ một cách phù hợp.

    Nếu sự cố vẫn tiếp diễn và bạn cần được hỗ trợ khắc phục sự cố 502 Bad Gateway Error hoặc bạn nghi ngờ đó là sự cố trong Edge Microgateway, 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 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:

    • Tệp nhật ký: Thư mục mặc định là /var/tmp nhưng có thể bị ghi đè trong tệp config.yaml chính (logging > dir parameter). Bạn nên thay đổi log > level thành info trước khi cung cấp tệp nhật ký cho Nhóm hỗ trợ Apigee.
    • Tệp cấu hình: Cấu hình chính của Edge Microgateway nằm trong tệp YAML trong thư mục Edge Microgateway mặc định, $HOME/.edgemicro. Có một tệp cấu hình mặc định tên là default.yaml, sau đó có một tệp cho mỗi môi trường ORG-ENV-config.yaml. Vui lòng tải đầy đủ tệp này lên cho tổ chức và môi trường bị ảnh hưởng.