คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X ข้อมูล
วิดีโอ
ดูข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาด 503 ได้ในวิดีโอต่อไปนี้
วิดีโอ | คำอธิบาย |
---|---|
แก้ปัญหาและแก้ไขบริการ 503 ไม่พร้อมใช้งาน - NoActiveTargets | ดูข้อมูลเกี่ยวกับสิ่งต่อไปนี้
|
ลักษณะปัญหา
แอปพลิเคชันไคลเอ็นต์จะได้รับรหัสสถานะการตอบกลับ HTTP 503 พร้อมด้วยข้อความ Service Unavailable และรหัสข้อผิดพลาด NoActiveTargets สำหรับคำขอพร็อกซี API
ข้อความแสดงข้อผิดพลาด
คุณจะเห็นการตอบกลับข้อผิดพลาดต่อไปนี้
HTTP/1.1 503 Service Unavailable
คุณจะเห็นข้อความแสดงข้อผิดพลาดต่อไปนี้ในการตอบกลับ HTTP
{ "fault": { "faultstring": "The Service is temporarily unavailable", "detail": { "errorcode": "messaging.adaptors.http.flow.NoActiveTargets" } } }
สาเหตุที่เป็นไปได้
โดยทั่วไปแล้ว การตอบกลับ HTTP เป็น 503 Service Unavailable ที่มีรหัสข้อผิดพลาด NoActiveTargets เมื่อคุณใช้เซิร์ฟเวอร์เป้าหมายอย่างน้อย 1 รายการในการกำหนดค่าปลายทางปลายทางในพร็อกซี API
Playbook นี้อธิบายถึง 503 Service Unavailable ที่มีรหัสข้อผิดพลาด NoActiveTargets ซึ่งเกิดจากการตรวจสอบประสิทธิภาพการทำงานล้มเหลว โปรดอ่าน Playbook นี้เพื่อดูข้อมูลเกี่ยวกับสาเหตุอื่นๆ ที่ทำให้เกิดข้อผิดพลาดนี้
การตรวจสอบประสิทธิภาพการทำงานล้มเหลว
ระบบจะสังเกตความล้มเหลวในการตรวจสอบประสิทธิภาพการทำงานก็ต่อเมื่อคุณกำหนดค่า การตรวจสอบประสิทธิภาพการทำงานเป็นส่วนหนึ่งของการกำหนดค่าการจัดสรรภาระงานของเซิร์ฟเวอร์เป้าหมายในปลายทางเป้าหมายของพร็อกซี API
เมื่อเซิร์ฟเวอร์เป้าหมายไม่ผ่านการตรวจสอบประสิทธิภาพการทำงาน Edge จะเพิ่มจำนวนความล้มเหลวของเซิร์ฟเวอร์ดังกล่าว
หากจำนวนความล้มเหลวในการตรวจสอบประสิทธิภาพการทำงานของเซิร์ฟเวอร์นั้นถึงเกณฑ์ที่กำหนดไว้ล่วงหน้า (<MaxFailures>
) ผู้ประมวลผลข้อความจะบันทึกข้อความเตือนดังที่แสดงด้านล่างลงในไฟล์บันทึก
Apigee-Timer-7 WARN ADAPTORS.HTTP.FLOW - LBServer.incrementFailureCount() : Max failure count(10) reached for server : mocktarget2{Environment=<orgname>__prod,Application=mocktargetapigee__1,Target=default}
โดยข้อความเตือนจะให้ข้อมูลต่อไปนี้
ซึ่งจะช่วยให้คุณทราบว่าเซิร์ฟเวอร์เป้าหมายใดมีจำนวน MaxFailure
ถึงขีดจำกัดแล้ว
- ชื่อเซิร์ฟเวอร์เป้าหมาย
- ชื่อองค์กรและสภาพแวดล้อม
- ชื่อพร็อกซี API
- ชื่อปลายทางเป้าหมาย
หลังจากนั้น Edge จะหยุดส่งคำขอเพิ่มเติมไปยังเซิร์ฟเวอร์นั้นๆ เมื่อเซิร์ฟเวอร์เป้าหมายทั้งหมดที่กำหนดค่าในการกำหนดค่า LoadBalancer มีจำนวนถึง MaxFailure
แล้ว คำขอ API ที่ตามมาจะได้รับการตอบสนองด้วย 503 Service Unavailable ที่มีรหัสข้อผิดพลาด NoActiveTargets
การใช้ Health Monitor ช่วยให้ Apigee Edge รวมเซิร์ฟเวอร์เป้าหมายกลับเข้าไปในการหมุนเวียนเมื่อเซิร์ฟเวอร์มีประสิทธิภาพดีโดยอัตโนมัติ โดยไม่ต้องทำให้พร็อกซี API ใช้งานได้อีกครั้ง
สาเหตุที่อาจทำให้การตรวจสอบประสิทธิภาพการทำงานล้มเหลวมีดังนี้
สาเหตุ | คำอธิบาย | ผู้ที่มีสิทธิ์ทำตามขั้นตอนการแก้ปัญหา |
---|---|---|
ข้อผิดพลาดหมดเวลาการเชื่อมต่อ | ตัวประมวลผลข้อความเชื่อมต่อกับเซิร์ฟเวอร์เป้าหมายภายในระยะหมดเวลาที่ระบุในการกำหนดค่า LoadBalancer ไม่ได้ | ผู้ใช้ Edge Private Cloud |
คำขอที่ปลอดภัยในพอร์ตที่ไม่ปลอดภัย |
|
ผู้ใช้ Edge Private Cloud |
คำขอที่ไม่ปลอดภัยในพอร์ตที่ปลอดภัย |
|
ผู้ใช้ Edge Private Cloud |
Health Check API ตอบกลับพร้อมข้อผิดพลาด | หาก API การตรวจสอบประสิทธิภาพการทำงานตอบกลับด้วยข้อผิดพลาดหรือโค้ดตอบกลับ อะไรก็ได้ที่นอกเหนือจากที่ระบุในองค์ประกอบ SuccessResponse ของ Health Monitor | ผู้ใช้ Edge Private Cloud |
ขั้นตอนการวินิจฉัยทั่วไป
กำหนดรหัสข้อความของคำขอที่ล้มเหลว
เครื่องมือการติดตาม
วิธีระบุรหัสข้อความของคำขอที่ล้มเหลวโดยใช้เครื่องมือติดตาม
- เปิดใช้เซสชันการติดตาม ทำการเรียก API และทำให้เกิดปัญหาซ้ำ - 503 Service Unavailable ที่มีรหัสข้อผิดพลาด NoActiveTargets
- เลือกคำขอที่ล้มเหลว 1 รายการ
- ไปที่เฟส 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 messages.adaptors.http.flow.NoActiveTargets โปรดจดรหัสข้อความสำหรับคำขออย่างน้อย 1 รายการตามที่แสดงในตัวอย่างต่อไปนี้
รายการตัวอย่างที่แสดงข้อผิดพลาด 503
ข้อความแสดงข้อผิดพลาดที่พบบ่อย
เมื่อมีการใช้เซิร์ฟเวอร์เป้าหมายและเกิดข้อผิดพลาดขึ้นขณะที่ผู้ประมวลผลข้อความพยายามเชื่อมต่อกับเซิร์ฟเวอร์แบ็กเอนด์ คุณจะเห็นข้อความแสดงข้อผิดพลาดที่พบบ่อยในบันทึกของผู้ประมวลผลข้อความ ระบบจะบันทึกข้อผิดพลาดเหล่านี้หลังจากข้อความแสดงข้อผิดพลาด/ข้อผิดพลาดจริงที่นำไปสู่ความล้มเหลว
ข้อความแสดงข้อผิดพลาดที่พบบ่อยในบันทึกตัวประมวลผลข้อความ (/opt/apigee/var/log/edge-message-processor/logs/system.log
) สำหรับ 503 Service Unavailable ที่มีรหัสข้อผิดพลาด NoActiveTargets มีดังนี้
org:myorg env:prod api:TestTargetServer rev:2 messageid:<messageid> NIOThread@0 INFO ADAPTORS.HTTP.FLOW - LBTargetRequestSender.sendRequest() : Failed to send request to target servers : [demo-target] for default{Organization=myorgEnvironment=prod,Application=TestTargetServer__2} org:myorg env:prod api:TestTargetServer rev:2 messageid:<messageid> NIOThread@0 ERROR ADAPTORS.HTTP.FLOW - LBTargetRequestSender.sendRequest() : No Active Target server Found for default{Organization=myorgEnvironment=prod,Application=TestTargetServer__2} org:myorg env:prod api:TestTargetServer rev:2 messageid:<messageid> NIOThread@0 ERROR ADAPTORS.HTTP.FLOW - LBTargetRequestSender.sendRequest() : Unexpected error while sending request com.apigee.errors.http.server.ServiceUnavailableException: The Service is temporarily unavailable at com.apigee.messaging.adaptors.http.flow.data.LBTargetRequestSender.sendRequest(LBTargetRequestSender.java:299) at com.apigee.messaging.adaptors.http.flow.data.LBTargetRequestSender.access$400(LBTargetRequestSender.java:57) …<snipped>
ข้อความแสดงข้อผิดพลาดเหล่านี้บ่งบอกว่าระบบส่งคำขอไปยังเซิร์ฟเวอร์แบ็กเอนด์ไม่ได้เนื่องจากเกิดข้อผิดพลาด ดังนั้น ผู้ประมวลผลข้อความจึงส่ง 503 Service Unavailable พร้อมรหัสข้อผิดพลาด NoActiveTargets เป็นการตอบกลับไปยังไคลเอ็นต์
สาเหตุ: หมดเวลาการเชื่อมต่อ
การวินิจฉัย
- ระบุรหัสข้อความของคำขอที่ล้มเหลว
- ค้นหารหัสข้อความในบันทึกผู้ประมวลผลข้อความ (
/opt/apigee/var/log/edge-message-processor/logs/system.log
) - คุณจะเห็นข้อความแสดงข้อผิดพลาดที่พบบ่อยซึ่งสอดคล้องกับรหัสข้อความ อย่างไรก็ตาม หากต้องการทราบสาเหตุจริงที่ทำให้เกิดความล้มเหลวในการตรวจสอบประสิทธิภาพการทำงาน ให้เลื่อนไปที่ข้อความแสดงข้อผิดพลาดที่พบบ่อยเหล่านี้และตรวจหาข้อผิดพลาดจากการตรวจสอบประสิทธิภาพการทำงาน
ตัวอย่างเช่น ข้อความแสดงข้อผิดพลาด HEALTH MONITOR ต่อไปนี้ระบุว่าเครื่องมือประมวลผลข้อความทำงานล้มเหลวเนื่องจากข้อผิดพลาดหมดเวลาในการเชื่อมต่อเมื่อส่งคำขอ API การตรวจสอบประสิทธิภาพการทำงาน
Apigee-Timer-6 ERROR SERVICES.HEALTH_MONITOR - HTTPMonitor.getResponseFromCache() : Error sending request Request URL : https://<BackendServer-Hostname>:443/status java.net.ConnectException: Connection timed out (Connection timed out) at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) …<snipped>
หากข้อผิดพลาดนี้เกิดซ้ำเป็นเวลา
MaxFailure
ครั้งที่กำหนดค่าในเครื่องมือตรวจสอบสุขภาพ คุณจะเห็นข้อความเตือนดังนี้Apigee-Timer-7 WARN ADAPTORS.HTTP.FLOW - LBServer.incrementFailureCount() : Max failure count(10) reached for server : mocktarget2{Environment=<orgname>__prod,Application=mocktargetapigee__1,Target=default}
อ่านข้อมูลที่ระบุไว้ในข้อความเตือนอย่างละเอียด ตรวจสอบว่าถึงจำนวน
MaxFailure
สำหรับเซิร์ฟเวอร์เป้าหมายที่ใช้ในพร็อกซี API เฉพาะที่คุณพบกับโค้ดตอบกลับ 503 ที่มีรหัสข้อผิดพลาด NoActiveTargets - ในตัวอย่างข้างต้น การตรวจสอบประสิทธิภาพการทำงานล้มเหลวโดยมีข้อผิดพลาด
connection timed out
ตรวจสอบว่าคุณเชื่อมต่อกับเซิร์ฟเวอร์แบ็กเอนด์ที่เจาะจงได้โดยตรงจากโปรแกรมประมวลผลข้อความแต่ละเครื่องโดยใช้คำสั่งtelnet
ดังนี้ - หากคุณเชื่อมต่อกับเซิร์ฟเวอร์แบ็กเอนด์ได้ คุณอาจเห็นข้อความอย่างเช่นเชื่อมต่อกับเซิร์ฟเวอร์แบ็กเอนด์ ปัญหานั้นอาจเป็นปัญหาชั่วคราวและอาจแก้ไขได้หรือเป็นปัญหาในบางช่วงเวลา ทำซ้ำขั้นตอนที่ 4 2-3 ครั้ง (มากกว่า 10 ครั้ง) และยืนยันผลลัพธ์
- หากไม่มีข้อผิดพลาดกับคําสั่ง
telnet
อย่างสม่ำเสมอ แสดงว่าปัญหาได้รับการแก้ไข ตรวจสอบอีกครั้งว่าการตรวจสอบประสิทธิภาพการทำงานล้มเหลวหรือไม่ หากใช่ คุณไม่ต้องดำเนินการใดๆ เพิ่มเติม - หากเชื่อมต่อเซิร์ฟเวอร์แบ็กเอนด์ด้วยคำสั่ง
telnet
ไม่ได้เป็นระยะๆ อาจเป็นเพราะปัญหาของเครือข่ายหรือเซิร์ฟเวอร์แบ็กเอนด์อาจไม่ว่าง - หากคุณเชื่อมต่อเซิร์ฟเวอร์แบ็กเอนด์ด้วยคําสั่ง
telnet
อย่างต่อเนื่องไม่ได้ นั่นอาจเป็นเพราะว่าการรับส่งข้อมูลไม่ได้รับอนุญาตจากผู้ประมวลผลข้อความในเซิร์ฟเวอร์แบ็กเอนด์ที่เจาะจง
telnet <BackendServer-HostName> 443
ความละเอียด
หากพบข้อผิดพลาด connection timed out
อย่างต่อเนื่อง ให้ตรวจสอบว่าเซิร์ฟเวอร์แบ็กเอนด์ไม่มีข้อจํากัดด้านไฟร์วอลล์ และอนุญาตการรับส่งข้อมูลจากตัวประมวลผลข้อความ Apigee Edge
เช่น ใน Linux คุณอาจใช้ iptables เพื่ออนุญาตการรับส่งข้อมูลจากที่อยู่ IP ของผู้ประมวลผลข้อความในเซิร์ฟเวอร์แบ็กเอนด์
หากปัญหายังคงอยู่ ให้ปรึกษากับผู้ดูแลระบบเครือข่ายเพื่อตรวจสอบและแก้ไขปัญหาดังกล่าว หากต้องการความช่วยเหลือเพิ่มเติมจาก Apigee โปรดติดต่อทีมสนับสนุนของ Apigee
สาเหตุ: คำขอที่ปลอดภัยในพอร์ตที่ไม่ปลอดภัย
การวินิจฉัย
- ระบุรหัสข้อความของคำขอที่ล้มเหลว
- ค้นหารหัสข้อความในบันทึกผู้ประมวลผลข้อความ (
/opt/apigee/var/log/edge-message-processor/logs/system.log
) - คุณจะเห็นข้อความแสดงข้อผิดพลาดที่พบบ่อยซึ่งสอดคล้องกับรหัสข้อความ
อย่างไรก็ตาม หากต้องการทราบสาเหตุจริงที่ทำให้เกิดความล้มเหลวในการตรวจสอบประสิทธิภาพการทำงาน ให้เลื่อนไปที่ข้อความแสดงข้อผิดพลาดที่พบบ่อยเหล่านี้และตรวจหาข้อผิดพลาดจากการตรวจสอบประสิทธิภาพการทำงาน
ตัวอย่างเช่น คุณอาจเห็นข้อผิดพลาดเกี่ยวกับ HEALTH MONITOR ตามที่แสดงด้านล่าง
Apigee-Timer-1 ERROR SERVICES.HEALTH_MONITOR - HTTPMonitor.getResponseFromCache() : Error sending request Request URL : https://mocktarget.apigee.net:80/status javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection? at sun.security.ssl.InputRecord.handleUnknownRecord(InputRecord.java:710) at sun.security.ssl.InputRecord.read(InputRecord.java:527) at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:983) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1385) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1413) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1397) …<snipped>
หากข้อผิดพลาดนี้เกิดซ้ำเป็นเวลา
MaxFailure
ครั้งที่กำหนดค่าไว้ในตัวตรวจสอบสุขภาพ คุณจะเห็นข้อความเตือนดังนี้Apigee-Timer-7 WARN ADAPTORS.HTTP.FLOW - LBServer.incrementFailureCount() : Max failure count(10) reached for server : mocktarget{Environment=<orgname>__prod,Application=mocktargetapigee__1,Target=default}
อ่านข้อมูลที่ระบุไว้ในข้อความเตือนอย่างละเอียด ตรวจสอบว่าถึงจำนวน
MaxFailure
สำหรับเซิร์ฟเวอร์เป้าหมายที่ใช้ในพร็อกซี API เฉพาะที่คุณพบกับโค้ดตอบกลับ 503 ที่มีรหัสข้อผิดพลาด NoActiveTargets - การตรวจสอบประสิทธิภาพการทำงานล้มเหลวโดยมีข้อผิดพลาด:
Error sending request Request URL : https://mocktarget.apigee.net:80/statuscode/200 javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
ข้อความแสดงข้อผิดพลาดและ URL ระบุสาเหตุของปัญหานี้คือการเรียกใช้ที่ปลอดภัย (HTTPS) เกิดขึ้นในพอร์ตที่ไม่ปลอดภัย 80
ข้อผิดพลาดนี้อาจเกิดขึ้นจาก 2 สถานการณ์ต่อไปนี้
- ระบุเซิร์ฟเวอร์เป้าหมายที่ปลอดภัยด้วยพอร์ตที่ไม่ปลอดภัย
- กำหนดเซิร์ฟเวอร์เป้าหมายที่ปลอดภัยแต่กำหนดค่าการตรวจสอบสุขภาพด้วยพอร์ตที่ไม่ปลอดภัย
พอร์ตที่ไม่ปลอดภัยของเป้าหมาย
สถานการณ์ที่ 1: ระบุเซิร์ฟเวอร์เป้าหมายที่ปลอดภัยด้วยพอร์ตที่ไม่ปลอดภัย
หากกำหนดเซิร์ฟเวอร์เป้าหมายที่ปลอดภัยแต่มีพอร์ตที่ไม่ปลอดภัย เช่น 80 คุณจะได้รับข้อผิดพลาดนี้ ทำตามขั้นตอนด้านล่างเพื่อยืนยันว่าเป็นสาเหตุของปัญหานี้หรือไม่
- โปรดตรวจสอบคำจำกัดความของเซิร์ฟเวอร์เป้าหมายที่ใช้ในการกำหนดค่าปลายทางเป้าหมาย
- ตอนนี้ให้ตรวจสอบการกำหนดค่า Health Monitor สำหรับเซิร์ฟเวอร์เป้าหมายในการกำหนดค่าปลายทางเป้าหมาย ดังนี้
การกำหนดค่าการตรวจสอบสุขภาพ
<HealthMonitor> <IsEnabled>true</IsEnabled> <IntervalInSec>5</IntervalInSec> <HTTPMonitor> <Request> <ConnectTimeoutInSec>10</ConnectTimeoutInSec> <SocketReadTimeoutInSec>30</SocketReadTimeoutInSec> <Verb>GET</Verb> <Path>/statuscode/200</Path> </Request> <SuccessResponse> <ResponseCode>200</ResponseCode> </SuccessResponse> </HTTPMonitor> </HealthMonitor>
โปรดทราบว่าไม่มีองค์ประกอบ
<Port>
ที่ระบุไว้ในการกำหนดค่า Health Monitor ด้านบน ในกรณีนี้ Message Processor ของ Edge จะใช้พอร์ตที่ระบุในคำจำกัดความเซิร์ฟเวอร์เป้าหมาย (ซึ่งก็คือ 80) สำหรับการเรียก API การตรวจสอบประสิทธิภาพการทำงาน - จากข้อมูลข้างต้น สาเหตุของข้อผิดพลาดนี้คือเซิร์ฟเวอร์เป้าหมายได้รับการระบุว่าเป็นเซิร์ฟเวอร์ที่ปลอดภัย (เมื่อเปิดใช้บล็อก SSLInfo) แต่พอร์ตที่ไม่ปลอดภัย 80
ใช้รับ TargetServer API เพื่อรับการกำหนดเซิร์ฟเวอร์เป้าหมาย
เอาต์พุตคำจำกัดความเซิร์ฟเวอร์เป้าหมาย
<TargetServer name="mocktarget"> <Host>mocktarget.apigee.net</Host> <Port>80</Port> <IsEnabled>true</IsEnabled> <SSLInfo> <Enabled>true</Enabled> </SSLInfo> </TargetServer>
ในตัวอย่างข้างต้น คำจำกัดความแสดงว่าเซิร์ฟเวอร์เป้าหมาย
mocktarget
เป็นเซิร์ฟเวอร์ที่ปลอดภัยตามที่ระบุโดยบล็อก SSLInfo แต่มีการกำหนดค่าโดยใช้พอร์ต 80 ที่ไม่ปลอดภัยพอร์ต HM ที่ไม่ปลอดภัยของเป้าหมายที่ปลอดภัย
สถานการณ์ที่ 2: กำหนดเซิร์ฟเวอร์เป้าหมายรักษาความปลอดภัยแต่กำหนดค่าการตรวจสอบสุขภาพด้วยพอร์ตที่ไม่ปลอดภัย
หากคุณกำหนดเซิร์ฟเวอร์เป้าหมายที่ปลอดภัยแต่กำหนดค่าการตรวจสอบสุขภาพด้วยพอร์ตที่ไม่ปลอดภัย เช่น 80 คุณจะได้รับข้อผิดพลาดนี้ ทำตามขั้นตอนด้านล่างเพื่อยืนยันว่านี่เป็นสาเหตุของปัญหาหรือไม่
- โปรดตรวจสอบคำจำกัดความของเซิร์ฟเวอร์เป้าหมายที่ใช้ในการกำหนดค่าปลายทางเป้าหมาย
ใช้ รับ TargetServer API เพื่อรับการกำหนดเซิร์ฟเวอร์เป้าหมาย
เอาต์พุตคำจำกัดความเซิร์ฟเวอร์เป้าหมาย
<TargetServer name="mocktarget"> <Host>mocktarget.apigee.net</Host> <Port>443</Port> <IsEnabled>true</IsEnabled> <SSLInfo> <Enabled>true</Enabled> </SSLInfo> </TargetServer>
ในตัวอย่างข้างต้น คำจำกัดความแสดงว่าเซิร์ฟเวอร์เป้าหมาย
mocktarget
เป็นเซิร์ฟเวอร์ที่ปลอดภัยตามที่ระบุโดยบล็อก SSLInfo - ถัดไป ให้ตรวจสอบการกำหนดค่า Health Monitor สำหรับเซิร์ฟเวอร์เป้าหมายในการกำหนดค่าปลายทางเป้าหมาย ดังนี้
การกำหนดค่าการตรวจสอบสุขภาพ
<HealthMonitor> <IsEnabled>true</IsEnabled> <IntervalInSec>5</IntervalInSec> <HTTPMonitor> <Request> <ConnectTimeoutInSec>10</ConnectTimeoutInSec> <SocketReadTimeoutInSec>30</SocketReadTimeoutInSec> <Port>80</Port> <Verb>GET</Verb> <Path>/statuscode/200</Path> </Request> <SuccessResponse> <ResponseCode>200</ResponseCode> </SuccessResponse> </HTTPMonitor>
ในตัวอย่างข้างต้น การตรวจสอบสุขภาพได้รับการกำหนดค่าด้วยพอร์ต 80 ที่ไม่ปลอดภัยตามที่ระบุโดยองค์ประกอบ
<Port>
- จากข้อมูลข้างต้น สาเหตุของข้อผิดพลาดนี้คือเซิร์ฟเวอร์เป้าหมายได้รับการระบุว่าเป็นเซิร์ฟเวอร์ที่ปลอดภัย (เนื่องจากมีการเปิดใช้บล็อก SSLInfo และใช้พอร์ตที่ปลอดภัย 443 แต่ Health Monitor ได้รับการกำหนดค่าให้ตรวจสอบประสิทธิภาพการทำงานด้วยพอร์ต 80 ที่ไม่ปลอดภัย (ระบุไว้ในองค์ประกอบ
<Port>
)ในกรณีนี้ Edge จะทําให้ API การตรวจสอบประสิทธิภาพการทํางานเป็นการเรียกใช้ที่ปลอดภัยซึ่งมีพอร์ต 80 ที่ไม่ปลอดภัย และล้มเหลวโดยมีข้อผิดพลาดที่กล่าวถึงข้างต้น
ความละเอียด
พอร์ตที่ไม่ปลอดภัยของเป้าหมาย
สถานการณ์ที่ 1: ระบุเซิร์ฟเวอร์เป้าหมายที่ปลอดภัยด้วยพอร์ตที่ไม่ปลอดภัย
หากต้องการแก้ไขข้อผิดพลาดนี้ ให้อัปเดตคำจำกัดความเซิร์ฟเวอร์เป้าหมายเพื่อใช้พอร์ตที่ปลอดภัยที่เหมาะสม
ใช้ Update a TargetServer API เพื่ออัปเดตการกำหนดเซิร์ฟเวอร์เป้าหมาย และตรวจสอบว่า มีการใช้พอร์ตที่ปลอดภัย (เช่น 443) ดังที่แสดงในตัวอย่างด้านล่าง
<TargetServer name="mocktarget"> <Host>mocktarget.apigee.net</Host> <Port>443</Port> <IsEnabled>true</IsEnabled> <SSLInfo> <Enabled>true</Enabled> </SSLInfo> </TargetServer>
พอร์ต HM ที่ไม่ปลอดภัยของเป้าหมายที่ปลอดภัย
สถานการณ์ที่ 2: กำหนดเซิร์ฟเวอร์เป้าหมายรักษาความปลอดภัยแต่กำหนดค่าการตรวจสอบสุขภาพด้วยพอร์ตที่ไม่ปลอดภัย
ทำตามวิธีการด้านล่างเพื่อแก้ไขข้อผิดพลาด
- แก้ไขการกำหนดค่า Health Monitor ให้ใช้พอร์ตที่ปลอดภัย (เช่น 443) เพื่อดำเนินการตรวจสอบประสิทธิภาพการทำงานของเซิร์ฟเวอร์เป้าหมายในการกำหนดค่าปลายทางเป้าหมายของพร็อกซี API ที่ล้มเหลว ดังที่แสดงด้านล่าง
<HealthMonitor> <IsEnabled>true</IsEnabled> <IntervalInSec>5</IntervalInSec> <HTTPMonitor> <Request> <ConnectTimeoutInSec>10</ConnectTimeoutInSec> <SocketReadTimeoutInSec>30</SocketReadTimeoutInSec> <Port>443</Port> <Verb>GET</Verb> <Path>/statuscode/200</Path> </Request> <SuccessResponse> <ResponseCode>200</ResponseCode> </SuccessResponse> </HTTPMonitor> </HealthMonitor>
- บันทึกการเปลี่ยนแปลงไปยังพร็อกซี API
สาเหตุ: คำขอที่ไม่ปลอดภัยในพอร์ตที่ปลอดภัย
การวินิจฉัย
- ระบุรหัสข้อความของคำขอที่ล้มเหลว
- ค้นหารหัสข้อความในบันทึกผู้ประมวลผลข้อความ (
/opt/apigee/var/log/edge-message-processor/logs/system.log
) - คุณจะเห็นข้อความแสดงข้อผิดพลาดที่พบบ่อยซึ่งสอดคล้องกับรหัสข้อความ
อย่างไรก็ตาม หากต้องการทราบสาเหตุจริงที่ทำให้เกิดความล้มเหลวในการตรวจสอบประสิทธิภาพการทำงาน ให้เลื่อนไปที่ข้อความแสดงข้อผิดพลาดที่พบบ่อยเหล่านี้และตรวจหาข้อผิดพลาดจากการตรวจสอบประสิทธิภาพการทำงาน
ตัวอย่างเช่น คุณอาจเห็นข้อผิดพลาดเกี่ยวกับ HEALTH MONITOR ตามที่แสดงด้านล่าง
Apigee-Timer-2 ERROR SERVICES.HEALTH_MONITOR - HTTPMonitor.getResponseFromCache() : Error sending request Request URL : http://mocktarget.apigee.net:443/status java.net.SocketException: Unexpected end of file from server at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:851) at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:678) at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:848) at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:678) at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1587) …<snipped>
หากข้อผิดพลาดนี้เกิดซ้ำเป็นเวลา
MaxFailure
ครั้งที่กำหนดค่าไว้ในตัวตรวจสอบสุขภาพ คุณจะเห็นข้อความเตือนดังนี้Apigee-Timer-7 WARN ADAPTORS.HTTP.FLOW - LBServer.incrementFailureCount() : Max failure count(10) reached for server : mocktarget{Environment=<orgname>__prod,Application=mocktargetapigee__1,Target=default}
อ่านข้อมูลที่ระบุไว้ในข้อความเตือนอย่างละเอียด ตรวจสอบว่าถึงจำนวน
MaxFailure
สำหรับเซิร์ฟเวอร์เป้าหมายที่ใช้ในพร็อกซี API เฉพาะที่คุณพบกับโค้ดตอบกลับ 503 ที่มีรหัสข้อผิดพลาด NoActiveTargets - การตรวจสอบประสิทธิภาพการทำงานล้มเหลวโดยมีข้อผิดพลาด:
Error sending request Request URL : http://mocktarget.apigee.net:443/status java.net.SocketException: Unexpected end of file from server
ข้อความแสดงข้อผิดพลาดและ URL ระบุสาเหตุของปัญหานี้คือการเรียกใช้ที่ไม่ปลอดภัย (HTTP) เกิดขึ้นในพอร์ตที่ปลอดภัย 443
ข้อผิดพลาดนี้อาจเกิดขึ้นจาก 2 สถานการณ์ต่อไปนี้
- กำหนดเซิร์ฟเวอร์เป้าหมายที่ไม่ปลอดภัยโดยมีพอร์ตที่ปลอดภัย
- มีการกำหนดเซิร์ฟเวอร์เป้าหมายที่ไม่ปลอดภัยแต่มีการกำหนดค่าการตรวจสอบสุขภาพด้วยพอร์ตที่ปลอดภัย
พอร์ตที่ปลอดภัยของเป้าหมายที่ไม่ปลอดภัย
สถานการณ์ที่ 1: เซิร์ฟเวอร์เป้าหมายที่ไม่ปลอดภัยซึ่งกำหนดด้วยพอร์ตที่ปลอดภัย
หากคุณกำหนดเซิร์ฟเวอร์เป้าหมายที่ไม่ปลอดภัยแต่มีพอร์ตที่ปลอดภัย เช่น 443 คุณจะได้รับข้อผิดพลาดนี้ ทำตามขั้นตอนด้านล่างเพื่อยืนยันว่าเป็นสาเหตุของปัญหานี้หรือไม่
- โปรดตรวจสอบคำจำกัดความของเซิร์ฟเวอร์เป้าหมายที่ใช้ในการกำหนดค่าปลายทางเป้าหมาย
ใช้ รับ TargetServer API เพื่อรับการกำหนดเซิร์ฟเวอร์เป้าหมาย
เอาต์พุตคำจำกัดความเซิร์ฟเวอร์เป้าหมาย
<TargetServer name="mocktarget"> <Host>mocktarget.apigee.net</Host> <Port>443</Port> <IsEnabled>true</IsEnabled> </TargetServer>
ในตัวอย่างข้างต้น คําจํากัดความแสดงว่าเซิร์ฟเวอร์เป้าหมาย
mocktarget
เป็นเซิร์ฟเวอร์ที่ไม่ปลอดภัย เนื่องจากไม่มีการบล็อก SSLInfo แต่ระบบกำหนดค่าไม่ถูกต้องโดยใช้พอร์ต 443 ที่ปลอดภัย - ตอนนี้ให้ตรวจสอบการกำหนดค่า Health Monitor สำหรับเซิร์ฟเวอร์เป้าหมายในการกำหนดค่าปลายทางเป้าหมาย ดังนี้
การกำหนดค่าการตรวจสอบสุขภาพ
<HealthMonitor> <IsEnabled>true</IsEnabled> <IntervalInSec>5</IntervalInSec> <HTTPMonitor> <Request> <ConnectTimeoutInSec>10</ConnectTimeoutInSec> <SocketReadTimeoutInSec>30</SocketReadTimeoutInSec> <Verb>GET</Verb> <Path>/statuscode/200</Path> </Request> <SuccessResponse> <ResponseCode>200</ResponseCode> </SuccessResponse> </HTTPMonitor> </HealthMonitor>
โปรดทราบว่าไม่มีองค์ประกอบ
<Port>
ที่ระบุไว้ในการกำหนดค่า Health Monitor ด้านบน ในกรณีนี้ Message Processor ของ Edge จะใช้พอร์ตที่ระบุในคำจำกัดความเซิร์ฟเวอร์เป้าหมายคือ 443 - จากข้อมูลข้างต้น สาเหตุของข้อผิดพลาดนี้คือเซิร์ฟเวอร์เป้าหมายได้รับการระบุว่าเป็นเซิร์ฟเวอร์ที่ไม่ปลอดภัย (เนื่องจากไม่มีการกำหนดบล็อก SSLInfo) แต่ต้องมีพอร์ตที่ปลอดภัย 443
กล่าวคือ Edge จะทำให้การตรวจสอบประสิทธิภาพการทำงานเป็นการเรียกใช้ที่ไม่ปลอดภัยที่มีพอร์ตที่ปลอดภัย 443 และไม่ล้มเหลวโดยมีข้อผิดพลาดที่กล่าวถึงข้างต้น
พอร์ต HM ที่ปลอดภัยของเป้าหมายที่ไม่ปลอดภัย
สถานการณ์ที่ 2: มีการกำหนดเซิร์ฟเวอร์เป้าหมายที่ไม่ปลอดภัยแต่กำหนดค่าการตรวจสอบสุขภาพด้วยพอร์ตที่ปลอดภัย
หากคุณกำหนดเซิร์ฟเวอร์เป้าหมายที่ไม่ปลอดภัยแต่กำหนดค่าการตรวจสอบสุขภาพด้วยพอร์ตที่ปลอดภัย เช่น 443 คุณจะได้รับข้อผิดพลาดนี้ ทำตามขั้นตอนด้านล่างเพื่อยืนยันว่าเป็นสาเหตุของปัญหานี้หรือไม่
- โปรดตรวจสอบคำจำกัดความของเซิร์ฟเวอร์เป้าหมายที่ใช้ในการกำหนดค่าปลายทางเป้าหมาย
ใช้ รับ TargetServer API เพื่อรับการกำหนดเซิร์ฟเวอร์เป้าหมาย
เอาต์พุตคำจำกัดความเซิร์ฟเวอร์เป้าหมาย
<TargetServer name="mocktarget"> <Host>mocktarget.apigee.net</Host> <Port>80</Port> <IsEnabled>true</IsEnabled> </TargetServer>
ในตัวอย่างข้างต้น คำจำกัดความแสดงให้เห็นว่าเซิร์ฟเวอร์เป้าหมาย
mocktarget
เป็นเซิร์ฟเวอร์ที่ไม่ปลอดภัย (เนื่องจากไม่มีการบล็อก SSLInfo ) ที่กำหนดค่าด้วยพอร์ต 80 ที่ไม่ปลอดภัยอย่างถูกต้อง - ถัดไป ให้ตรวจสอบการกำหนดค่า Health Monitor สำหรับเซิร์ฟเวอร์เป้าหมายในการกำหนดค่าปลายทางเป้าหมาย ดังนี้
การกำหนดค่าการตรวจสอบสุขภาพ
<HealthMonitor> <IsEnabled>true</IsEnabled> <IntervalInSec>5</IntervalInSec> <HTTPMonitor> <Request> <ConnectTimeoutInSec>10</ConnectTimeoutInSec> <SocketReadTimeoutInSec>30</SocketReadTimeoutInSec> <Port>443</Port> <Verb>GET</Verb> <Path>/statuscode/200</Path> </Request> <SuccessResponse> <ResponseCode>200</ResponseCode> </SuccessResponse> </HTTPMonitor> </HealthMonitor>
ในตัวอย่างข้างต้น Health Monitor ได้รับการกำหนดค่าด้วยพอร์ต 443 ที่ปลอดภัยตามที่ระบุโดยองค์ประกอบ
<Port>
- จากข้อมูลข้างต้น สาเหตุของข้อผิดพลาดนี้คือเซิร์ฟเวอร์เป้าหมายได้รับการระบุว่าเป็นเซิร์ฟเวอร์ที่ไม่ปลอดภัย (เนื่องจากไม่ได้กำหนดบล็อก SSLInfo ไว้) มีพอร์ตที่ไม่ปลอดภัย 80 อย่างถูกต้อง แต่ Health Monitor ได้รับการกำหนดค่าให้ดำเนินการตรวจสอบประสิทธิภาพการทำงานด้วยพอร์ตที่ปลอดภัย 443 (ระบุไว้ในองค์ประกอบ
<Port>
)ในกรณีนี้ Edge จะทำการตรวจสอบประสิทธิภาพการทำงานเป็นการเรียกใช้ที่ไม่ปลอดภัยด้วยพอร์ตที่ปลอดภัย 443 และล้มเหลวโดยมีข้อผิดพลาดที่กล่าวถึงข้างต้น
ความละเอียด
พอร์ตที่ปลอดภัยของเป้าหมายที่ไม่ปลอดภัย
สถานการณ์ที่ 1: เซิร์ฟเวอร์เป้าหมายที่ไม่ปลอดภัยซึ่งกำหนดด้วยพอร์ตที่ปลอดภัย
หากต้องการแก้ไขข้อผิดพลาดนี้ ให้อัปเดตคำจำกัดความเซิร์ฟเวอร์เป้าหมายเพื่อใช้พอร์ตที่ปลอดภัยที่เหมาะสม
ใช้ Update a Target Server API เพื่ออัปเดตคําจํากัดความของเซิร์ฟเวอร์เป้าหมายและตรวจสอบว่า ใช้พอร์ตที่ไม่ปลอดภัย (เช่น 80) ดังที่แสดงในตัวอย่างด้านล่าง
<TargetServer name="mocktarget"> <Host>mocktarget.apigee.net</Host> <Port>80</Port> <IsEnabled>true</IsEnabled> </TargetServer>
พอร์ต HM ที่ปลอดภัยของเป้าหมายที่ไม่ปลอดภัย
สถานการณ์ที่ 2: มีการกำหนดเซิร์ฟเวอร์เป้าหมายที่ไม่ปลอดภัยแต่กำหนดค่าการตรวจสอบสุขภาพด้วยพอร์ตที่ปลอดภัย
ทำตามวิธีการด้านล่างเพื่อแก้ไขข้อผิดพลาด
- นำองค์ประกอบ
<Port>
ออกจากการกำหนดค่า Health Monitor หรือแก้ไขการกำหนดค่า Health Monitor ให้ใช้พอร์ตที่ไม่ปลอดภัย (เช่น 80) เพื่อดำเนินการตรวจสอบประสิทธิภาพการทำงานของเซิร์ฟเวอร์เป้าหมายในการกำหนดค่าปลายทางเป้าหมายของพร็อกซี API ที่ล้มเหลว ดังที่แสดงด้านล่าง<HealthMonitor> <IsEnabled>true</IsEnabled> <IntervalInSec>5</IntervalInSec> <HTTPMonitor> <Request> <ConnectTimeoutInSec>10</ConnectTimeoutInSec> <SocketReadTimeoutInSec>30</SocketReadTimeoutInSec> <Port>80</Port> <Verb>GET</Verb> <Path>/statuscode/200</Path> </Request> <SuccessResponse> <ResponseCode>200</ResponseCode> </SuccessResponse> </HTTPMonitor> </HealthMonitor>
- บันทึกการเปลี่ยนแปลงไปยังพร็อกซี API
สาเหตุ: API การตรวจสอบประสิทธิภาพตอบสนองโดยมีข้อผิดพลาด
การวินิจฉัย
- ระบุรหัสข้อความของคำขอที่ล้มเหลว
- ค้นหารหัสข้อความในบันทึกผู้ประมวลผลข้อความ (
/opt/apigee/var/log/edge-message-processor/logs/system.log
) - คุณจะเห็นข้อความแสดงข้อผิดพลาดที่พบบ่อยซึ่งสอดคล้องกับรหัสข้อความ
อย่างไรก็ตาม หากต้องการทราบสาเหตุจริงที่ทำให้เกิดความล้มเหลวในการตรวจสอบประสิทธิภาพการทำงาน ให้เลื่อนไปที่ข้อความแสดงข้อผิดพลาดที่พบบ่อยเหล่านี้ และตรวจหาข้อผิดพลาด/คำเตือนเกี่ยวกับ HEALTH MONITOR
ตัวอย่างเช่น คุณอาจเห็นคำเตือนของ HEALTH MONITOR ตามที่แสดงด้านล่าง
Apigee-Timer-7 INFO SERVICES.HEALTH_MONITOR - HTTPMonitor.sendRequest() : HTTPMonitor.monitor() : Connecting to https://mocktarget.apigee.net:443/status/200 Apigee-Timer-7 WARN SERVICES.HEALTH_MONITOR - HTTPMonitor.monitor() : HTTP response code from health monitoring service does not match.Expected response code : [200]. Received response code : 404
หากข้อผิดพลาดนี้เกิดซ้ำเป็นเวลา
MaxFailure
ครั้งที่กำหนดค่าไว้ในตัวตรวจสอบสุขภาพ คุณจะเห็นข้อความเตือนดังนี้Apigee-Timer-7 WARN ADAPTORS.HTTP.FLOW - LBServer.incrementFailureCount() : Max failure count(10) reached for server : mocktarget{Environment=<orgname>__prod,Application=mocktargetapigee__1,Target=default}
อ่านข้อมูลที่ระบุไว้ในข้อความเตือนอย่างละเอียด ตรวจสอบว่าถึงจำนวน
MaxFailure
สำหรับเซิร์ฟเวอร์เป้าหมายที่ใช้ในพร็อกซี API เฉพาะที่คุณพบกับโค้ดตอบกลับ 503 ที่มีรหัสข้อผิดพลาด NoActiveTargets - การตรวจสอบประสิทธิภาพการทำงานแสดงข้อความเตือน:
HTTP response code from health monitoring service does not match.Expected response code : [200]. Received response code : 404
ข้อความเตือนด้านบนระบุว่าโค้ดตอบกลับที่คาดไว้สำหรับ API การตรวจสอบประสิทธิภาพการทำงานคือ 200 แต่การตอบสนองจริงที่ได้รับคือ 404 ดังนั้นระบบจึงถือเป็นความล้มเหลว
- ก่อนตรวจสอบสาเหตุของการตอบกลับข้อผิดพลาดจาก API การตรวจสอบประสิทธิภาพการทำงาน ให้หาสาเหตุที่ Edge คาดหวังโค้ดตอบกลับเป็น 200 สำหรับ API การตรวจสอบประสิทธิภาพการทำงาน หากต้องการดำเนินการนี้ ให้ตรวจสอบการกำหนดค่า Health Monitor สำหรับเซิร์ฟเวอร์เป้าหมายในการกำหนดค่าปลายทางเป้าหมาย ดังนี้
การกำหนดค่าการตรวจสอบสุขภาพ
<HealthMonitor> <IsEnabled>true</IsEnabled> <IntervalInSec>5</IntervalInSec> <HTTPMonitor> <Request> <ConnectTimeoutInSec>10</ConnectTimeoutInSec> <SocketReadTimeoutInSec>30</SocketReadTimeoutInSec> <Port>443</Port> <Verb>GET</Verb> <Path>/status/200</Path> </Request> <SuccessResponse> <ResponseCode>200</ResponseCode> </SuccessResponse> </HTTPMonitor> </HealthMonitor>
โปรดสังเกตว่ามีการกำหนดค่า Health Monitor ด้วยรหัสการตอบสนอง 200 ในส่วนองค์ประกอบ
<SuccessResponse>
ซึ่งหมายความว่าหาก Edge ได้รับโค้ดตอบกลับ (เช่น 400, 401, 404, 500) นอกเหนือจาก 200 จาก API การตรวจสอบประสิทธิภาพการทำงาน ระบบจะถือว่าเป็นข้อผิดพลาดและเพิ่มจำนวนความล้มเหลว - ขณะนี้หากต้องการตรวจสอบสาเหตุของการตอบสนองข้อผิดพลาดจาก API การตรวจสอบประสิทธิภาพการทำงาน ให้ทำตามขั้นตอนต่อไปนี้
- ดูที่ข้อความก่อนหน้าข้อความเตือนในบันทึกเครื่องมือประมวลผลข้อความ
Apigee-Timer-7 INFO SERVICES.HEALTH_MONITOR - HTTPMonitor.sendRequest() : HTTPMonitor.monitor() : Connecting to https://mocktarget.apigee.net:443/status/200
ให้จด URL การตรวจสอบประสิทธิภาพการทำงานจากข้อความนี้
- คุณสามารถเรียก URL นี้โดยตรงจากเครื่องมือประมวลผลข้อความและตรวจสอบการตอบกลับจริง
curl -i https://mocktarget.apigee.net:443/status/200
การตอบสนองจากการเรียกข้างต้นจะให้ 404 ตามที่เห็นในบันทึกของผู้ประมวลผลข้อความ:
< HTTP/2 404
- ซึ่งแสดงให้เห็นว่า แม้การเรียกโดยตรงไปยัง URL การตรวจสอบประสิทธิภาพการทำงานจะไม่สำเร็จด้วยรหัสการตอบสนอง 404 เดียวกัน ซึ่งหมายความว่า URL การตรวจสอบประสิทธิภาพการทํางานอาจไม่ถูกต้อง หรือทรัพยากรที่มีการเข้าถึงซึ่งเป็นส่วนหนึ่งของ URL ไม่มีอีกต่อไป
- ในตัวอย่าง API การตรวจสอบประสิทธิภาพการทำงานที่ให้ไว้ด้านบน ปัญหาเกิดขึ้นเนื่องจากมีการใช้ URL ที่ไม่ถูกต้องในการกำหนดค่า Health Monitor
พบ URL ที่ถูกต้องเป็น
https://mocktarget.apigee.net:443/statuscode/200
จาก Mock Target API - หากได้รับการตอบกลับสำหรับข้อผิดพลาดอื่นๆ ให้ระบุสาเหตุโดยทำตามขั้นตอนด้านบน หากจำเป็น ให้ทำงานร่วมกับทีมแบ็กเอนด์
ความละเอียด
- แก้ไขปัญหาเกี่ยวกับ API การตรวจสอบประสิทธิภาพการทำงานในเซิร์ฟเวอร์แบ็กเอนด์
- วิธีแก้ไขปัญหาในตัวอย่างที่ระบุไว้ข้างต้น
- แก้ไของค์ประกอบ
<Path>
ในการกำหนดค่า Health Monitor เป็น/statuscode/200
ดังที่แสดงด้านล่าง<Path>/statuscode/200</Path>
- บันทึกการเปลี่ยนแปลงในพร็อกซี API
หากยังคงพบปัญหาอยู่ ให้ไปที่ต้องรวบรวมข้อมูลการวินิจฉัย
วินิจฉัยปัญหาโดยใช้การตรวจสอบ API
การตรวจสอบ API ช่วยให้คุณแยกส่วนที่เป็นปัญหาได้อย่างรวดเร็วเพื่อวิเคราะห์ปัญหาเกี่ยวกับข้อผิดพลาด ประสิทธิภาพ และเวลาในการตอบสนองและแหล่งที่มา เช่น แอปของนักพัฒนาซอฟต์แวร์, พร็อกซี API, เป้าหมายแบ็กเอนด์ หรือแพลตฟอร์ม API
ดูสถานการณ์ตัวอย่างที่แสดงวิธีแก้ปัญหา 5xx เกี่ยวกับ API โดยใช้ API Monitoring ตัวอย่างเช่น คุณอาจต้องการตั้งค่าการแจ้งเตือนเพื่อรับการแจ้งเตือนเมื่อจำนวนข้อผิดพลาด messaging.adaptors.http.flow.NoActiveTargets
เกินเกณฑ์หนึ่งๆ
ต้องรวบรวมข้อมูลการวินิจฉัย
หากปัญหายังคงอยู่แม้ว่าจะทำตามวิธีการข้างต้นแล้ว โปรดรวบรวมข้อมูลการวินิจฉัยต่อไปนี้ ติดต่อและแชร์กับทีมสนับสนุนของ Apigee
- หากคุณเป็นผู้ใช้ Public Cloud โปรดระบุข้อมูลต่อไปนี้
- ชื่อองค์กร
- ชื่อสภาพแวดล้อม
- ชื่อพร็อกซี API
- ใช้คำสั่ง curl เพื่อจำลองข้อผิดพลาด
- ไฟล์การติดตามที่มีคำขอที่มี 503 Service Unavailable โดยมีรหัสข้อผิดพลาด NoActiveTargets
- หากคุณเป็นผู้ใช้ Private Cloud ให้ระบุข้อมูลต่อไปนี้
- สังเกตข้อความแสดงข้อผิดพลาดให้เสร็จสมบูรณ์
- ชื่อสภาพแวดล้อม
- กลุ่มพร็อกซี API
- ไฟล์การติดตามที่มีคำขอที่มี 503 Service Unavailable โดยมีรหัสข้อผิดพลาด NoActiveTargets
- บันทึกการเข้าถึง NGINX
(
/opt/apigee/var/log/edge-router/nginx/<org>~<env>.<port#>_access_log
) - บันทึกตัวประมวลผลข้อความ
(
/opt/apigee/var/log/edge-message-processor/logs/system.log
)