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

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

ลักษณะปัญหา

แอปพลิเคชันไคลเอ็นต์ได้รับรหัสสถานะ HTTP 504 พร้อมข้อความ "หมดเวลาของเกตเวย์" เพื่อตอบสนองการเรียก 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 คือ ไคลเอ็นต์ -> เราเตอร์ -> ตัวประมวลผลข้อความ -> เซิร์ฟเวอร์แบ็กเอนด์ดังที่แสดงในรูปด้านล่าง

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

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

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

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

สาเหตุ คำอธิบาย วิธีแก้ปัญหาสำหรับ
เซิร์ฟเวอร์แบ็กเอนด์ที่ตอบสนองด้วยเกตเวย์ 504 หมดเวลา เซิร์ฟเวอร์แบ็กเอนด์จะหมดเวลาและแสดงการตอบสนองของเกตเวย์ 504 หมดเวลาไปยังตัวประมวลผลข้อความ ผู้ใช้ Edge Private และระบบคลาวด์สาธารณะ

เซิร์ฟเวอร์แบ็กเอนด์ที่ตอบสนองด้วยเกตเวย์ 504 หมดเวลา

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

การวินิจฉัย

ส่วนนี้จะอธิบายวิธีการวินิจฉัยระยะหมดเวลาของเกตเวย์ 504 อย่างถูกต้อง ขั้นตอนสำหรับทั้งส่วนบุคคลและ ระบบจะแสดงผู้ใช้ระบบคลาวด์สาธารณะ

ขั้นตอนที่ 1: การใช้การติดตาม (ผู้ใช้ระบบคลาวด์ส่วนตัวและระบบคลาวด์สาธารณะ)

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

    รายละเอียดของเฟสจาก UI

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

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

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

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

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

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

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

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

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

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

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

ขั้นตอนที่ 4: การใช้การตรวจสอบ API (ผู้ใช้ระบบคลาวด์สาธารณะเท่านั้น)

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

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

ความละเอียด

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

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

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

หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ ให้ระบุข้อมูลต่อไปนี้

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

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

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