คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ
Apigee X info
วิดีโอ
ดูข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาด 503 ได้ในวิดีโอต่อไปนี้
| วิดีโอ | คำอธิบาย |
|---|---|
| แก้ปัญหาและแก้ไขข้อผิดพลาด 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 |
ขั้นตอนการวินิจฉัยที่พบบ่อย
กำหนดรหัสข้อความของคำขอที่ไม่สำเร็จ
เครื่องมือติดตาม
วิธีหารหัสข้อความของคำขอที่ไม่สำเร็จโดยใช้เครื่องมือติดตาม
- หากปัญหายังคงเกิดขึ้น ให้เปิดใช้เซสชันการติดตามสำหรับ API ที่ได้รับผลกระทบ
- ทำการเรียก API และทำซ้ำปัญหา - 503 ไม่พร้อมให้บริการโดยมีรหัสข้อผิดพลาด
messaging.adaptors.http.flow.ServiceUnavailable. - เลือกคำขอที่ล้มเหลวรายการใดรายการหนึ่ง
- ไปที่ระยะ AX และระบุรหัสข้อความ (
X-Apigee.Message-ID) ของคำขอโดยเลื่อนลงในส่วนรายละเอียดระยะตามที่แสดงในรูปภาพต่อไปนี้
บันทึกการเข้าถึง NGINX
วิธีกำหนดรหัสข้อความของคำขอที่ไม่สำเร็จโดยใช้บันทึกการเข้าถึง NGINX
นอกจากนี้ คุณยังดูบันทึกการเข้าถึง NGINX เพื่อกำหนดรหัสข้อความสำหรับข้อผิดพลาด 503 ได้ด้วย ซึ่งจะมีประโยชน์อย่างยิ่งหากปัญหาเกิดขึ้นในอดีตหรือหากปัญหาเกิดขึ้นเป็นระยะๆ และคุณไม่สามารถบันทึกการติดตามใน UI ได้ ทำตามขั้นตอนต่อไปนี้เพื่อดูข้อมูลนี้จากบันทึกการเข้าถึง NGINX
- ตรวจสอบบันทึกการเข้าถึง NGINX: (
/opt/apigee/var/log/edge-router/nginx/ <org>~ <env>.<port#>_access_log) - ค้นหาว่ามีข้อผิดพลาด 503 สำหรับพร็อกซี API ที่เฉพาะเจาะจงในช่วงระยะเวลาหนึ่งๆ หรือไม่ (หากปัญหาเกิดขึ้นในอดีต) หรือมีคำขอใดที่ยังคงล้มเหลวด้วยข้อผิดพลาด 503 หรือไม่
- หากมีข้อผิดพลาด 503 ที่มีข้อความ X-Apigee-fault-code messaging.adaptors.http.flow.ServiceUnavailable
ให้จดรหัสข้อความสำหรับคำขอดังกล่าวอย่างน้อย 1 รายการตามที่แสดงในตัวอย่างต่อไปนี้
รายการตัวอย่างที่แสดงข้อผิดพลาด 503
ข้อผิดพลาดในการเชื่อมต่อเนื่องจากการแปลง DNS ไม่ถูกต้อง
การวินิจฉัย
- กำหนดรหัสข้อความของคำขอที่ไม่สำเร็จ
- ค้นหารหัสข้อความคำขอที่เฉพาะเจาะจงในบันทึกของ 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)
- จดที่อยู่ IP ที่แก้ไขแล้วในข้อผิดพลาด onConnectTimeout และตรวจสอบว่าที่อยู่ IP ใช้ได้กับเซิร์ฟเวอร์แบ็กเอนด์หรือไม่ หากที่อยู่ IP ถูกต้อง ให้ไปที่ข้อผิดพลาดในการเชื่อมต่อ
- หากที่อยู่ IP ไม่ถูกต้อง สาเหตุน่าจะมาจากปัญหาเกี่ยวกับการแปลง DNS
- ทำขั้นตอนที่ 3 และ 4 ซ้ำสำหรับคำขอ API ที่ล้มเหลวอีก 2-3 รายการ และตรวจสอบว่าคุณเห็นที่อยู่ IP เดียวกันหรือที่อยู่ IP อื่นๆ ที่ไม่ถูกต้องหรือไม่
- ค้นหาในบันทึกของ 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]
- ปัญหานี้อาจเกิดขึ้นหากมีปัญหาเกี่ยวกับเซิร์ฟเวอร์ DNS ที่เชื่อถือได้หรือเนมเซิร์ฟเวอร์ที่กำหนดค่าไว้ใน
/etc/resolv.conf
โดยปกติแล้ว อาจมีการกำหนดค่าเซิร์ฟเวอร์ DNS ที่เชื่อถือได้อย่างน้อย 1 รายการเพื่อทำการแปลง DNS หากไม่มีเซิร์ฟเวอร์ DNS ที่เชื่อถือได้ ระบบจะกลับไปใช้การตั้งค่าที่กำหนดไว้ใน/etc/resolv.confและทำการแปลง DNS ตามความเหมาะสม เช่น หากมีการกำหนดค่า/etc/resolv.confให้ใช้เนมเซิร์ฟเวอร์ที่เฉพาะเจาะจง ระบบก็จะใช้เนมเซิร์ฟเวอร์เหล่านั้นเพื่อทำการแปลง DNS - หากมีปัญหาเกี่ยวกับเซิร์ฟเวอร์ DNS ที่เชื่อถือได้หรือเนมเซิร์ฟเวอร์ที่ระบุใน
/etc/resolv.confระบบจะแปลงชื่อโฮสต์ของเซิร์ฟเวอร์แบ็กเอนด์เป็นที่อยู่ IP ที่ไม่ถูกต้อง/ใช้ไม่ได้ จากนั้นระบบจะจัดเก็บที่อยู่ IP ที่ไม่ถูกต้อง/ใช้ไม่ได้ไว้ในแคช DNS ของ Message Processor- หากปัญหาเกี่ยวกับเซิร์ฟเวอร์ DNS ที่เชื่อถือได้หรือเนมเซิร์ฟเวอร์ที่ระบุใน
/etc/resolv.confยังคงอยู่ ที่อยู่ IP ที่ไม่ถูกต้อง/ไม่ถูกต้องจะยังคงอยู่ในแคช DNS ของ Message Processor ต่อไป ตราบใดที่ระบบจัดเก็บที่อยู่ IP ที่ไม่ดีไว้ในแคช DNS ของ Message Processor คำขอสำหรับ API ทั้งหมดที่ใช้เซิร์ฟเวอร์แบ็กเอนด์ที่เฉพาะเจาะจงจะล้มเหลวโดยมีข้อผิดพลาด 503 - หากปัญหาเกี่ยวกับเซิร์ฟเวอร์ DNS ที่เชื่อถือได้หรือเนมเซิร์ฟเวอร์ที่ระบุใน
/etc/resolv.confเกิดขึ้นเป็นระยะๆ ระบบจะจัดเก็บที่อยู่ IP ที่ดีและไม่ดีไว้ในแคช DNS เป็นระยะๆ ในกรณีนี้ คุณจะเห็นข้อผิดพลาด 503 เป็นระยะๆ สำหรับ API ทั้งหมดที่ใช้เซิร์ฟเวอร์แบ็กเอนด์ที่เฉพาะเจาะจง
- หากปัญหาเกี่ยวกับเซิร์ฟเวอร์ DNS ที่เชื่อถือได้หรือเนมเซิร์ฟเวอร์ที่ระบุใน
- หากปัญหาเกี่ยวกับเซิร์ฟเวอร์ DNS ยังคงอยู่ คุณจะเห็นว่าการเชื่อมต่อล้มเหลวอย่างต่อเนื่อง หากปัญหาเกี่ยวกับเซิร์ฟเวอร์ DNS เกิดขึ้นเป็นระยะๆ คุณจะเห็นว่าการดำเนินการล้มเหลวเป็นระยะๆ กล่าวคือ เมื่อใดก็ตามที่ชื่อโฮสต์ของเซิร์ฟเวอร์แบ็กเอนด์ได้รับการแก้ไขเป็นที่อยู่ IP ที่ไม่ถูกต้อง คุณจะเห็นข้อผิดพลาด 503 และเมื่อชื่อโฮสต์ของเซิร์ฟเวอร์แบ็กเอนด์ได้รับการแก้ไขเป็นที่อยู่ IP ที่ดี คุณจะเห็นการตอบกลับที่สำเร็จ
ความละเอียด
โปรดประสานงานกับผู้ดูแลระบบปฏิบัติการและแก้ไขปัญหาเกี่ยวกับเซิร์ฟเวอร์ DNS
- หากมีปัญหาเกี่ยวกับเซิร์ฟเวอร์ DNS ที่เชื่อถือได้หรือเนมเซิร์ฟเวอร์ที่ระบุไว้ใน
/etc/resolv.confให้แก้ไขปัญหาในเซิร์ฟเวอร์ที่เหมาะสมเพื่อจัดการปัญหานี้ - หากมีปัญหาเกี่ยวกับการกำหนดค่าใน
/etc/resolv.confในระบบที่มีตัวประมวลผลข้อความ ให้แก้ไขปัญหาการกำหนดค่า
ข้อผิดพลาดในการเชื่อมต่อ
ข้อผิดพลาดในการเชื่อมต่อจะเกิดขึ้นเมื่อ Message Processor ของ Apigee Edge พยายามเชื่อมต่อกับเซิร์ฟเวอร์แบ็กเอนด์ และเกิดปัญหาอย่างใดอย่างหนึ่งต่อไปนี้
- Message Processor เชื่อมต่อภายในระยะหมดเวลาการเชื่อมต่อที่ตั้งค่าไว้ล่วงหน้าไม่ได้ (ค่าเริ่มต้น: 3 วินาที)
- เซิร์ฟเวอร์แบ็กเอนด์ปฏิเสธการเชื่อมต่อ
การวินิจฉัย
- กำหนดรหัสข้อความของคำขอที่ไม่สำเร็จ
-
ค้นหารหัสข้อความคำขอที่เฉพาะเจาะจงในบันทึกของ Message Processor (
/opt/apigee/var/log/edge-message-processor/logs/system.log) คุณอาจเห็นข้อผิดพลาดต่อไปนี้-
ข้อผิดพลาด 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)
-
ข้อผิดพลาด 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]
-
ข้อผิดพลาด onConnectTimeout แสดงว่า Message Processor เชื่อมต่อกับเซิร์ฟเวอร์แบ็กเอนด์ภายในระยะหมดเวลาการเชื่อมต่อที่กำหนดไว้ล่วงหน้าไม่ได้
- ตรวจสอบว่าคุณเชื่อมต่อกับเซิร์ฟเวอร์แบ็กเอนด์ที่เฉพาะเจาะจงได้โดยตรงจาก
Message Processor แต่ละรายการโดยใช้คำสั่ง
telnetดังนี้- หากเซิร์ฟเวอร์แบ็กเอนด์เปลี่ยนเป็นที่อยู่ IP เดียว ให้ใช้คำสั่งต่อไปนี้
telnet BackendServer-IPaddress 443 - หากเซิร์ฟเวอร์แบ็กเอนด์แก้ไขเป็นที่อยู่ IP หลายรายการ ให้ใช้ชื่อโฮสต์ของ
เซิร์ฟเวอร์แบ็กเอนด์ในคำสั่ง
telnetดังที่แสดงด้านล่างtelnet BackendServer-HostName 443
- หากเซิร์ฟเวอร์แบ็กเอนด์เปลี่ยนเป็นที่อยู่ IP เดียว ให้ใช้คำสั่งต่อไปนี้
- หากเชื่อมต่อกับเซิร์ฟเวอร์แบ็กเอนด์ได้ คุณอาจเห็นข้อความเช่น
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.
เครื่องมือติดตาม
วิธีวินิจฉัยโดยใช้เครื่องมือติดตาม
- หากปัญหายังคงเกิดขึ้น ให้เปิดใช้เซสชันการติดตามสำหรับ API ที่ได้รับผลกระทบ
- ทำการเรียก API และทำซ้ำปัญหา - 503 ไม่พร้อมให้บริการโดยมีรหัสข้อผิดพลาด
messaging.adaptors.http.flow.ServiceUnavailable. - เลือกคำขอที่ล้มเหลวรายการใดรายการหนึ่ง
- ไปยังส่วนต่างๆ ของการติดตาม และค้นหาจุดที่เกิดข้อผิดพลาด
- เลือก FlowInfo ที่มีข้อผิดพลาด คุณดูข้อมูลเพิ่มเติมได้ในฟิลด์ error.cause ซึ่งจะบอกสาเหตุที่ทำให้เกิดข้อผิดพลาดได้ ดังตัวอย่างต่อไปนี้
คำขอตัวอย่างที่แสดงข้อผิดพลาด.สาเหตุในร่องรอย

- หากสังเกตเห็นว่า error.cause แสดง Host not reachable สาเหตุที่อาจทำให้เกิดข้อผิดพลาดคือข้อใดข้อหนึ่งต่อไปนี้
- ชื่อโฮสต์ที่ระบุในการกำหนดค่าเซิร์ฟเวอร์เป้าหมาย/ปลายทางเป้าหมายไม่ถูกต้อง หรือมีช่องว่างหรืออักขระพิเศษที่ไม่ต้องการ
เช่น มีช่องว่างที่ไม่ต้องการในชื่อโฮสต์ดังที่แสดงด้านล่าง
"demo-target.apigee.net " - ชื่อโฮสต์ที่เขียนทับโดยตัวแปร target.url ใน API Proxy โดยใช้นโยบาย AssignMessage หรือ JavaScript ไม่ถูกต้อง หรือมีช่องว่างหรืออักขระพิเศษอื่นๆ ที่ไม่ต้องการ
- ชื่อโฮสต์ที่ระบุในการกำหนดค่าเซิร์ฟเวอร์เป้าหมาย/ปลายทางเป้าหมายไม่ถูกต้อง หรือมีช่องว่างหรืออักขระพิเศษที่ไม่ต้องการ
- ตรวจสอบการกำหนดค่าปลายทางเป้าหมายและ/หรือคำจำกัดความของเซิร์ฟเวอร์เป้าหมายเพื่อดูว่าชื่อโฮสต์ของเซิร์ฟเวอร์เป้าหมายไม่ถูกต้องหรือมีช่องว่างหรืออักขระพิเศษที่ไม่ต้องการหรือไม่
- หากโฮสต์เซิร์ฟเวอร์เป้าหมายสร้างขึ้นแบบไดนามิก ให้ตรวจสอบนโยบายที่เหมาะสม (เช่น นโยบาย AssignMessage/JavaScript) ที่ใช้สร้าง ตรวจสอบว่าชื่อโฮสต์ของเซิร์ฟเวอร์เป้าหมายไม่ถูกต้อง หรือมีช่องว่างหรืออักขระพิเศษที่ไม่ต้องการ
- เมื่อทราบชื่อโฮสต์ของเซิร์ฟเวอร์เป้าหมายแล้ว ให้เรียกใช้คำสั่ง
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
- หากคำสั่งระบบปฏิบัติการ
nslookupแก้ไขชื่อโฮสต์ไม่สำเร็จด้วย สาเหตุของปัญหานี้คือชื่อโฮสต์ที่ไม่ถูกต้องซึ่งใช้สำหรับเซิร์ฟเวอร์เป้าหมายไปที่ความละเอียด
บันทึกของ Message Processor
วิธีวินิจฉัยโดยใช้บันทึกของเครื่องมือประมวลผลข้อความ
- กำหนดรหัสข้อความของคำขอที่ไม่สำเร็จ
- ค้นหารหัสข้อความในบันทึกของ Message Processor (
/opt/apigee/var/log/edge-message-processor/logs/system.log) - หากคุณเห็นข้อความเตือน/ข้อความแสดงข้อผิดพลาดต่อไปนี้ แสดงว่า 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
- จากนั้นจะตามด้วยข้อความเตือน ซึ่งตัวประมวลผลข้อความจะนำที่อยู่ออกจากแคช 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
- จากนั้นคุณอาจเห็นข้อความที่ 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>
- บางครั้งอาจแสดงเป็น 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>
- ข้อผิดพลาด
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 ไม่ถูกต้อง หรือมีช่องว่างหรืออักขระพิเศษอื่นๆ ที่ไม่ต้องการ
- ชื่อโฮสต์ที่ระบุในการกำหนดค่าเซิร์ฟเวอร์เป้าหมาย/ปลายทางเป้าหมายไม่ถูกต้อง หรือมีช่องว่างหรืออักขระพิเศษที่ไม่ต้องการ
- กำหนดชื่อโฮสต์ของเซิร์ฟเวอร์เป้าหมายที่ Message Processor พยายามสื่อสารโดยใช้รายการใดรายการหนึ่งต่อไปนี้
- ตรวจสอบข้อความแสดงข้อผิดพลาดที่มี
Host not reachableอย่างละเอียด - หากข้อความแสดงข้อผิดพลาดแสดงชื่อโฮสต์ ให้คัดลอกชื่อโฮสต์รวมถึงช่องว่างหรือสัญลักษณ์พิเศษ
- หากข้อความแสดงข้อผิดพลาดแสดง 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 {}
- กำหนดชื่อโฮสต์โดยตรวจสอบคำจำกัดความของเซิร์ฟเวอร์เป้าหมายที่ใช้ใน API Proxy ที่ล้มเหลว
- หากโฮสต์เซิร์ฟเวอร์เป้าหมายสร้างขึ้นแบบไดนามิก ให้ตรวจสอบนโยบายที่เหมาะสม (เช่น AssignMessage/JavaScript policy) ที่ใช้สร้าง
- เมื่อทราบชื่อโฮสต์ของเซิร์ฟเวอร์เป้าหมายแล้ว ให้เรียกใช้คำสั่ง 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 - หากคำสั่งระบบปฏิบัติการ nslookup แก้ไขชื่อโฮสต์ไม่สำเร็จด้วยเช่นกัน สาเหตุของปัญหานี้คือชื่อโฮสต์ที่ไม่ถูกต้องซึ่งใช้สำหรับเซิร์ฟเวอร์เป้าหมาย
ความละเอียด
- ตรวจสอบว่าชื่อโฮสต์ของเซิร์ฟเวอร์เป้าหมายที่ระบุในการกำหนดค่าปลายทางเป้าหมายหรือในคำจำกัดความเซิร์ฟเวอร์เป้าหมาย ถูกต้องและไม่มีช่องว่างหรืออักขระพิเศษที่ไม่ต้องการ
- หากคุณใช้นโยบาย 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

การระบุตำแหน่งที่เกิดข้อผิดพลาด 503 ไม่พร้อมให้บริการ
ทำตามขั้นตอนใดขั้นตอนหนึ่งต่อไปนี้เพื่อตรวจสอบว่าเกิดข้อผิดพลาด 503 Service Unavailable ในการเชื่อมต่อขาขึ้นหรือขาลง
การติดตาม UI
วิธีระบุตำแหน่งที่เกิดข้อผิดพลาดโดยใช้การติดตาม UI
- หากปัญหายังคงเกิดขึ้น ให้เปิดใช้การติดตาม UI สำหรับ API ที่ได้รับผลกระทบ
- หากการติดตาม UI สำหรับคำขอ API ที่ล้มเหลวแสดงว่าเกิดข้อผิดพลาด 503 บริการไม่พร้อมใช้งาน ในระหว่างโฟลว์คำขอเป้าหมายหรือส่งโดยเซิร์ฟเวอร์แบ็กเอนด์ แสดงว่าปัญหาอยู่ทางใต้ (นั่นคือระหว่าง Message Processor กับเซิร์ฟเวอร์แบ็กเอนด์)
- หากไม่ได้รับการติดตามสำหรับการเรียก API ที่เฉพาะเจาะจง แสดงว่าปัญหาอยู่ต้นทางระหว่างแอปพลิเคชันไคลเอ็นต์กับเราเตอร์
การตรวจสอบ API
การตรวจสอบ API ช่วยให้คุณแยกแยะพื้นที่ที่มีปัญหาได้อย่างรวดเร็วเพื่อวินิจฉัยปัญหาเกี่ยวกับข้อผิดพลาด ประสิทธิภาพ และเวลาในการตอบสนอง รวมถึงแหล่งที่มาของปัญหา เช่น แอปของนักพัฒนาซอฟต์แวร์ พร็อกซี API เป้าหมายแบ็กเอนด์ หรือแพลตฟอร์ม API
ดูสถานการณ์ตัวอย่างที่แสดงวิธีแก้ปัญหา 5xx เกี่ยวกับ API โดยใช้การตรวจสอบ API
เช่น คุณอาจต้องการตั้งค่าการแจ้งเตือนเพื่อให้ได้รับการแจ้งเตือนเมื่อจำนวนmessaging.adaptors.http.flow.ServiceUnavailableข้อบกพร่องเกินเกณฑ์ที่กำหนด
บันทึกการเข้าถึง NGINX
วิธีระบุตำแหน่งที่เกิดข้อผิดพลาดโดยใช้การติดตาม UI
หากปัญหาเกิดขึ้นในอดีตหรือเกิดขึ้นเป็นครั้งคราวและคุณไม่สามารถ บันทึกการติดตามได้ ให้ทำตามขั้นตอนต่อไปนี้
- ตรวจสอบบันทึกการเข้าถึง NGINX (
/opt/apigee/var/log/edge-router/nginx/ org-env.port_access_log) - ค้นหาว่ามีข้อผิดพลาด 503 สำหรับพร็อกซี API ที่เฉพาะเจาะจงหรือไม่
- หากคุณระบุข้อผิดพลาด 503 สำหรับ API ที่เฉพาะเจาะจงในเวลาที่เฉพาะเจาะจงได้ แสดงว่าปัญหาเกิดขึ้นที่การเชื่อมต่อขาออก (ระหว่าง Message Processor กับเซิร์ฟเวอร์แบ็กเอนด์)
- หากไม่เป็นเช่นนั้น แสดงว่าปัญหาเกิดขึ้นที่การเชื่อมต่อขาขึ้น (ระหว่างแอปพลิเคชันไคลเอ็นต์กับเราเตอร์)