504 เกตเวย์หมดเวลาจากเซิร์ฟเวอร์แบ็กเอนด์

คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่ เอกสารประกอบของ Apigee X
info

ลักษณะปัญหา

แอปพลิเคชันไคลเอ็นต์ได้รับรหัสสถานะ HTTP 504 พร้อมข้อความ "Gateway Timeout" ในการตอบกลับการเรียก API

การตอบกลับข้อผิดพลาดนี้บ่งชี้ว่าไคลเอ็นต์ไม่ได้รับการตอบกลับจาก Apigee Edge หรือเซิร์ฟเวอร์แบ็กเอนด์ในเวลาที่เหมาะสมระหว่างการดำเนินการเรียก API

ข้อความแสดงข้อผิดพลาด

แอปพลิเคชันไคลเอ็นต์ได้รับโค้ดตอบกลับต่อไปนี้

HTTP/1.1 504 Gateway Timeout

รหัสนี้อาจตามด้วยข้อความแสดงข้อผิดพลาดที่คล้ายกับข้อความด้านล่าง

<html>
<head><title>504 Gateway Timeout</title></head>
<body bgcolor="white">
<center><h1>504 Gateway Timeout</h1></center>
</body>
</html>

สาเหตุที่ทำให้เกิดการหมดเวลาของเกตเวย์

เส้นทางทั่วไปสำหรับคำขอ API ที่ส่งผ่าน Apigee Edge คือ ไคลเอ็นต์ -> เราเตอร์ -> Message Processor -> เซิร์ฟเวอร์แบ็กเอนด์ ดังที่แสดงในรูปภาพด้านล่าง

เส้นทางคำขอ API

แอปพลิเคชันไคลเอ็นต์ เราเตอร์ และ Message Processor ได้รับการกำหนดค่าด้วยค่าการหมดเวลาที่เหมาะสม Apigee Edge คาดว่าจะได้รับการตอบกลับสำหรับคำขอ API ทุกรายการภายในระยะเวลาที่อิงตามค่าการหมดเวลา หากไม่ได้รับการตอบกลับภายในระยะเวลาที่ระบุ ระบบจะแสดงการตอบกลับ 504 Gateway Timeout

สาเหตุที่เป็นไปได้

ใน Apigee Edge สาเหตุทั่วไปของการตอบกลับ 504 Gateway Timeout จากเซิร์ฟเวอร์แบ็กเอนด์คือ

สาเหตุ คำอธิบาย วิธีการแก้ปัญหาสำหรับ
เซิร์ฟเวอร์แบ็กเอนด์ตอบกลับด้วย 504 Gateway Timeout เซิร์ฟเวอร์แบ็กเอนด์หมดเวลาและแสดงการตอบกลับ 504 Gateway Timeout ไปยัง Message Processor ผู้ใช้ Edge Private และ Public Cloud

เซิร์ฟเวอร์แบ็กเอนด์ตอบกลับด้วย 504 Gateway Timeout

เซิร์ฟเวอร์แบ็กเอนด์อาจตอบกลับด้วยรหัสการตอบกลับ HTTP 504 Gateway Timeout

การวินิจฉัย

ส่วนนี้จะอธิบายวิธีวินิจฉัย 504 Gateway Timeout อย่างถูกต้อง โดยจะแสดงขั้นตอนสำหรับผู้ใช้ Private และ Public Cloud

ขั้นตอนที่ 1: ใช้ Trace (ผู้ใช้ Private และ Public Cloud)

  1. เปิดใช้ Trace ใน UI ของ Apigee สำหรับ API ที่ได้รับผลกระทบ
  2. ส่งคำขอไปยังเซิร์ฟเวอร์แบ็กเอนด์
  3. หากคำขอ API ที่ล้มเหลวแสดงการตอบกลับ 504 จากเซิร์ฟเวอร์แบ็กเอนด์ใน Trace, แสดงว่าสาเหตุของ 504 Gateway Timeout คือเซิร์ฟเวอร์แบ็กเอนด์
  4. หากต้องการดูเวลาการตอบกลับ ให้คลิกเฟส Response received from target server ใน Trace ในตัวอย่างที่แสดง เวลาที่ผ่านไปคือ 60004 มิลลิวินาที

    รายละเอียดระยะจาก UI

    ส่วนรายละเอียดเฟสจะแสดงข้อมูลเพิ่มเติม ดังนี้

    • ไฮไลต์การตอบกลับ 504 Gateway Timeout ที่ได้รับจากเซิร์ฟเวอร์แบ็กเอนด์
    • ส่วนเนื้อหาการตอบกลับ จะแสดงเนื้อหาทั้งหมดของการตอบกลับจาก เซิร์ฟเวอร์แบ็กเอนด์ ดังที่กล่าวไว้ก่อนหน้านี้ รูปแบบและเนื้อหาของเพย์โหลดการตอบกลับอาจแตกต่างกันไป ตามการติดตั้งใช้งานเซิร์ฟเวอร์แบ็กเอนด์
    • ส่วนส่วนหัวการตอบกลับ > เซิร์ฟเวอร์ อาจระบุแหล่งที่มาของการตอบกลับ
  5. หากต้องการดูข้อมูล Analytics และยืนยันการวินิจฉัย ให้คลิกเฟส Analytics Data Recorded ใน Trace ดังที่แสดงในรูปภาพด้านล่าง

    รายละเอียดข้อมูลวิเคราะห์จากการติดตาม

    ส่วนส่วนหัวการตอบกลับ ของรายละเอียดเฟสจะแสดงค่าของ X-Apigee-fault-code และ X-Apigee-fault-source ดังที่แสดงใน รูปภาพด้านล่าง

    รายละเอียดระยะการวิเคราะห์จาก UI

    หากช่องเหล่านี้มีค่าที่แสดงในตารางด้านล่าง แสดงว่าการตอบกลับข้อผิดพลาด 504 มาจากเซิร์ฟเวอร์แบ็กเอนด์:

    ส่วนหัวการตอบกลับ ค่า
    X-Apigee-fault-source target
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
  6. ตรวจสอบการเชื่อมโยงพร็อกซี ทำตามขั้นตอนต่อไปนี้เพื่อดูว่าเซิร์ฟเวอร์แบ็กเอนด์กำลังเรียกใช้พร็อกซีอื่น ใน Apigee:
    1. กลับไปที่เฟส Request sent to target server แล้วคลิกปื้น Show Curl เพื่อดูชื่อแทนโฮสต์ของเซิร์ฟเวอร์แบ็กเอนด์
    2. หากชื่อแทนโฮสต์ของเซิร์ฟเวอร์แบ็กเอนด์ชี้ไปยังชื่อแทนโฮสต์เสมือน แสดงว่ามีการเชื่อมโยงพร็อกซีอยู่ใน ที่ ทำตามขั้นตอนด้านบนซ้ำสำหรับพร็อกซีที่เชื่อมโยงแต่ละรายการเพื่อวินิจฉัยสาเหตุของการตอบกลับข้อผิดพลาด 504 Gateway Timeout คุณสามารถวินิจฉัยการหมดเวลาของ 504 Gateway ที่เกิดขึ้นในพร็อกซีที่เชื่อมโยงในขั้นตอนอื่นๆ ของ วงจรคำขอ/การตอบกลับได้โดยใช้ เพลย์บุ๊กนี้
    3. หากชื่อแทนโฮสต์ของเซิร์ฟเวอร์แบ็กเอนด์ชี้ไปยังเซิร์ฟเวอร์แบ็กเอนด์ ให้ไปที่ การแก้ปัญหา

ขั้นตอนที่ 2: เรียกใช้ API ของเซิร์ฟเวอร์แบ็กเอนด์โดยตรง (ผู้ใช้ Public และ Private Cloud)

เรียกใช้เซิร์ฟเวอร์แบ็กเอนด์โดยตรงเพื่อยืนยันลักษณะการทำงานของการตอบกลับ 504 Gateway Timeout แบบเดียวกันที่พบ เมื่อส่งคำขอผ่าน Apigee Edge

  1. ตรวจสอบว่าคุณมีส่วนหัว พารามิเตอร์การค้นหา และข้อมูลเข้าสู่ระบบที่จำเป็นทั้งหมดเพื่อ ส่งไปยังเซิร์ฟเวอร์แบ็กเอนด์เป็นส่วนหนึ่งของคำขอ
  2. หากบริการแบ็กเอนด์เข้าถึงได้แบบสาธารณะ คุณสามารถใช้คำสั่ง curl , Postman หรือไคลเอ็นต์ REST อื่นๆ และเรียกใช้ API ของเซิร์ฟเวอร์แบ็กเอนด์โดยตรง
  3. หากเซิร์ฟเวอร์แบ็กเอนด์เข้าถึงได้จาก Message Processor เท่านั้น ให้ใช้คำสั่ง curl , Postman หรือไคลเอ็นต์ REST อื่นๆ เพื่อเรียกใช้ API ของเซิร์ฟเวอร์แบ็กเอนด์โดยตรงจาก Message Processor
  4. หากบริการแบ็กเอนด์แสดงการตอบกลับ 504 Gateway Timeout ให้ไปที่ การแก้ปัญหา

ขั้นตอนที่ 3: ตรวจสอบบันทึกการเข้าถึงของ NGINX (ผู้ใช้ Private Cloud เท่านั้น)

บันทึกการเข้าถึงของ NGINX สามารถช่วยระบุว่าการตอบกลับข้อผิดพลาด 504 ส่งมาจากเซิร์ฟเวอร์แบ็กเอนด์หรือไม่ ซึ่งจะเป็นประโยชน์อย่างยิ่งหากปัญหาเกิดขึ้นในอดีต เกิดขึ้นเป็นระยะๆ หรือบันทึกใน Trace ไม่ได้ ทำตามขั้นตอนต่อไปนี้เพื่อตรวจสอบบันทึกการเข้าถึงของ NGINX

  1. ดูบันทึกการเข้าถึงของ NGINX โดยใช้คำสั่งนี้
    /opt/apigee/var/log/edge-router/nginx/ ORG ~ENV.PORT# _access_log 
  2. ตรวจสอบการตอบกลับข้อผิดพลาด 504 สำหรับพร็อกซี API ที่ได้รับผลกระทบ คุณสามารถตรวจสอบระยะเวลาที่เฉพาะเจาะจงได้ หากปัญหาเกิดขึ้นในอดีต หรือดูว่าคำขอจะยังคงล้มเหลวด้วยการตอบกลับข้อผิดพลาด 504 หรือไม่
  3. หากมีการตอบกลับข้อผิดพลาด 504 ให้ดูว่าการตอบกลับข้อผิดพลาดมาจาก เซิร์ฟเวอร์แบ็กเอนด์หรือไม่
  4. รูปภาพด้านล่างเป็นตัวอย่างรายการบันทึกของ NGINX ที่แสดงการตอบกลับข้อผิดพลาด 504 ซึ่งเกิดจาก เซิร์ฟเวอร์เป้าหมาย:

    ตัวอย่างบันทึก Nginx

    หากช่อง X-Apigee-fault-source และ X-Apigee-fault-code มีค่าที่แสดงในตารางด้านล่าง แสดงว่าการตอบกลับ 504 มาจากเซิร์ฟเวอร์แบ็กเอนด์

    ส่วนหัวการตอบกลับ ค่า
    X-Apigee-fault-source target
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
  5. ตรวจสอบพร็อกซี API ที่ได้รับผลกระทบเพื่อดูการเชื่อมโยงพร็อกซี เช่น เซิร์ฟเวอร์แบ็กเอนด์/ปลายทางเป้าหมายกำลังเรียกใช้พร็อกซีอื่นใน Apigee หากพร็อกซี API ใช้ การเชื่อมโยงพร็อกซี ให้ทำตามขั้นตอนด้านบนซ้ำสำหรับพร็อกซีที่เชื่อมโยงแต่ละรายการเพื่อวินิจฉัยสาเหตุของการตอบกลับข้อผิดพลาด 504 Gateway Timeout คุณสามารถวินิจฉัยการหมดเวลาของ 504 Gateway ที่เกิดขึ้นในพร็อกซีที่เชื่อมโยงในขั้นตอนอื่นๆ ได้โดยใช้ เพลย์บุ๊กนี้
  6. หากไม่มี การเชื่อมโยงพร็อกซี และการตอบกลับข้อผิดพลาด 504 มาจากเซิร์ฟเวอร์แบ็กเอนด์ ให้ไปที่ การแก้ปัญหา

ขั้นตอนที่ 4: ใช้การตรวจสอบ API (ผู้ใช้ Public Cloud เท่านั้น)

การตรวจสอบ API ช่วยให้คุณแยกพื้นที่ที่มีปัญหา ได้อย่างรวดเร็วเพื่อวินิจฉัยข้อผิดพลาด ประสิทธิภาพ และปัญหาความหน่วง รวมถึงแหล่งที่มาของปัญหา เช่น แอปของนักพัฒนาแอป พร็อกซี API เป้าหมายแบ็กเอนด์ หรือแพลตฟอร์ม API

ดูสถานการณ์ตัวอย่าง ที่แสดงวิธีแก้ปัญหา 5xx เกี่ยวกับ API โดยใช้การตรวจสอบ API เช่น ตั้งค่าการแจ้งเตือนเพื่อแจ้งผู้ดูแลระบบเมื่อจำนวนรหัสสถานะ 504 เกินเกณฑ์ที่กำหนด

ความละเอียด

คุณสามารถใช้ขั้นตอนการวินิจฉัยที่ระบุไว้ข้างต้นเพื่อทำงานร่วมกับทีมเซิร์ฟเวอร์แบ็กเอนด์ในการแก้ไข ปัญหาในเซิร์ฟเวอร์แบ็กเอนด์ ซึ่งอาจรวมถึงการปรับค่าการหมดเวลาในเซิร์ฟเวอร์แบ็กเอนด์หรือ ค่าการหมดเวลาในตัวปรับสมดุลโหลดที่อยู่ด้านหน้าเซิร์ฟเวอร์เป้าหมาย

รวบรวมข้อมูลการวินิจฉัย

หากยังพบปัญหาอยู่ โปรดแชร์ข้อมูลการวินิจฉัยต่อไปนี้กับ ทีมสนับสนุนของ Apigee

หากคุณเป็นผู้ใช้ Public Cloud โปรดระบุข้อมูลต่อไปนี้

  • ชื่อองค์กร
  • ชื่อสภาพแวดล้อม
  • ชื่อพร็อกซี API
  • คำสั่ง curl แบบสมบูรณ์ที่ใช้ในการจำลองการตอบกลับข้อผิดพลาด 504
  • ไฟล์ Trace ที่มีคำขอ API ซึ่งได้รับการตอบกลับข้อผิดพลาด 504 Gateway Timeout

หากคุณเป็นผู้ใช้ Private Cloud โปรดระบุข้อมูลต่อไปนี้

  • ข้อความแสดงข้อผิดพลาดแบบสมบูรณ์ที่พบสำหรับคำขอที่ล้มเหลว
  • ชื่อสภาพแวดล้อม
  • ชุดรวมพร็อกซี API
  • ไฟล์ Trace ที่มีคำขอ API ซึ่งได้รับการตอบกลับข้อผิดพลาด 504 Gateway Timeout
  • บันทึกการเข้าถึงของ NGINX
    /opt/apigee/var/log/edge-router/nginx/ ORG ~ENV.PORT# _access_log 
  • บันทึกของ Message Processor
    /opt/apigee/var/log/edge-message-processor/logs/system.log