500 ข้อผิดพลาดภายในเซิร์ฟเวอร์ - เซิร์ฟเวอร์แบ็กเอนด์

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

วิดีโอ

วิดีโอ คำอธิบาย
500 ข้อผิดพลาดภายในเซิร์ฟเวอร์ - เกิดจากแบ็กเอนด์ แสดง 500 Internal Server Error แบบเรียลไทม์ที่เกิดจากเซิร์ฟเวอร์แบ็กเอนด์ พร้อมขั้นตอนการแก้ปัญหาและแก้ไขข้อผิดพลาด

ลักษณะปัญหา

แอปพลิเคชันไคลเอ็นต์ได้รับรหัสสถานะ HTTP 500 พร้อมข้อความ Internal Server Error เป็นการตอบกลับการเรียก API

รหัสสถานะ HTTP 500 คือการตอบกลับข้อผิดพลาดทั่วไป ซึ่งหมายความว่าเซิร์ฟเวอร์ พบเงื่อนไขที่ไม่คาดคิดซึ่งทำให้ไม่สามารถดำเนินการตามคำขอได้ โดยปกติแล้วเซิร์ฟเวอร์จะแสดงข้อผิดพลาดนี้ เมื่อไม่มีรหัสข้อผิดพลาดอื่นที่เหมาะสม

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

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

HTTP/1.1 500 Internal Server Error

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

ตัวอย่างที่ 1

ตัวอย่างการตอบกลับจากเซิร์ฟเวอร์แบ็กเอนด์ #1

{"errorMessage":"Sorry either your e-mail or password didn't match.",
"errorParameters":"{}",
"errorCode":"500",
"errorKey":"INVALID_EMAILPASSWORD"}

ตัวอย่างที่ 2

ตัวอย่างการตอบกลับจากเซิร์ฟเวอร์แบ็กเอนด์ #2

<Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
   <Body>
      <Error>
         <code>500</code>
         <message xml:lang="en-US">Not Authorised(e4138fa0-ec57).</message>
      </Error>
   </Body>
</Envelope>

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

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

สาเหตุที่เป็นไปได้ของปัญหามีดังนี้

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

ขั้นตอนการวินิจฉัยทั่วไป

ใช้เครื่องมือ/เทคนิคใดเทคนิคหนึ่งต่อไปนี้เพื่อวินิจฉัยข้อผิดพลาดนี้

การตรวจสอบ API

ขั้นตอนที่ 1: ใช้การตรวจสอบ API

วิธีวินิจฉัยข้อผิดพลาดโดยใช้การตรวจสอบ API

  1. ลงชื่อเข้าใช้ UI ของ Apigee Edge ในฐานะผู้ใช้ที่มี บทบาทที่เหมาะสม
  2. เปลี่ยนไปใช้องค์กรที่ต้องการตรวจสอบปัญหา

  3. ไปที่หน้า Analyze > API Monitoring > Investigate
  4. เลือกกรอบเวลาที่เฉพาะเจาะจงซึ่งคุณพบข้อผิดพลาด
  5. พล็อตรหัสข้อผิดพลาด เทียบกับเวลา

  6. เลือกเซลล์ที่มีรหัสข้อผิดพลาด messaging.adaptors.http.flow.ErrorResponseCode ดังที่แสดง ด้านล่าง

    ( ดูรูปภาพขนาดใหญ่ขึ้น)

  7. ข้อมูลเกี่ยวกับรหัสข้อผิดพลาด messaging.adaptors.http.flow.ErrorResponseCode จะแสดงดังที่ แสดงด้านล่าง

    ( ดูรูปภาพขนาดใหญ่ขึ้น)

  8. คลิกดูบันทึก แล้วขยายแถวสำหรับคำขอที่ไม่สำเร็จ

    ( ดูรูปภาพขนาดใหญ่ขึ้น)

  9. จากหน้าต่างบันทึก ให้จดรายละเอียดต่อไปนี้
    • รหัสข้อความคำขอ
    • รหัสสถานะ: 500
    • แหล่งที่มาของข้อผิดพลาด: target
    • รหัสข้อผิดพลาด: messaging.adaptors.http.flow.ErrorResponseCode

Trace

ขั้นตอนที่ 2: ใช้เครื่องมือ Trace

วิธีวินิจฉัยข้อผิดพลาดโดยใช้เครื่องมือ Trace

  1. เปิดใช้เซสชัน Trace แล้วทำอย่างใดอย่างหนึ่งต่อไปนี้
    • รอให้เกิดข้อผิดพลาด 500 Internal Server Error ที่มีรหัสข้อผิดพลาด messaging.adaptors.http.flow.ErrorResponseCode หรือ
    • หากจำลองปัญหาได้ ให้เรียก API เพื่อจำลองปัญหา 500 Internal Server Error
  2. ตรวจสอบว่าได้เปิดใช้แสดง FlowInfo ทั้งหมด แล้ว

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

    ( ดูรูปภาพขนาดใหญ่ขึ้น)

  6. ไปที่ระยะ AX (บันทึกข้อมูลวิเคราะห์) ใน Trace แล้วคลิก
  7. เลื่อนลงไปที่ส่วนรายละเอียดระยะ ส่วนหัวการตอบกลับ แล้วกำหนด ค่าของ X-Apigee-fault-code และ X-Apigee-fault-source รวมถึง X-Apigee-Message-ID ดังที่แสดงด้านล่าง

    ( ดูรูปภาพขนาดใหญ่ขึ้น)

  8. จดค่าของ X-Apigee-fault-code, X-Apigee-fault-source, และ X-Apigee-Message-ID:
  9. ส่วนหัวการตอบกลับ ค่า
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
    X-Apigee-fault-source target
    X-Apigee-Message-ID MESSAGE_ID

NGINX

ขั้นตอนที่ 3: ใช้บันทึกการเข้าถึง NGINX

วิธีวินิจฉัยข้อผิดพลาดโดยใช้บันทึกการเข้าถึง NGINX

  1. หากเป็นผู้ใช้ Private Cloud คุณสามารถใช้บันทึกการเข้าถึง NGINX เพื่อดูข้อมูลสำคัญเกี่ยวกับ HTTP 500 Internal Server Error
  2. ตรวจสอบบันทึกการเข้าถึง NGINX

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

  3. ค้นหาเพื่อดูว่ามีข้อผิดพลาด 500 ที่มีรหัสข้อผิดพลาด messaging.adaptors.http.flow.ErrorResponseCode ในช่วงระยะเวลาที่เฉพาะเจาะจง (หากปัญหาเกิดขึ้นในอดีต) หรือมีคำขอที่ยังคงล้มเหลวด้วยข้อผิดพลาด 500 หรือไม่
  4. หากพบข้อผิดพลาด 500 ที่มี X-Apigee-fault-code ตรงกับ ค่าของ messaging.adaptors.http.flow.ErrorResponseCode ให้ กำหนดค่าของ X-Apigee-fault-source

    ตัวอย่างข้อผิดพลาด 500 จากบันทึกการเข้าถึง NGINX:

    ( ดูรูปภาพขนาดใหญ่ขึ้น)

    รายการตัวอย่างข้างต้นจากบันทึกการเข้าถึง NGINX มีค่าต่อไปนี้สำหรับ X-Apigee-fault-code และ X-Apigee-fault-source:

    ส่วนหัว ค่า
    X-Apigee-fault-code messaging.adaptors.http.flow.ErrorResponseCode
    X-Apigee-fault-source target

สาเหตุ: ข้อผิดพลาดในเซิร์ฟเวอร์แบ็กเอนด์

การวินิจฉัย

500 Internal Server Error ที่เซิร์ฟเวอร์แบ็กเอนด์แสดงอาจเกิดจากสาเหตุหลายประการ คุณจะต้องวินิจฉัยแต่ละสถานการณ์แยกกัน

  1. กำหนดรหัสข้อผิดพลาด แหล่งที่มาของข้อผิดพลาด สำหรับข้อผิดพลาดที่พบโดยใช้การตรวจสอบ API, เครื่องมือ Trace หรือบันทึกการเข้าถึง NGINX ตามที่อธิบายไว้ในขั้นตอนการวินิจฉัยทั่วไป
  2. หากแหล่งที่มาของข้อผิดพลาด คือ target และรหัสข้อผิดพลาด คือ messaging.adaptors.http.flow.ErrorResponseCode แสดงว่า เซิร์ฟเวอร์แบ็กเอนด์แสดงข้อผิดพลาด
  3. คุณสามารถใช้ขั้นตอนใดขั้นตอนหนึ่งต่อไปนี้เพื่อวินิจฉัยสาเหตุของปัญหา

    Trace

    การใช้ Trace:

    หากมีเซสชัน Trace สำหรับความล้มเหลว ให้ทำตามขั้นตอนต่อไปนี้

    1. ใน Trace ให้เลือกคำขอ API ที่ล้มเหลวด้วย 500 Internal Server Error
    2. เลือกระยะได้รับคำตอบจากเซิร์ฟเวอร์เป้าหมาย จาก คำขอ API ที่ล้มเหลวดังที่แสดงในรูปภาพด้านล่าง

      ( ดูรูปภาพขนาดใหญ่ขึ้น)

    3. เลื่อนลงไปที่ส่วนรายละเอียดระยะ แล้วตรวจสอบ เนื้อหาการตอบกลับ ซึ่งมีการตอบกลับจากเซิร์ฟเวอร์แบ็กเอนด์

      ตัวอย่างเนื้อหาการตอบกลับ:

      <Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
         <Body>
            <Error>
               <code>500</code>
               <message xml:lang="en-US">Not Authorised(e4138fa0-ec57).</message>
            </Error>
         </Body>
      </Envelope>

      ในการตอบกลับข้างต้น ให้สังเกตว่าข้อความแสดงข้อผิดพลาดจากเซิร์ฟเวอร์แบ็กเอนด์คือ Not Authorised ซึ่งแสดงว่าผู้ใช้อาจส่งข้อมูลเข้าสู่ระบบที่ไม่ถูกต้อง และได้รับข้อผิดพลาดนี้

    เรียกเซิร์ฟเวอร์แบ็กเอนด์

    การเรียกเซิร์ฟเวอร์แบ็กเอนด์โดยตรง:

    คุณสามารถเรียกเซิร์ฟเวอร์แบ็กเอนด์โดยตรงและทำสิ่งต่อไปนี้ได้

    • ตรวจสอบว่าคุณได้รับคำตอบ 500 Internal Server Error เดียวกันกับที่ได้รับเมื่อส่งคำขอผ่าน Apigee Edge
    • ตรวจสอบข้อความแสดงข้อผิดพลาด (การตอบกลับ) ที่ได้รับจากเซิร์ฟเวอร์แบ็กเอนด์

    ทำตามขั้นตอนต่อไปนี้เพื่อเรียกเซิร์ฟเวอร์แบ็กเอนด์โดยตรง

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

    4. ตรวจสอบว่าบริการแบ็กเอนด์แสดง 500 Internal Server Error จริงๆ และตรวจสอบข้อความแสดงข้อผิดพลาด (การตอบกลับ) ที่เซิร์ฟเวอร์แบ็กเอนด์แสดง แล้ว กำหนดสาเหตุของข้อผิดพลาดนี้

    บันทึกเซิร์ฟเวอร์แบ็กเอนด์

    การใช้บันทึกเซิร์ฟเวอร์แบ็กเอนด์

    1. ตรวจสอบบันทึกเซิร์ฟเวอร์แบ็กเอนด์และพยายามดูรายละเอียดเพิ่มเติมเกี่ยวกับข้อผิดพลาดและ สาเหตุ
    2. หากเป็นไปได้ ให้เปิดใช้โหมดแก้ไขข้อบกพร่องในเซิร์ฟเวอร์แบ็กเอนด์เพื่อดูรายละเอียดเพิ่มเติม เกี่ยวกับข้อผิดพลาดและสาเหตุ
  4. ตรวจสอบว่าคุณใช้ การเชื่อมโยงพร็อกซี ในปลายทางเป้าหมายที่เฉพาะเจาะจงของพร็อกซี API ที่ล้มเหลวหรือไม่ นั่นคือ หากเซิร์ฟเวอร์เป้าหมาย/ปลายทางเป้าหมายเรียกใช้พร็อกซีอื่นใน Apigee Edge วิธีตรวจสอบ

    1. หากมี Trace สำหรับคำขอที่ล้มเหลว ให้ไปที่ระยะคำขอที่ส่ง ไปยังเซิร์ฟเวอร์เป้าหมาย แล้วคลิกแสดง Curl

    2. หน้าต่าง Curl สำหรับคำขอที่ส่งไปยังเซิร์ฟเวอร์เป้าหมาย จะเปิดขึ้น ซึ่งคุณ สามารถกำหนดนามแฝงโฮสต์ของเซิร์ฟเวอร์เป้าหมายได้
    3. ตรวจสอบปลายทางเป้าหมายของพร็อกซี API และดูว่า URL ของเซิร์ฟเวอร์แบ็กเอนด์ หรือชื่อโฮสต์ในเซิร์ฟเวอร์เป้าหมายชี้ไปยังพร็อกซีอื่นหรือเซิร์ฟเวอร์แบ็กเอนด์ของคุณเอง หรือไม่
    4. หากนามแฝงโฮสต์ของเซิร์ฟเวอร์เป้าหมายชี้ไปยังนามแฝงโฮสต์เสมือน แสดงว่าเป็นการเชื่อมโยงพร็อกซี ในกรณีนี้ คุณต้องทำซ้ำขั้นตอนทั้งหมดข้างต้นสำหรับ พร็อกซีที่เชื่อมโยงจนกว่าจะกำหนดได้ว่าอะไรเป็นสาเหตุของ500 Internal Server Error ในกรณีเหล่านี้ 500 Internal Server Error อาจ เกิดขึ้นในพร็อกซีที่เชื่อมโยงอื่นๆ ในระยะอื่นๆ ด้วย ซึ่งสามารถวินิจฉัยและ แก้ไขได้โดยใช้คำแนะนำที่ระบุไว้ในเพลย์บุ๊กนี้หรือใน เพลย์บุ๊ก 500 ข้อผิดพลาดภายในเซิร์ฟเวอร์
    5. หากนามแฝงโฮสต์ของเซิร์ฟเวอร์เป้าหมายชี้ไปยังเซิร์ฟเวอร์แบ็กเอนด์ ให้ไปที่ ส่วนการแก้ปัญหา

ความละเอียด

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

ในตัวอย่างที่กล่าวถึงข้างต้น คุณอาจต้องขอให้ผู้ใช้ส่งข้อมูลเข้าสู่ระบบที่ถูกต้องเพื่อแก้ไขปัญหานี้

ประเด็นสำคัญที่ควรทราบ

  1. คุณจะดูข้อความแสดงข้อผิดพลาดจริงที่เซิร์ฟเวอร์แบ็กเอนด์แสดงสำหรับข้อผิดพลาด 500 Internal Server Error ได้ก็ต่อเมื่อคุณได้บันทึกเซสชัน Trace สำหรับคำขอที่ล้มเหลว
  2. ระบบจะไม่บันทึกการตอบกลับจากเซิร์ฟเวอร์แบ็กเอนด์ในการตรวจสอบ API, บันทึกการเข้าถึง NGINX หรือ บันทึก Message Processor ด้วยเหตุผลด้านความปลอดภัย
  3. คุณสามารถตรวจสอบบันทึกเซิร์ฟเวอร์แบ็กเอนด์หรือเปิดใช้โหมดแก้ไขข้อบกพร่องในแบ็กเอนด์เพื่อดูรายละเอียดเพิ่มเติมเกี่ยวกับ 500 Internal Server Error และ/หรือดูข้อความแสดงข้อผิดพลาดที่เซิร์ฟเวอร์แบ็กเอนด์แสดง

ข้อมูลการวินิจฉัยที่ต้องรวบรวม

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

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

  • ชื่อองค์กร
  • ชื่อสภาพแวดล้อม
  • ชื่อพร็อกซี API
  • คำสั่ง curl ที่สมบูรณ์เพื่อจำลองข้อผิดพลาด 500
  • ไฟล์ Trace ที่มีคำขอซึ่งมีข้อผิดพลาด 500 Internal Server Error
  • หากข้อผิดพลาด 500 ไม่เกิดขึ้นในปัจจุบัน โปรดระบุช่วงเวลาพร้อมข้อมูลเขตเวลาที่เกิดข้อผิดพลาด 500 ในอดีต

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

  • ข้อความแสดงข้อผิดพลาดทั้งหมดที่พบสำหรับคำขอที่ล้มเหลว
  • ชื่อองค์กร ชื่อสภาพแวดล้อม และชื่อพร็อกซี API ที่คุณพบข้อผิดพลาด 500
  • ชุดรวมพร็อกซี API
  • ไฟล์ Trace ที่มีคำขอซึ่งมีข้อผิดพลาด 500 Internal Server Error
  • บันทึกการเข้าถึง NGINX /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    โดยที่: ORG, ENV, และ PORT# จะถูกแทนที่ด้วยค่าจริง

  • บันทึกของระบบ Message Processor /opt/apigee/var/log/edge-message-processor/logs/system.log
  • ช่วงเวลาพร้อมข้อมูลเขตเวลาที่เกิดข้อผิดพลาด 500