503 ไม่พร้อมให้บริการ

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

วิดีโอ

ดูข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาด 503 ได้ในวิดีโอต่อไปนี้

วิดีโอ คำอธิบาย
แก้ปัญหาและแก้ไขข้อผิดพลาด 503 บริการไม่พร้อมใช้งานเนื่องจากปัญหา DNS ดูข้อมูลเกี่ยวกับสิ่งต่อไปนี้
  • ข้อผิดพลาด 503 บริการไม่พร้อมใช้งานเกิดจากปัญหาที่เกี่ยวข้องกับการแปลง DNS และเครือข่ายใน Apigee Edge
  • การแก้ปัญหาและแก้ไขข้อผิดพลาด 503 บริการไม่พร้อมใช้งานแบบเรียลไทม์ที่เกิดจากปัญหาการแปลง DNS
แก้ปัญหาข้อผิดพลาด 503 ไม่พร้อมให้บริการเนื่องจากปัญหาเครือข่าย การแก้ปัญหาและแก้ไขข้อผิดพลาด 503 บริการไม่พร้อมใช้งานแบบเรียลไทม์ที่เกิดจากปัญหาเครือข่ายใน Apigee Edge

ลักษณะปัญหา

แอปพลิเคชันไคลเอ็นต์ได้รับสถานะการตอบกลับ HTTP 503 พร้อมข้อความบริการไม่พร้อมใช้งาน หลังจากเรียกใช้พร็อกซี API

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

คุณอาจเห็นข้อความแสดงข้อผิดพลาดต่อไปนี้

HTTP/1.1 503 Service Unavailable
      

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

บริการไม่พร้อมใช้งาน

{
   "fault": {
      "faultstring": "The Service is temporarily unavailable",
      "detail": {
           "errorcode": "messaging.adaptors.http.flow.ServiceUnavailable"
       }
    }
}
      

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

การตอบกลับ HTTP 503 Service Unavailable ที่มีรหัสข้อผิดพลาด messaging.adaptors.http.flow.ServiceUnavailable จะเกิดขึ้นหาก Message Processor ของ Apigee Edge พบข้อผิดพลาดเนื่องจากหมดเวลาการเชื่อมต่อ ชื่อโฮสต์ไม่ถูกต้อง หรือการแฮนด์เชค SSL ไม่สำเร็จ ขณะสื่อสารกับเซิร์ฟเวอร์แบ็กเอนด์

สาเหตุที่อาจทำให้เกิดการตอบกลับ 503 Service Unavailable มีดังนี้

สาเหตุ คำอธิบาย ผู้ที่มีสิทธิ์ทำตามขั้นตอนการแก้ปัญหา
ข้อผิดพลาดในการเชื่อมต่อเนื่องจากการแปลง DNS ไม่ถูกต้อง การแปลง DNS ของเซิร์ฟเวอร์เป้าหมายส่งผลให้ได้ที่อยู่ IP ที่ไม่ถูกต้องซึ่งทำให้เกิดข้อผิดพลาดในการเชื่อมต่อ ผู้ใช้ Edge Private Cloud
ข้อผิดพลาดในการเชื่อมต่อ ปัญหาเกี่ยวกับเครือข่ายหรือการเชื่อมต่อทำให้ไคลเอ็นต์เชื่อมต่อกับเซิร์ฟเวอร์ไม่ได้ ผู้ใช้ Edge Private Cloud
ชื่อโฮสต์ของเซิร์ฟเวอร์เป้าหมายไม่ถูกต้อง โฮสต์เซิร์ฟเวอร์เป้าหมายที่ระบุไม่ถูกต้องหรือมีอักขระที่ไม่ต้องการ (เช่น ช่องว่าง) ผู้ใช้ Edge Public และ Private Cloud
แฮนด์เชค SSL ไม่สำเร็จ แฮนด์เชค TLS/SSL ระหว่างไคลเอ็นต์กับเซิร์ฟเวอร์ไม่สำเร็จ (การแก้ปัญหาสำหรับปัญหาประเภทนี้ จะกล่าวถึงในหัวข้อแยกต่างหาก) ผู้ใช้ Edge Public และ Private Cloud

ขั้นตอนการวินิจฉัยที่พบบ่อย

กำหนดรหัสข้อความของคำขอที่ไม่สำเร็จ

เครื่องมือติดตาม

วิธีหารหัสข้อความของคำขอที่ไม่สำเร็จโดยใช้เครื่องมือติดตาม

  1. หากปัญหายังคงเกิดขึ้น ให้เปิดใช้เซสชันการติดตามสำหรับ API ที่ได้รับผลกระทบ
  2. ทำการเรียก API และทำซ้ำปัญหา - 503 ไม่พร้อมให้บริการโดยมีรหัสข้อผิดพลาด messaging.adaptors.http.flow.ServiceUnavailable.
  3. เลือกคำขอที่ล้มเหลวรายการใดรายการหนึ่ง
  4. ไปที่ระยะ AX และระบุรหัสข้อความ (X-Apigee.Message-ID) ของคำขอโดยเลื่อนลงในส่วนรายละเอียดระยะตามที่แสดงในรูปภาพต่อไปนี้

    รหัสข้อความในส่วนรายละเอียดระยะ

บันทึกการเข้าถึง NGINX

วิธีกำหนดรหัสข้อความของคำขอที่ไม่สำเร็จโดยใช้บันทึกการเข้าถึง NGINX

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

  1. ตรวจสอบบันทึกการเข้าถึง NGINX: (/opt/apigee/var/log/edge-router/nginx/ <org>~ <env>.<port#>_access_log)
  2. ค้นหาว่ามีข้อผิดพลาด 503 สำหรับพร็อกซี API ที่เฉพาะเจาะจงในช่วงระยะเวลาหนึ่งๆ หรือไม่ (หากปัญหาเกิดขึ้นในอดีต) หรือมีคำขอใดที่ยังคงล้มเหลวด้วยข้อผิดพลาด 503 หรือไม่
  3. หากมีข้อผิดพลาด 503 ที่มีข้อความ X-Apigee-fault-code messaging.adaptors.http.flow.ServiceUnavailable ให้จดรหัสข้อความสำหรับคำขอดังกล่าวอย่างน้อย 1 รายการตามที่แสดงในตัวอย่างต่อไปนี้

    รายการตัวอย่างที่แสดงข้อผิดพลาด 503

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

ข้อผิดพลาดในการเชื่อมต่อเนื่องจากการแปลง DNS ไม่ถูกต้อง

การวินิจฉัย

  1. กำหนดรหัสข้อความของคำขอที่ไม่สำเร็จ
  2. ค้นหารหัสข้อความคำขอที่เฉพาะเจาะจงในบันทึกของ Message Processor (/opt/apigee/var/log/edge-message-processor/logs/system.log) คุณอาจเห็นข้อผิดพลาดต่อไปนี้

    ข้อผิดพลาด onConnectTimeout แสดงว่า Message Processor เชื่อมต่อกับเซิร์ฟเวอร์แบ็กเอนด์ไม่ได้ภายในระยะหมดเวลาการเชื่อมต่อที่กำหนดไว้ล่วงหน้า (ค่าเริ่มต้น: 3 วินาที)
    2019-08-14 09:11:49,314 org:myorg env:prod api:Employees rev:1 messageid:mo-96cf6757a-9401-21-1 NIOThread@0 ERROR HTTP.CLIENT - HTTPClient$Context.onTimeout() : ClientChannel[Connected:]@164162 useCount=1 bytesRead=0 bytesWritten=0 age=3001ms lastIO=3001ms .onConnectTimeout connectAddress=www.abc.com/11.11.11.11  resolvedAddress=www.abc.com/22.22.22.22
    
    2019-08-14 09:11:49,333 org:myorg env:prod api:Employees rev:1 messageid:mo-96cf6757a-9401-21-1 NIOThread@0 ERROR ADAPTORS.HTTP.FLOW - RequestWriteListener.onTimeout() : RequestWriteListener.onTimeout(HTTPRequest@6b393600)
          
  3. จดที่อยู่ IP ที่แก้ไขแล้วในข้อผิดพลาด onConnectTimeout และตรวจสอบว่าที่อยู่ IP ใช้ได้กับเซิร์ฟเวอร์แบ็กเอนด์หรือไม่ หากที่อยู่ IP ถูกต้อง ให้ไปที่ข้อผิดพลาดในการเชื่อมต่อ
  4. หากที่อยู่ IP ไม่ถูกต้อง สาเหตุน่าจะมาจากปัญหาเกี่ยวกับการแปลง DNS
  5. ทำขั้นตอนที่ 3 และ 4 ซ้ำสำหรับคำขอ API ที่ล้มเหลวอีก 2-3 รายการ และตรวจสอบว่าคุณเห็นที่อยู่ IP เดียวกันหรือที่อยู่ IP อื่นๆ ที่ไม่ถูกต้องหรือไม่
  6. ค้นหาในบันทึกของ Message Processor (/opt/apigee/var/log/edge-message-processor/logs/system.log) เพื่อหาข้อความที่มีคีย์เวิร์ด DNS Refresh ตรวจสอบว่ามีการเพิ่มที่อยู่ IP ที่ไม่ถูกต้องหรือไม่ถูกต้องลงในแคช DNS ใน Message Processor เป็นครั้งคราวหรือไม่
    2019-08-14 09:11:49,314 org:myorg env:prod api:Employees rev:1 messageid:mo-96cf6757a-9401-21-1 NIOThread@0 INFO c.a.p.h.d.DNSCachedAddress - DNSCachedAddress.reportDifferences() : DNS Refresh for host: apitarget-uat.schemeweb.co.uk:4436. Added 2 IPs [www.abc.com/22.22.22.22, www.abc.com/33.33.33.33] Removed 1 IPs [www.abc.com/11.11.11.11]
          
  7. ปัญหานี้อาจเกิดขึ้นหากมีปัญหาเกี่ยวกับเซิร์ฟเวอร์ DNS ที่เชื่อถือได้หรือเนมเซิร์ฟเวอร์ที่กำหนดค่าไว้ใน /etc/resolv.conf

    โดยปกติแล้ว อาจมีการกำหนดค่าเซิร์ฟเวอร์ DNS ที่เชื่อถือได้อย่างน้อย 1 รายการเพื่อทำการแปลง DNS หากไม่มีเซิร์ฟเวอร์ DNS ที่เชื่อถือได้ ระบบจะกลับไปใช้การตั้งค่าที่กำหนดไว้ใน /etc/resolv.conf และทำการแปลง DNS ตามความเหมาะสม เช่น หากมีการกำหนดค่า /etc/resolv.conf ให้ใช้เนมเซิร์ฟเวอร์ที่เฉพาะเจาะจง ระบบก็จะใช้เนมเซิร์ฟเวอร์เหล่านั้นเพื่อทำการแปลง DNS
  8. หากมีปัญหาเกี่ยวกับเซิร์ฟเวอร์ DNS ที่เชื่อถือได้หรือเนมเซิร์ฟเวอร์ที่ระบุใน /etc/resolv.conf ระบบจะแปลงชื่อโฮสต์ของเซิร์ฟเวอร์แบ็กเอนด์เป็นที่อยู่ IP ที่ไม่ถูกต้อง/ใช้ไม่ได้ จากนั้นระบบจะจัดเก็บที่อยู่ IP ที่ไม่ถูกต้อง/ใช้ไม่ได้ไว้ในแคช DNS ของ Message Processor
    1. หากปัญหาเกี่ยวกับเซิร์ฟเวอร์ DNS ที่เชื่อถือได้หรือเนมเซิร์ฟเวอร์ที่ระบุใน /etc/resolv.conf ยังคงอยู่ ที่อยู่ IP ที่ไม่ถูกต้อง/ไม่ถูกต้องจะยังคงอยู่ในแคช DNS ของ Message Processor ต่อไป ตราบใดที่ระบบจัดเก็บที่อยู่ IP ที่ไม่ดีไว้ในแคช DNS ของ Message Processor คำขอสำหรับ API ทั้งหมดที่ใช้เซิร์ฟเวอร์แบ็กเอนด์ที่เฉพาะเจาะจงจะล้มเหลวโดยมีข้อผิดพลาด 503
    2. หากปัญหาเกี่ยวกับเซิร์ฟเวอร์ DNS ที่เชื่อถือได้หรือเนมเซิร์ฟเวอร์ที่ระบุใน /etc/resolv.conf เกิดขึ้นเป็นระยะๆ ระบบจะจัดเก็บที่อยู่ IP ที่ดีและไม่ดีไว้ในแคช DNS เป็นระยะๆ ในกรณีนี้ คุณจะเห็นข้อผิดพลาด 503 เป็นระยะๆ สำหรับ API ทั้งหมดที่ใช้เซิร์ฟเวอร์แบ็กเอนด์ที่เฉพาะเจาะจง
  9. หากปัญหาเกี่ยวกับเซิร์ฟเวอร์ DNS ยังคงอยู่ คุณจะเห็นว่าการเชื่อมต่อล้มเหลวอย่างต่อเนื่อง หากปัญหาเกี่ยวกับเซิร์ฟเวอร์ DNS เกิดขึ้นเป็นระยะๆ คุณจะเห็นว่าการดำเนินการล้มเหลวเป็นระยะๆ กล่าวคือ เมื่อใดก็ตามที่ชื่อโฮสต์ของเซิร์ฟเวอร์แบ็กเอนด์ได้รับการแก้ไขเป็นที่อยู่ IP ที่ไม่ถูกต้อง คุณจะเห็นข้อผิดพลาด 503 และเมื่อชื่อโฮสต์ของเซิร์ฟเวอร์แบ็กเอนด์ได้รับการแก้ไขเป็นที่อยู่ IP ที่ดี คุณจะเห็นการตอบกลับที่สำเร็จ

ความละเอียด

โปรดประสานงานกับผู้ดูแลระบบปฏิบัติการและแก้ไขปัญหาเกี่ยวกับเซิร์ฟเวอร์ DNS

  1. หากมีปัญหาเกี่ยวกับเซิร์ฟเวอร์ DNS ที่เชื่อถือได้หรือเนมเซิร์ฟเวอร์ที่ระบุไว้ใน /etc/resolv.conf ให้แก้ไขปัญหาในเซิร์ฟเวอร์ที่เหมาะสมเพื่อจัดการปัญหานี้
  2. หากมีปัญหาเกี่ยวกับการกำหนดค่าใน /etc/resolv.conf ในระบบที่มีตัวประมวลผลข้อความ ให้แก้ไขปัญหาการกำหนดค่า

ข้อผิดพลาดในการเชื่อมต่อ

ข้อผิดพลาดในการเชื่อมต่อจะเกิดขึ้นเมื่อ Message Processor ของ Apigee Edge พยายามเชื่อมต่อกับเซิร์ฟเวอร์แบ็กเอนด์ และเกิดปัญหาอย่างใดอย่างหนึ่งต่อไปนี้

  • Message Processor เชื่อมต่อภายในระยะหมดเวลาการเชื่อมต่อที่ตั้งค่าไว้ล่วงหน้าไม่ได้ (ค่าเริ่มต้น: 3 วินาที)
  • เซิร์ฟเวอร์แบ็กเอนด์ปฏิเสธการเชื่อมต่อ

การวินิจฉัย

  1. กำหนดรหัสข้อความของคำขอที่ไม่สำเร็จ
  2. ค้นหารหัสข้อความคำขอที่เฉพาะเจาะจงในบันทึกของ Message Processor (/opt/apigee/var/log/edge-message-processor/logs/system.log) คุณอาจเห็นข้อผิดพลาดต่อไปนี้
    1. ข้อผิดพลาด onConnectTimeout แสดงว่า Message Processor เชื่อมต่อกับเซิร์ฟเวอร์แบ็กเอนด์ภายในระยะหมดเวลาการเชื่อมต่อที่กำหนดไว้ล่วงหน้าไม่ได้
      2016-06-23 09:11:49,314 org:myorg env:prod api:Employees rev:1 messageid:mo-96cf6757a-9401-21-1 NIOThread@2 ERROR HTTP.CLIENT - HTTPClient$Context.onTimeout() : ClientChannel[C:]@10 useCount=1 bytesRead=0 bytesWritten=0 age=3001ms lastIO=3001ms .onConnectTimeout connectAddress=www.abc.com/11.11.11.11:80 resolvedAddress=www.abc.com/11.11.11.11
      2016-06-23 09:11:49,333 org:myorg env:prod api:Employees rev:1 messageid:mo-96cf6757a-9401-21-1 NIOThread@2 ERROR ADAPTORS.HTTP.FLOW - RequestWriteListener.onTimeout() : RequestWriteListener.onTimeout(HTTPRequest@6b393600)
    2. ข้อผิดพลาด java.net.ConnectException: Connection refused แสดงว่าเซิร์ฟเวอร์แบ็กเอนด์ปฏิเสธการเชื่อมต่อ
      14:40:16.531 +0530
      2016-06-17 09:10:16,531 org:myorg env:prod api:www.abc.com rev:1 rrt07eadn-22739-40983870-15 NIOThread@2 ERROR HTTP.CLIENT - HTTPClient$Context.onConnectFailure() : connect to www.abc.com:11.11.11.11:443 failed with exception {}
      java.net.ConnectException: Connection refused
      at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[na:1.7.0_75]
      at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:739) ~[na:1.7.0_75]
      at com.apigee.nio.ClientChannel.finishConnect(ClientChannel.java:121) ~[nio-1.0.0.jar:na]
      at com.apigee.nio.handlers.NIOThread.run(NIOThread.java:108) ~[nio-1.0.0.jar:na]
  3. ตรวจสอบว่าคุณเชื่อมต่อกับเซิร์ฟเวอร์แบ็กเอนด์ที่เฉพาะเจาะจงได้โดยตรงจาก Message Processor แต่ละรายการโดยใช้คำสั่ง telnet ดังนี้
    1. หากเซิร์ฟเวอร์แบ็กเอนด์เปลี่ยนเป็นที่อยู่ IP เดียว ให้ใช้คำสั่งต่อไปนี้
      telnet BackendServer-IPaddress 443
                
    2. หากเซิร์ฟเวอร์แบ็กเอนด์แก้ไขเป็นที่อยู่ IP หลายรายการ ให้ใช้ชื่อโฮสต์ของ เซิร์ฟเวอร์แบ็กเอนด์ในคำสั่ง telnet ดังที่แสดงด้านล่าง
      telnet BackendServer-HostName 443
                
  4. หากเชื่อมต่อกับเซิร์ฟเวอร์แบ็กเอนด์ได้ คุณอาจเห็นข้อความเช่น Connected to backend-server หากเชื่อมต่อกับเซิร์ฟเวอร์แบ็กเอนด์ไม่ได้ อาจเป็นเพราะที่อยู่ IP ของ Message Processor ไม่ได้อยู่ในรายการที่อนุญาตในเซิร์ฟเวอร์แบ็กเอนด์ที่เฉพาะเจาะจง

ความละเอียด

ให้สิทธิ์เข้าถึงที่อยู่ IP ของ Message Processor ในเซิร์ฟเวอร์แบ็กเอนด์ที่เฉพาะเจาะจงเพื่ออนุญาต การเข้าชมจาก Edge Message Processor ให้เข้าถึงเซิร์ฟเวอร์แบ็กเอนด์ของคุณ เช่น ใน Linux คุณสามารถใช้ iptables เพื่ออนุญาตการรับส่งข้อมูลจากที่อยู่ IP ของ Message Processor ในเซิร์ฟเวอร์แบ็กเอนด์

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

ชื่อโฮสต์ของเซิร์ฟเวอร์เป้าหมายไม่ถูกต้อง

การวินิจฉัย

หากชื่อโฮสต์ที่ระบุในเซิร์ฟเวอร์เป้าหมายไม่ถูกต้อง คุณจะได้รับการตอบกลับ 503 ไม่พร้อมให้บริการ พร้อมรหัสข้อผิดพลาด messaging.adaptors.http.flow.ServiceUnavailable.

เครื่องมือติดตาม

วิธีวินิจฉัยโดยใช้เครื่องมือติดตาม

  1. หากปัญหายังคงเกิดขึ้น ให้เปิดใช้เซสชันการติดตามสำหรับ API ที่ได้รับผลกระทบ
  2. ทำการเรียก API และทำซ้ำปัญหา - 503 ไม่พร้อมให้บริการโดยมีรหัสข้อผิดพลาด messaging.adaptors.http.flow.ServiceUnavailable.
  3. เลือกคำขอที่ล้มเหลวรายการใดรายการหนึ่ง
  4. ไปยังส่วนต่างๆ ของการติดตาม และค้นหาจุดที่เกิดข้อผิดพลาด
  5. เลือก FlowInfo ที่มีข้อผิดพลาด คุณดูข้อมูลเพิ่มเติมได้ในฟิลด์ error.cause ซึ่งจะบอกสาเหตุที่ทำให้เกิดข้อผิดพลาดได้ ดังตัวอย่างต่อไปนี้

    คำขอตัวอย่างที่แสดงข้อผิดพลาด.สาเหตุในร่องรอย

    คำขอตัวอย่างที่แสดง error.cause ในการติดตาม
  6. หากสังเกตเห็นว่า error.cause แสดง Host not reachable สาเหตุที่อาจทำให้เกิดข้อผิดพลาดคือข้อใดข้อหนึ่งต่อไปนี้
    • ชื่อโฮสต์ที่ระบุในการกำหนดค่าเซิร์ฟเวอร์เป้าหมาย/ปลายทางเป้าหมายไม่ถูกต้อง หรือมีช่องว่างหรืออักขระพิเศษที่ไม่ต้องการ

      เช่น มีช่องว่างที่ไม่ต้องการในชื่อโฮสต์ดังที่แสดงด้านล่าง
      "demo-target.apigee.net "
                        
    • ชื่อโฮสต์ที่เขียนทับโดยตัวแปร target.url ใน API Proxy โดยใช้นโยบาย AssignMessage หรือ JavaScript ไม่ถูกต้อง หรือมีช่องว่างหรืออักขระพิเศษอื่นๆ ที่ไม่ต้องการ
  7. ตรวจสอบการกำหนดค่าปลายทางเป้าหมายและ/หรือคำจำกัดความของเซิร์ฟเวอร์เป้าหมายเพื่อดูว่าชื่อโฮสต์ของเซิร์ฟเวอร์เป้าหมายไม่ถูกต้องหรือมีช่องว่างหรืออักขระพิเศษที่ไม่ต้องการหรือไม่
  8. หากโฮสต์เซิร์ฟเวอร์เป้าหมายสร้างขึ้นแบบไดนามิก ให้ตรวจสอบนโยบายที่เหมาะสม (เช่น นโยบาย AssignMessage/JavaScript) ที่ใช้สร้าง ตรวจสอบว่าชื่อโฮสต์ของเซิร์ฟเวอร์เป้าหมายไม่ถูกต้อง หรือมีช่องว่างหรืออักขระพิเศษที่ไม่ต้องการ
  9. เมื่อทราบชื่อโฮสต์ของเซิร์ฟเวอร์เป้าหมายแล้ว ให้เรียกใช้คำสั่ง nslookup/dig ในชื่อโฮสต์เพื่อดูว่าแก้ไขได้หรือไม่

    เช่น การเรียกใช้คำสั่ง nslookup ในชื่อโฮสต์ที่มีช่องว่างที่ไม่ต้องการจะแสดงผลลัพธ์ต่อไปนี้

    nslookup "demo-target.apigee.net "
    Server:	49.205.75.2
    Address:	49.205.75.2#53
    
    ** server can't find demo-target.apigee.net\032: NXDOMAIN
  10. หากคำสั่งระบบปฏิบัติการ nslookup แก้ไขชื่อโฮสต์ไม่สำเร็จด้วย สาเหตุของปัญหานี้คือชื่อโฮสต์ที่ไม่ถูกต้องซึ่งใช้สำหรับเซิร์ฟเวอร์เป้าหมาย

    ไปที่ความละเอียด

บันทึกของ Message Processor

วิธีวินิจฉัยโดยใช้บันทึกของเครื่องมือประมวลผลข้อความ

  1. กำหนดรหัสข้อความของคำขอที่ไม่สำเร็จ
  2. ค้นหารหัสข้อความในบันทึกของ Message Processor (/opt/apigee/var/log/edge-message-processor/logs/system.log)
  3. หากคุณเห็นข้อความเตือน/ข้อความแสดงข้อผิดพลาดต่อไปนี้ แสดงว่า Message Processor แก้ไขชื่อโฮสต์ไม่ได้ เนื่องจากระบบจะเลื่อนข้อความ คุณจึงอาจไม่เห็นข้อความเตือนนี้สำหรับรหัสข้อความ/คำขอทั้งหมด
    org:myorg env:prod api:TestTargetServer rev:2 messageid:<messageid>  NIOThread@0 WARN S.HTTPCLIENTSERVICE - DNSCache$2.failed() : Failed to resolve hostname www.somehost.com . Reason mocktarget.apigee.net : Name or service not known. This log message will snooze for 2 hours
        
  4. จากนั้นจะตามด้วยข้อความเตือน ซึ่งตัวประมวลผลข้อความจะนำที่อยู่ออกจากแคช DNS เนื่องจากเข้าถึงโฮสต์เซิร์ฟเวอร์เป้าหมายไม่ได้
    org:myorg env:prod api:TestTargetServer rev:2 messageid:<messageid> NIOThread@0 WARN  c.a.p.h.d.DNSCachedAddress - DNSCachedAddress.addressNotReachable() : The last address has been removed from Address list null refreshing
        
  5. จากนั้นคุณอาจเห็นข้อความที่ Message Processor ล้มเหลวพร้อมข้อยกเว้น "เข้าถึงโฮสต์ไม่ได้" บางครั้งข้อความแสดงข้อผิดพลาดจะแสดงชื่อโฮสต์ด้วย
    org:myorg env:prod api:TestTargetServer rev:2 messageid:<messageid>  NIOThread@0 ERROR HTTP.CLIENT - HTTPClient$Context.onConnectFailure() :  connect to demo-target.apigee.net  failed with exception {}
    java.lang.RuntimeException: Host not reachable
    	at com.apigee.protocol.http.HTTPClient$Context.initConnect(HTTPClient.java:704)
    	at com.apigee.protocol.http.HTTPClient$Context.send(HTTPClient.java:675)
    	at com.apigee.messaging.adaptors.http.flow.data.TargetRequestSender.sendRequest(TargetRequestSender.java:234)
    	<snipped>
        
  6. บางครั้งอาจแสดงเป็น null เนื่องจากแก้ไขชื่อโฮสต์ไม่ได้หรือเข้าถึงไม่ได้ ดังที่แสดงด้านล่าง
    org:myorg env:prod api:TestTargetServer rev:2 messageid:<messageid>  NIOThread@0 ERROR HTTP.CLIENT - HTTPClient$Context.onConnectFailure() :  connect to null failed with exception {}
    java.lang.RuntimeException: Host not reachable
    	at com.apigee.protocol.http.HTTPClient$Context.initConnect(HTTPClient.java:704)
    	at com.apigee.protocol.http.HTTPClient$Context.send(HTTPClient.java:675)
    	at com.apigee.messaging.adaptors.http.flow.data.TargetRequestSender.sendRequest(TargetRequestSender.java:234)
    	<snipped>
        
  7. ข้อผิดพลาด Host not reachable มักเกิดขึ้นในกรณีใดกรณีหนึ่งต่อไปนี้
    • ชื่อโฮสต์ที่ระบุในการกำหนดค่าเซิร์ฟเวอร์เป้าหมาย/ปลายทางเป้าหมายไม่ถูกต้อง หรือมีช่องว่างหรืออักขระพิเศษที่ไม่ต้องการ

      เช่น มีช่องว่างที่ไม่ต้องการในชื่อโฮสต์ "demo-target.apigee.net " ในข้อความแสดงข้อผิดพลาดต่อไปนี้
      NIOThread@0 ERROR HTTP.CLIENT - HTTPClient$Context.onConnectFailure() :  connect to demo-target.apigee.net  failed with exception
              
    • ชื่อโฮสต์ที่เขียนทับโดยตัวแปร target.url ใน API Proxy โดยใช้นโยบาย AssignMessage หรือ JavaScript ไม่ถูกต้อง หรือมีช่องว่างหรืออักขระพิเศษอื่นๆ ที่ไม่ต้องการ
  8. กำหนดชื่อโฮสต์ของเซิร์ฟเวอร์เป้าหมายที่ Message Processor พยายามสื่อสารโดยใช้รายการใดรายการหนึ่งต่อไปนี้
    1. ตรวจสอบข้อความแสดงข้อผิดพลาดที่มีHost not reachable อย่างละเอียด
    2. หากข้อความแสดงข้อผิดพลาดแสดงชื่อโฮสต์ ให้คัดลอกชื่อโฮสต์รวมถึงช่องว่างหรือสัญลักษณ์พิเศษ
    3. หากข้อความแสดงข้อผิดพลาดแสดง null สำหรับชื่อโฮสต์ตามที่เห็นในข้อความแสดงข้อผิดพลาดต่อไปนี้
      org:myorg env:prod api:TestTargetServer rev:2 messageid:<messageid>  NIOThread@0 ERROR HTTP.CLIENT - HTTPClient$Context.onConnectFailure() :  connect to null failed with exception {}
              
      1. กำหนดชื่อโฮสต์โดยตรวจสอบคำจำกัดความของเซิร์ฟเวอร์เป้าหมายที่ใช้ใน API Proxy ที่ล้มเหลว
      2. หากโฮสต์เซิร์ฟเวอร์เป้าหมายสร้างขึ้นแบบไดนามิก ให้ตรวจสอบนโยบายที่เหมาะสม (เช่น AssignMessage/JavaScript policy) ที่ใช้สร้าง
  9. เมื่อทราบชื่อโฮสต์ของเซิร์ฟเวอร์เป้าหมายแล้ว ให้เรียกใช้คำสั่ง nslookup/dig ในชื่อโฮสต์และตรวจสอบว่าแก้ไขได้หรือไม่

    เช่น เรียกใช้คำสั่ง nslookup ในชื่อโฮสต์ที่มีช่องว่าง

    nslookup "demo-target.apigee.net "
    Server:	49.205.75.2
    Address:	49.205.75.2#53
    
    ** server can't find demo-target.apigee.net\032: NXDOMAIN
          
  10. หากคำสั่งระบบปฏิบัติการ nslookup แก้ไขชื่อโฮสต์ไม่สำเร็จด้วยเช่นกัน สาเหตุของปัญหานี้คือชื่อโฮสต์ที่ไม่ถูกต้องซึ่งใช้สำหรับเซิร์ฟเวอร์เป้าหมาย

ความละเอียด

  1. ตรวจสอบว่าชื่อโฮสต์ของเซิร์ฟเวอร์เป้าหมายที่ระบุในการกำหนดค่าปลายทางเป้าหมายหรือในคำจำกัดความเซิร์ฟเวอร์เป้าหมาย ถูกต้องและไม่มีช่องว่างหรืออักขระพิเศษที่ไม่ต้องการ
  2. หากคุณใช้นโยบาย AssignMessage/JavaScript เพื่อสร้างชื่อโฮสต์ของเซิร์ฟเวอร์เป้าหมายแบบไดนามิก ให้ตรวจสอบคำจำกัดความของนโยบายและโค้ด และตรวจสอบว่าชื่อโฮสต์ของเซิร์ฟเวอร์เป้าหมายสร้างขึ้นอย่างถูกต้อง

แฮนด์เชค SSL ไม่สำเร็จ

คู่มือการแก้ปัญหาทั้งหมดจะอธิบายข้อผิดพลาดในการแฮนด์เชค TLS/SSL ดูแฮนด์เชค SSL ไม่สำเร็จ

การระบุแหล่งที่มาของปัญหา

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

ทำความเข้าใจการเชื่อมต่อแบบ Northbound และ Southbound

ใน Edge คุณอาจพบข้อผิดพลาด 503 ไม่พร้อมให้บริการในการเชื่อมต่อขาเข้าหรือขาออก

  • การเชื่อมต่อขาเข้า (หรือขาขึ้น) - การเชื่อมต่อระหว่างแอปพลิเคชันไคลเอ็นต์กับ Edge Router เราเตอร์เป็นคอมโพเนนต์ของ Apigee Edge ที่จัดการ คำขอขาเข้าที่ส่งไปยังระบบ
  • การเชื่อมต่อขาออก (หรือขาลง) - การเชื่อมต่อระหว่าง Edge Message Processor กับเซิร์ฟเวอร์แบ็กเอนด์ Message Processor เป็นคอมโพเนนต์ของ Apigee Edge ที่ทำหน้าที่เป็นพร็อกซีคำขอ API ไปยังเซิร์ฟเวอร์เป้าหมายแบ็กเอนด์

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

รูปต่อไปนี้แสดงการเชื่อมต่อขาเข้าและขาออกสำหรับ Apigee Edge

โฟลว์ของแอปพลิเคชันไคลเอ็นต์ (การเชื่อมต่อขาขึ้น) ผ่าน Edge ไปยังเซิร์ฟเวอร์แบ็กเอนด์ (การเชื่อมต่อขาลง)

การระบุตำแหน่งที่เกิดข้อผิดพลาด 503 ไม่พร้อมให้บริการ

ทำตามขั้นตอนใดขั้นตอนหนึ่งต่อไปนี้เพื่อตรวจสอบว่าเกิดข้อผิดพลาด 503 Service Unavailable ในการเชื่อมต่อขาขึ้นหรือขาลง

การติดตาม UI

วิธีระบุตำแหน่งที่เกิดข้อผิดพลาดโดยใช้การติดตาม UI

  1. หากปัญหายังคงเกิดขึ้น ให้เปิดใช้การติดตาม UI สำหรับ API ที่ได้รับผลกระทบ
  2. หากการติดตาม UI สำหรับคำขอ API ที่ล้มเหลวแสดงว่าเกิดข้อผิดพลาด 503 บริการไม่พร้อมใช้งาน ในระหว่างโฟลว์คำขอเป้าหมายหรือส่งโดยเซิร์ฟเวอร์แบ็กเอนด์ แสดงว่าปัญหาอยู่ทางใต้ (นั่นคือระหว่าง Message Processor กับเซิร์ฟเวอร์แบ็กเอนด์)
  3. หากไม่ได้รับการติดตามสำหรับการเรียก API ที่เฉพาะเจาะจง แสดงว่าปัญหาอยู่ต้นทางระหว่างแอปพลิเคชันไคลเอ็นต์กับเราเตอร์

การตรวจสอบ API

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

ดูสถานการณ์ตัวอย่างที่แสดงวิธีแก้ปัญหา 5xx เกี่ยวกับ API โดยใช้การตรวจสอบ API เช่น คุณอาจต้องการตั้งค่าการแจ้งเตือนเพื่อให้ได้รับการแจ้งเตือนเมื่อจำนวนmessaging.adaptors.http.flow.ServiceUnavailableข้อบกพร่องเกินเกณฑ์ที่กำหนด

บันทึกการเข้าถึง NGINX

วิธีระบุตำแหน่งที่เกิดข้อผิดพลาดโดยใช้การติดตาม UI

หากปัญหาเกิดขึ้นในอดีตหรือเกิดขึ้นเป็นครั้งคราวและคุณไม่สามารถ บันทึกการติดตามได้ ให้ทำตามขั้นตอนต่อไปนี้

  1. ตรวจสอบบันทึกการเข้าถึง NGINX (/opt/apigee/var/log/edge-router/nginx/ org-env.port_access_log )
  2. ค้นหาว่ามีข้อผิดพลาด 503 สำหรับพร็อกซี API ที่เฉพาะเจาะจงหรือไม่
  3. หากคุณระบุข้อผิดพลาด 503 สำหรับ API ที่เฉพาะเจาะจงในเวลาที่เฉพาะเจาะจงได้ แสดงว่าปัญหาเกิดขึ้นที่การเชื่อมต่อขาออก (ระหว่าง Message Processor กับเซิร์ฟเวอร์แบ็กเอนด์)
  4. หากไม่เป็นเช่นนั้น แสดงว่าปัญหาเกิดขึ้นที่การเชื่อมต่อขาขึ้น (ระหว่างแอปพลิเคชันไคลเอ็นต์กับเราเตอร์)