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

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

วิดีโอ

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

วิดีโอ คำอธิบาย
แก้ปัญหาและแก้ไขข้อผิดพลาด 503 ของบริการไม่พร้อมใช้งานเนื่องจากปัญหา DNS โปรดดูข้อมูลเกี่ยวกับสิ่งต่อไปนี้
  • 503 ข้อผิดพลาด "บริการไม่พร้อมใช้งาน" เกิดจากการแปลง DNS และปัญหาเกี่ยวกับเครือข่ายใน Apigee Edge
  • การแก้ปัญหาและการแก้ไขข้อผิดพลาด 503 Service Unavailable แบบเรียลไทม์ที่เกิดจากปัญหาการแก้ปัญหา DNS
แก้ปัญหาและแก้ไขข้อผิดพลาดของบริการ 503 ไม่ได้เนื่องจากปัญหาเกี่ยวกับเครือข่าย การแก้ปัญหาและการแก้ไขข้อผิดพลาด 503 Service Unavailable Error แบบเรียลไทม์ซึ่งเกิดจากปัญหาเครือข่ายใน 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 บริการไม่พร้อมใช้งานที่มีรหัสข้อผิดพลาด messaging.adaptors.http.flow.ServiceUnavailable เกิดขึ้นเมื่อ Message Processor ของ Apigee Edge พบข้อผิดพลาดเนื่องจากหมดเวลาการเชื่อมต่อ ชื่อโฮสต์ หรือความล้มเหลวในการแฮนด์เชค SSL ขณะสื่อสารกับเซิร์ฟเวอร์แบ็กเอนด์

สาเหตุที่เป็นไปได้สำหรับการตอบกลับ "503 บริการไม่พร้อมใช้งาน" มีดังนี้

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

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

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

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

วิธีระบุรหัสข้อความของคำขอที่ล้มเหลวโดยใช้เครื่องมือติดตาม

  1. หากปัญหายังคงอยู่ ให้เปิดใช้เซสชันการติดตามสำหรับ API ที่ได้รับผลกระทบ
  2. เรียก API และทำให้เกิดปัญหาซ้ำ - 503 บริการไม่พร้อมใช้งานโดยมีรหัสข้อผิดพลาด messaging.adaptors.http.flow.ServiceUnavailable.
  3. เลือกคำขอที่ไม่สำเร็จ 1 รายการ
  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. ค้นหาว่าพร็อกซี API ที่ระบุในช่วงระยะเวลาหนึ่งมีข้อผิดพลาด 503 หรือไม่ (หากเกิดปัญหาในอดีต) หรือหากมีคำขอที่ยังคงดำเนินการไม่สำเร็จด้วย 503
  3. หากมีข้อผิดพลาด 503 ใน X-Apigee-fault-codeการรับส่งข้อความ.adaptors.http.flow.ServiceUnavailable จดรหัสข้อความสําหรับคําขอดังกล่าวไว้อย่างน้อย 1 รายการ ดังที่แสดงในตัวอย่างต่อไปนี้

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

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

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

การวินิจฉัย

  1. ระบุรหัสข้อความของคำขอที่ไม่สำเร็จ
  2. ค้นหารหัสข้อความของคำขอในบันทึกเครื่องมือประมวลผลข้อความ (/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. ค้นหาข้อความที่มีคีย์เวิร์ด DNS Refresh ในบันทึก Message Processor (/opt/apigee/var/log/edge-message-processor/logs/system.log) ตรวจสอบว่ามีการเพิ่มที่อยู่ IP ที่ไม่ถูกต้องหรือไม่ถูกต้องไปยังแคช DNS บนตัวประมวลผลข้อความเป็นครั้งคราวหรือไม่
    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 ของโปรแกรมประมวลผลข้อความ
    1. หากปัญหาเกี่ยวกับเซิร์ฟเวอร์ DNS ที่เชื่อถือได้หรือเนมเซิร์ฟเวอร์ที่ระบุใน /etc/resolv.conf ยังคงอยู่อย่างต่อเนื่อง ที่อยู่ IP ที่ไม่ถูกต้อง/ไม่ถูกต้องจะยังคงอยู่ในแคช DNS ของโปรแกรมประมวลผลข้อความ ตราบใดที่ที่อยู่ IP ที่ไม่ถูกต้องเก็บไว้ในแคช DNS ของโปรแกรมประมวลผลข้อความ คำขอสำหรับ 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. ค้นหารหัสข้อความของคำขอในบันทึกเครื่องมือประมวลผลข้อความ (/opt/apigee/var/log/edge-message-processor/logs/system.log) คุณอาจสังเกตเห็นข้อผิดพลาดต่อไปนี้
    1. ข้อผิดพลาด onConnectTimeout ระบุว่าเครื่องมือประมวลผลข้อความไม่สามารถ เชื่อมต่อกับเซิร์ฟเวอร์แบ็กเอนด์ภายในระยะหมดเวลาของการเชื่อมต่อที่กำหนดล่วงหน้า
      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: การเชื่อมต่อถูกปฏิเสธระบุการเชื่อมต่อ ถูกปฏิเสธโดยเซิร์ฟเวอร์แบ็กเอนด์
      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. ตรวจสอบว่าคุณสามารถเชื่อมต่อกับเซิร์ฟเวอร์แบ็กเอนด์ที่เจาะจงจาก ตัวประมวลผลข้อความที่ใช้คำสั่ง telnet:
    1. หากเซิร์ฟเวอร์แบ็กเอนด์แก้ไขเป็นที่อยู่ IP เดียว ให้ใช้คำสั่งต่อไปนี้
      telnet BackendServer-IPaddress 443
                
    2. หากเซิร์ฟเวอร์แบ็กเอนด์แก้ไขเป็นที่อยู่ IP หลายรายการ ให้ใช้ชื่อโฮสต์ของ เซิร์ฟเวอร์แบ็กเอนด์ในคำสั่ง telnet ดังที่แสดงด้านล่าง วันที่
      telnet BackendServer-HostName 443
                
  4. หากเชื่อมต่อกับเซิร์ฟเวอร์แบ็กเอนด์ได้ คุณอาจเห็นข้อความอย่างเช่น Connected to backend-server หากคุณไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์แบ็กเอนด์ เนื่องจากเครื่องมือประมวลผลข้อความ ที่อยู่ IP ไม่อยู่ในรายการที่อนุญาตในแบ็กเอนด์ที่เจาะจง เซิร์ฟเวอร์

ความละเอียด

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

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

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

การวินิจฉัย

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

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

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

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

    คำขอตัวอย่างที่แสดง error.cause ในการติดตาม

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

      เช่น มีการเว้นวรรคที่ไม่พึงประสงค์ในชื่อโฮสต์ดังที่แสดงด้านล่าง
      วันที่
      "demo-target.apigee.net "
                        
    • ชื่อโฮสต์ถูกแทนที่โดยตัวแปร target.url ในพร็อกซี API โดยใช้ 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 ไม่สามารถแก้ไขชื่อโฮสต์ได้ด้วย สาเหตุของปัญหานี้คือชื่อโฮสต์ที่ใช้ไม่ถูกต้องสำหรับเซิร์ฟเวอร์เป้าหมาย

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

บันทึกของผู้ประมวลผลข้อมูลข้อความ

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

  1. ระบุรหัสข้อความของคำขอที่ไม่สำเร็จ
  2. ค้นหารหัสข้อความในบันทึกตัวประมวลผลข้อความ (/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. หลังจากนั้นจะมีข้อความเตือน ซึ่ง Message Processor ได้ลบที่อยู่ออกจากแคช 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. จากนั้นคุณอาจเห็นข้อความที่ระบบประมวลผลข้อความดำเนินการไม่สำเร็จ โดยมีข้อยกเว้นว่า "ติดต่อโฮสต์ไม่ได้" บางครั้งการแสดงชื่อโฮสต์เป็นส่วนหนึ่งของข้อความแสดงข้อผิดพลาด
    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 โดยใช้นโยบาย AssignMessage หรือ JavaScript ไม่ถูกต้อง หรือมีการเว้นวรรคหรืออักขระพิเศษอื่นๆ ที่ไม่ต้องการ
  8. กำหนดชื่อโฮสต์ของเซิร์ฟเวอร์เป้าหมายที่ตัวประมวลผลข้อความพยายามจะสื่อสารโดยใช้ค่าใดค่าหนึ่งต่อไปนี้
    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 ที่ล้มเหลว
      2. หากสร้างโฮสต์เซิร์ฟเวอร์เป้าหมายแบบไดนามิก ให้ตรวจสอบนโยบายที่เหมาะสม (เช่น นโยบาย 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 ของระบบปฏิบัติการไม่สามารถแปลค่าชื่อโฮสต์ได้ด้วย สาเหตุของปัญหานี้คือชื่อโฮสต์ที่ใช้ไม่ถูกต้องสำหรับเซิร์ฟเวอร์เป้าหมาย

ความละเอียด

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

แฮนด์เชค SSL ล้มเหลว

Playbook การแก้ปัญหาทั้งหมดมีไว้สำหรับข้อผิดพลาดในการแฮนด์เชค TLS/SSL โปรดดูที่ความล้มเหลวของแฮนด์เชค SSL

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

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

ทำความเข้าใจเส้นเชื่อมต่อระหว่างทิศเหนือและทิศใต้

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

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

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

ภาพต่อไปนี้แสดงการเชื่อมต่อจากทิศเหนือและทิศใต้ของ Apigee Edge

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

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

ใช้หนึ่งในกระบวนการต่อไปนี้เพื่อดูว่าเกิดข้อผิดพลาด 503 บริการไม่พร้อมใช้งานหรือไม่ ที่การเชื่อมต่อระหว่างทิศเหนือหรือทิศใต้

การติดตาม UI

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

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

การตรวจสอบ 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. หากไม่ แสดงว่าปัญหาเกิดขึ้นที่การเชื่อมต่อทิศเหนือ (ระหว่าง แอปพลิเคชันไคลเอ็นต์และเราเตอร์)