503 ไม่พร้อมให้บริการ - NoActiveTargets - Health CheckFailures

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

วิดีโอ

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

วิดีโอ คำอธิบาย
แก้ปัญหาและแก้ไขข้อผิดพลาด 503 ไม่พร้อมให้บริการ - NoActiveTargets ดูข้อมูลเกี่ยวกับสิ่งต่อไปนี้
  • ความสำคัญของเซิร์ฟเวอร์เป้าหมายและเครื่องมือตรวจสอบสถานะ
  • การแก้ปัญหาและแก้ไขข้อผิดพลาดแบบเรียลไทม์ 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

เพลย์บุ๊กนี้ครอบคลุมถึง 503 Service Unavailable ที่มีรหัสข้อผิดพลาด NoActiveTargets ซึ่งเกิดจากความล้มเหลวในการตรวจสอบสถานะ โปรดดูสาเหตุอื่นๆ ที่ทำให้เกิดข้อผิดพลาดนี้ในคู่มือนี้

การตรวจสอบประสิทธิภาพการทำงานไม่สำเร็จ

ระบบจะสังเกตเห็นความล้มเหลวในการตรวจสอบสถานะก็ต่อเมื่อคุณได้กำหนดค่า Health Monitor เป็นส่วนหนึ่งของการกำหนดค่าการโหลดบาลานซ์ของเซิร์ฟเวอร์เป้าหมายในปลายทางเป้าหมายของ API Proxy

เมื่อเซิร์ฟเวอร์เป้าหมายไม่ผ่านการตรวจสอบสถานะ Edge จะเพิ่มจำนวนครั้งที่เซิร์ฟเวอร์นั้นล้มเหลว หากจำนวนการตรวจสอบประสิทธิภาพการทำงานที่ไม่สำเร็จสำหรับเซิร์ฟเวอร์นั้นถึงเกณฑ์ที่กำหนดไว้ล่วงหน้า (<MaxFailures>) Message Processor จะบันทึกข้อความเตือนตามที่แสดงด้านล่างลงในไฟล์บันทึก

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 อีกครั้ง

สาเหตุที่เป็นไปได้ที่ทำให้การตรวจสอบสถานะล้มเหลวมีดังนี้

สาเหตุ คำอธิบาย ผู้ที่มีสิทธิ์ทำตามขั้นตอนการแก้ปัญหา
ข้อผิดพลาดการเชื่อมต่อหมดเวลา Message Processor เชื่อมต่อกับเซิร์ฟเวอร์เป้าหมายไม่ได้ภายในระยะหมดเวลาที่ระบุ ในการกำหนดค่า LoadBalancer ผู้ใช้ Edge Private Cloud
คำขอที่ปลอดภัยในพอร์ตที่ไม่ปลอดภัย
  1. หากกำหนดเซิร์ฟเวอร์เป้าหมายให้เป็นเซิร์ฟเวอร์ที่ปลอดภัย แต่กำหนดค่าพอร์ตที่ไม่ปลอดภัยอย่างไม่ถูกต้อง
  2. หากกำหนดเซิร์ฟเวอร์เป้าหมายให้เป็นเซิร์ฟเวอร์ที่ปลอดภัย แต่กำหนดค่าเครื่องมือตรวจสอบประสิทธิภาพการทำงานให้ทำการตรวจสอบประสิทธิภาพการทำงานในพอร์ตที่ไม่ปลอดภัย
ผู้ใช้ Edge Private Cloud
คำขอที่ไม่ปลอดภัยในพอร์ตที่ปลอดภัย
  1. หากกำหนดเซิร์ฟเวอร์เป้าหมายให้เป็นเซิร์ฟเวอร์ที่ไม่ปลอดภัย แต่กำหนดค่าอย่างไม่ถูกต้อง ด้วยพอร์ตที่ปลอดภัย
  2. หากกำหนดเซิร์ฟเวอร์เป้าหมายให้เป็นเซิร์ฟเวอร์ที่ไม่ปลอดภัย แต่กำหนดค่าเครื่องมือตรวจสอบสถานะให้ ทำการตรวจสอบสถานะในพอร์ตที่ปลอดภัย
ผู้ใช้ Edge Private Cloud
Health Check API ตอบกลับด้วยข้อผิดพลาด หาก API การตรวจสอบสถานะตอบกลับด้วยข้อผิดพลาดหรือโค้ดตอบกลับอื่นๆ นอกเหนือจากที่ระบุไว้ในองค์ประกอบ SuccessResponse ของเครื่องมือตรวจสอบสถานะ ผู้ใช้ Edge Private Cloud

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

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

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

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

  1. เปิดใช้เซสชันการติดตาม เรียก API และทำซ้ำปัญหา - 503 ไม่พร้อมให้บริการพร้อมรหัสข้อผิดพลาด NoActiveTargets
  2. เลือกคำขอที่ล้มเหลวรายการใดรายการหนึ่ง
  3. ไปที่เฟส 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.NoActiveTargets ให้จดรหัสข้อความสำหรับคำขอดังกล่าวอย่างน้อย 1 รายการตามที่แสดงในตัวอย่างต่อไปนี้

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

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

ข้อความแสดงข้อผิดพลาดที่พบบ่อย

เมื่อใช้เซิร์ฟเวอร์เป้าหมายและเกิดข้อผิดพลาดขณะที่ Message Processor พยายาม เชื่อมต่อกับเซิร์ฟเวอร์แบ็กเอนด์ คุณจะเห็นข้อความแสดงข้อผิดพลาดทั่วไป 2-3 รายการใน บันทึกของ Message Processor ระบบจะบันทึกข้อผิดพลาดเหล่านี้หลังจากข้อความข้อยกเว้น/ข้อผิดพลาดจริง ที่ทำให้เกิดความล้มเหลว

ข้อความแสดงข้อผิดพลาดที่พบบ่อยซึ่งสังเกตได้ในบันทึกของ Message Processor (/opt/apigee/var/log/edge-message-processor/logs/system.log) สำหรับ 503 บริการไม่พร้อมใช้งานที่มีรหัสข้อผิดพลาด 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>

ข้อความแสดงข้อผิดพลาดเหล่านี้บ่งชี้ว่าส่งคำขอไปยังเซิร์ฟเวอร์แบ็กเอนด์ไม่ได้เนื่องจาก ไม่สำเร็จ ด้วยเหตุนี้ Message Processor จึงส่ง 503 Service Unavailable พร้อมรหัสข้อผิดพลาด NoActiveTargets เป็นการตอบกลับไคลเอ็นต์

สาเหตุ: การเชื่อมต่อหมดเวลา

การวินิจฉัย

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

    ตัวอย่างเช่น ข้อความแสดงข้อผิดพลาดของ HEALTH MONITOR ต่อไปนี้บ่งชี้ว่า Message Processor ล้มเหลว เนื่องจากข้อผิดพลาดการเชื่อมต่อหมดเวลาเมื่อส่งคำขอ 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

  4. ในตัวอย่างด้านบน การตรวจสอบประสิทธิภาพการทำงานไม่สำเร็จเนื่องจากข้อผิดพลาด connection timed out ตรวจสอบว่าคุณเชื่อมต่อกับเซิร์ฟเวอร์แบ็กเอนด์ที่เฉพาะเจาะจงได้โดยตรงจากแต่ละ Message Processor โดยใช้คำสั่ง telnet หรือไม่
  5. telnet <BackendServer-HostName> 443
          
  6. หากเชื่อมต่อกับเซิร์ฟเวอร์แบ็กเอนด์ได้ คุณอาจเห็นข้อความเช่น เชื่อมต่อกับเซิร์ฟเวอร์แบ็กเอนด์แล้ว จากนั้นปัญหาอาจเป็นปัญหาชั่วคราวและ อาจได้รับการแก้ไขแล้วหรือเป็นปัญหาที่เกิดขึ้นเป็นครั้งคราว ทำขั้นตอนที่ 4 ซ้ำ 2-3 ครั้ง (10 ครั้งขึ้นไป) และตรวจสอบเอาต์พุต
    1. หากไม่มีข้อผิดพลาดในคำสั่ง telnet อย่างต่อเนื่อง แสดงว่าปัญหาได้รับการแก้ไขแล้ว ตรวจสอบอีกครั้งว่าการตรวจสอบสถานะล้มเหลวหยุดลงแล้วหรือไม่ หากใช่ คุณก็ไม่ต้องดำเนินการใดๆ เพิ่มเติม
    2. หากคุณเชื่อมต่อกับเซิร์ฟเวอร์แบ็กเอนด์ด้วยคำสั่ง telnet ไม่ได้เป็นระยะๆ แสดงว่าอาจเกิดปัญหาเครือข่ายหรือเซิร์ฟเวอร์แบ็กเอนด์อาจทำงานหนัก
  7. หากคุณเชื่อมต่อกับเซิร์ฟเวอร์แบ็กเอนด์ด้วยคำสั่ง telnet ไม่ได้ แสดงว่าอาจเป็นเพราะระบบไม่อนุญาตการรับส่งข้อมูลจากตัวประมวลผลข้อความในเซิร์ฟเวอร์แบ็กเอนด์ที่เฉพาะเจาะจง

ความละเอียด

หากพบข้อผิดพลาด connection timed out อย่างต่อเนื่อง โปรดตรวจสอบว่าเซิร์ฟเวอร์แบ็กเอนด์ไม่มีข้อจำกัดของไฟร์วอลล์และอนุญาตการรับส่งข้อมูลจากตัวประมวลผลข้อความ Apigee Edge เช่น ใน Linux คุณสามารถใช้ iptables เพื่ออนุญาตการรับส่งข้อมูลจาก ที่อยู่ IP ของตัวประมวลผลข้อความในเซิร์ฟเวอร์แบ็กเอนด์

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

สาเหตุ: คำขอที่ปลอดภัยในพอร์ตที่ไม่ปลอดภัย

การวินิจฉัย

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

    เช่น คุณอาจเห็นข้อผิดพลาด 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

  4. การตรวจสอบประสิทธิภาพการทำงานไม่สำเร็จเนื่องจากข้อผิดพลาดต่อไปนี้
    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 คุณจะได้รับข้อผิดพลาดนี้ โปรดทำตามขั้นตอนด้านล่างเพื่อตรวจสอบว่าสาเหตุของปัญหานี้เกิดจากส่วนขยายหรือไม่

    1. ตรวจสอบคำจำกัดความของเซิร์ฟเวอร์เป้าหมายที่ใช้ในการกำหนดค่าปลายทางเป้าหมาย
    2. ใช้ Get 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 ที่ไม่ปลอดภัย

    3. ตอนนี้ ให้ตรวจสอบการกำหนดค่าเครื่องมือตรวจสอบสถานะสำหรับเซิร์ฟเวอร์เป้าหมายในการกำหนดค่าอุปกรณ์ปลายทางเป้าหมาย

      การกำหนดค่าการตรวจสอบสถานะ

      <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> ที่ระบุในการกำหนดค่าเครื่องมือตรวจสอบสถานะด้านบน ในกรณีนี้ Message Processor ของ Edge จะใช้พอร์ตที่ระบุไว้ในคำจำกัดความของเซิร์ฟเวอร์เป้าหมาย (ซึ่งคือ 80) เพื่อทำการเรียก API การตรวจสอบประสิทธิภาพการทำงาน

    4. จากข้อมูลข้างต้น สาเหตุของข้อผิดพลาดนี้คือเซิร์ฟเวอร์เป้าหมาย ได้รับการกำหนดให้เป็นเซิร์ฟเวอร์ที่ปลอดภัย (เนื่องจากเปิดใช้บล็อก SSLInfo) แต่ใช้พอร์ต 80 ที่ไม่ปลอดภัย

    พอร์ต HM ที่ไม่ปลอดภัยของเป้าหมายที่ปลอดภัย

    สถานการณ์ที่ 2: กำหนดเซิร์ฟเวอร์เป้าหมายที่ปลอดภัย แต่กำหนดค่า Health Monitor ด้วยพอร์ตที่ไม่ปลอดภัย

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

    1. ตรวจสอบคำจำกัดความของเซิร์ฟเวอร์เป้าหมายที่ใช้ในการกำหนดค่าปลายทางเป้าหมาย

      ใช้ Get TargetServer API เพื่อรับคำจำกัดความของเซิร์ฟเวอร์เป้าหมาย

      เอาต์พุตคำจำกัดความของเซิร์ฟเวอร์เป้าหมาย

      <TargetServer name="mocktarget">
        <Host>mocktarget.apigee.net</Host>
        <Port>443</Port>
        <IsEnabled>true</IsEnabled>
        <SSLInfo>
            <Enabled>true</Enabled>
        </SSLInfo>
      </TargetServer>
              

      ในตัวอย่างด้านบน คำจำกัดความแสดงให้เห็นว่าเซิร์ฟเวอร์เป้าหมาย mocktarget เป็นเซิร์ฟเวอร์ที่ปลอดภัยตามที่ระบุไว้ในบล็อก SSLInfo

    2. จากนั้นตรวจสอบการกำหนดค่าเครื่องมือตรวจสอบสถานะสำหรับเซิร์ฟเวอร์เป้าหมายในการกำหนดค่าอุปกรณ์ปลายทางเป้าหมาย

      การกำหนดค่าการตรวจสอบสถานะ

      <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>
              

      ในตัวอย่างข้างต้น Health Monitor ได้รับการกำหนดค่าด้วยพอร์ต 80 ที่ไม่ปลอดภัยตามที่ระบุโดยองค์ประกอบ <Port>

    3. จากข้อมูลข้างต้น สาเหตุของข้อผิดพลาดนี้คือมีการกำหนดเซิร์ฟเวอร์เป้าหมาย เป็นเซิร์ฟเวอร์ที่ปลอดภัย (เนื่องจากเปิดใช้บล็อก SSLInfo) และใช้พอร์ตที่ปลอดภัย 443 แต่มีการกำหนดค่า Health Monitor ให้ตรวจสอบประสิทธิภาพการทำงานด้วยพอร์ตที่ไม่ปลอดภัย 80 (ระบุไว้ในองค์ประกอบ <Port>)

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

ความละเอียด

พอร์ตเป้าหมายที่ปลอดภัยและไม่ปลอดภัย

สถานการณ์ที่ 1: กำหนดเซิร์ฟเวอร์เป้าหมายที่ปลอดภัยด้วยพอร์ตที่ไม่ปลอดภัย

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

ใช้ อัปเดต API ของ TargetServer เพื่ออัปเดตคำจำกัดความของเซิร์ฟเวอร์เป้าหมายและตรวจสอบว่า ใช้พอร์ตที่ปลอดภัย (เช่น 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 ด้วยพอร์ตที่ไม่ปลอดภัย

หากต้องการแก้ไขข้อผิดพลาดนี้ ให้ทำตามวิธีการด้านล่าง

  1. แก้ไขการกำหนดค่าเครื่องมือตรวจสอบสถานะเพื่อใช้พอร์ตที่ปลอดภัย (เช่น 443) เพื่อทำการตรวจสอบสถานะเซิร์ฟเวอร์เป้าหมายในการกำหนดค่าปลายทางเป้าหมายของ API Proxy ที่ล้มเหลวตามที่แสดงด้านล่าง
    <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>
            
  2. บันทึกการเปลี่ยนแปลงในพร็อกซี API

สาเหตุ: คำขอที่ไม่ปลอดภัยในพอร์ตที่ปลอดภัย

การวินิจฉัย

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

    เช่น คุณอาจเห็นข้อผิดพลาด 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

  4. การตรวจสอบประสิทธิภาพการทำงานไม่สำเร็จเนื่องจากข้อผิดพลาดต่อไปนี้
    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 คุณจะได้รับข้อผิดพลาดนี้ โปรดทำตามขั้นตอนด้านล่างเพื่อตรวจสอบว่าสาเหตุของปัญหานี้เกิดจากส่วนขยายหรือไม่

    1. ตรวจสอบคำจำกัดความของเซิร์ฟเวอร์เป้าหมายที่ใช้ในการกำหนดค่าปลายทางเป้าหมาย

      ใช้ Get TargetServer API เพื่อรับคำจำกัดความของเซิร์ฟเวอร์เป้าหมาย

      เอาต์พุตคำจำกัดความของเซิร์ฟเวอร์เป้าหมาย

      <TargetServer name="mocktarget">
        <Host>mocktarget.apigee.net</Host>
        <Port>443</Port>
        <IsEnabled>true</IsEnabled>
      </TargetServer>
                    

      ในตัวอย่างด้านบน คำจำกัดความแสดงให้เห็นว่าเซิร์ฟเวอร์เป้าหมาย mocktarget เป็นเซิร์ฟเวอร์ที่ไม่ปลอดภัยเนื่องจากไม่มีบล็อก SSLInfo แต่กำหนดค่าไม่ถูกต้องด้วยพอร์ต 443 ที่ปลอดภัย

    2. ตอนนี้ ให้ตรวจสอบการกำหนดค่าเครื่องมือตรวจสอบสถานะสำหรับเซิร์ฟเวอร์เป้าหมายในการกำหนดค่าอุปกรณ์ปลายทางเป้าหมาย

      การกำหนดค่าการตรวจสอบสถานะ

      <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

    3. จากข้อมูลข้างต้น สาเหตุของข้อผิดพลาดนี้คือมีการกำหนดเซิร์ฟเวอร์เป้าหมาย เป็นเซิร์ฟเวอร์ที่ไม่ปลอดภัย (เนื่องจากไม่ได้กำหนดบล็อก SSLInfo) แต่ใช้พอร์ต 443 ที่ปลอดภัย

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

    พอร์ต HM ที่ปลอดภัยของเป้าหมายที่ไม่ปลอดภัย

    สถานการณ์ที่ 2: กำหนดเซิร์ฟเวอร์เป้าหมายที่ไม่ปลอดภัย แต่กำหนดค่าเครื่องมือตรวจสอบสถานะด้วยพอร์ตที่ปลอดภัย

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

    1. ตรวจสอบคำจำกัดความของเซิร์ฟเวอร์เป้าหมายที่ใช้ในการกำหนดค่าปลายทางเป้าหมาย

      ใช้ Get TargetServer API เพื่อรับคำจำกัดความของเซิร์ฟเวอร์เป้าหมาย

      เอาต์พุตคำจำกัดความของเซิร์ฟเวอร์เป้าหมาย

      <TargetServer name="mocktarget">
        <Host>mocktarget.apigee.net</Host>
        <Port>80</Port>
        <IsEnabled>true</IsEnabled>
      </TargetServer>
              

      ในตัวอย่างด้านบน คำจำกัดความแสดงให้เห็นว่าเซิร์ฟเวอร์เป้าหมาย mocktarget เป็นเซิร์ฟเวอร์ที่ไม่ปลอดภัย (เนื่องจากไม่มีบล็อก SSLInfo) ที่กำหนดค่าด้วยพอร์ตที่ไม่ปลอดภัย 80 อย่างถูกต้อง

    2. จากนั้นตรวจสอบการกำหนดค่าเครื่องมือตรวจสอบสถานะสำหรับเซิร์ฟเวอร์เป้าหมายในการกำหนดค่าอุปกรณ์ปลายทางเป้าหมาย

      การกำหนดค่าการตรวจสอบสถานะ

      <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>

    3. จากข้อมูลข้างต้น สาเหตุของข้อผิดพลาดนี้คือเซิร์ฟเวอร์เป้าหมายถูกกำหนดให้เป็น เซิร์ฟเวอร์ที่ไม่ปลอดภัย (เนื่องจากไม่ได้กำหนดบล็อก SSLInfo) ที่มีพอร์ตที่ไม่ปลอดภัย 80 อย่างถูกต้อง แต่มีการกำหนดค่า Health Monitor ให้ทำการตรวจสอบประสิทธิภาพการทำงานด้วยพอร์ตที่ปลอดภัย 443 (ระบุไว้ในองค์ประกอบ <Port>)

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

ความละเอียด

พอร์ตที่ปลอดภัยเป้าหมายที่ไม่ปลอดภัย

สถานการณ์ที่ 1: กำหนดเซิร์ฟเวอร์เป้าหมายที่ไม่ปลอดภัยด้วยพอร์ตที่ปลอดภัย

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

ใช้ อัปเดต API ของเซิร์ฟเวอร์เป้าหมายเพื่ออัปเดตคำจำกัดความของเซิร์ฟเวอร์เป้าหมายและตรวจสอบว่ามีการใช้พอร์ตที่ไม่ปลอดภัย (เช่น 80) ตามที่แสดงในตัวอย่างด้านล่าง

<TargetServer name="mocktarget">
  <Host>mocktarget.apigee.net</Host>
  <Port>80</Port>
  <IsEnabled>true</IsEnabled>
</TargetServer>
              

พอร์ต HM ที่ปลอดภัยของเป้าหมายที่ไม่ปลอดภัย

สถานการณ์ที่ 2: กำหนดเซิร์ฟเวอร์เป้าหมายที่ไม่ปลอดภัย แต่กำหนดค่าเครื่องมือตรวจสอบสถานะด้วยพอร์ตที่ปลอดภัย

หากต้องการแก้ไขข้อผิดพลาดนี้ ให้ทำตามวิธีการด้านล่าง

  1. ให้นำองค์ประกอบ <Port> ออกจากการกำหนดค่าเครื่องมือตรวจสอบสถานะ หรือแก้ไขการกำหนดค่าเครื่องมือตรวจสอบสถานะให้ใช้พอร์ตที่ไม่ปลอดภัย (เช่น 80) เพื่อทำการตรวจสอบสถานะเซิร์ฟเวอร์เป้าหมายในการกำหนดค่าปลายทางเป้าหมายของ API Proxy ที่ล้มเหลวตามที่แสดงด้านล่าง
    <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>
            
  2. บันทึกการเปลี่ยนแปลงในพร็อกซี API

สาเหตุ: API การตรวจสอบประสิทธิภาพการทำงานตอบกลับด้วยข้อผิดพลาด

การวินิจฉัย

  1. ระบุรหัสข้อความของคำขอที่ไม่สำเร็จ
  2. ค้นหารหัสข้อความในบันทึกของ Message Processor (/opt/apigee/var/log/edge-message-processor/logs/system.log)
  3. คุณจะเห็นข้อความแสดงข้อผิดพลาดที่พบบ่อยที่สอดคล้องกับรหัสข้อความ อย่างไรก็ตาม หากต้องการทราบสาเหตุที่แท้จริงของการตรวจสอบประสิทธิภาพการทำงานไม่สำเร็จ ให้เลื่อนขึ้นไปเหนือข้อความแสดงข้อผิดพลาดที่พบบ่อยเหล่านี้ แล้วตรวจสอบข้อผิดพลาด/คำเตือนของ 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

  4. การตรวจสอบประสิทธิภาพการทำงานแสดงข้อความเตือนต่อไปนี้
    HTTP response code from health monitoring service does not match.Expected response code : [200]. Received response code : 404
          

    ข้อความเตือนด้านบนระบุว่ารหัสการตอบกลับที่คาดไว้สำหรับ API การตรวจสอบสถานะคือ 200 แต่การตอบกลับจริงที่ได้รับคือ 404 ดังนั้น ระบบจึงถือว่าการดำเนินการนี้ล้มเหลว

  5. ก่อนที่จะตรวจสอบสาเหตุของการตอบกลับข้อผิดพลาดจาก Health Check API ให้พิจารณาว่าเหตุใด Edge จึงคาดหวังโค้ดตอบกลับเป็น 200 สำหรับ Health Check 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>
            

    โปรดสังเกตว่าการกำหนดค่าเครื่องมือตรวจสอบสถานะได้รับการกำหนดค่าด้วยโค้ดตอบกลับ 200 ภายใต้องค์ประกอบ <SuccessResponse> ซึ่งหมายความว่าหาก Edge ได้รับโค้ดตอบกลับ (เช่น 400, 401, 404, 500) อื่นที่ไม่ใช่ 200 จาก Health Check API ระบบจะถือว่าเป็นการเกิดข้อผิดพลาดและเพิ่มจำนวนการทำงานที่ล้มเหลว

  6. ตอนนี้หากต้องการตรวจสอบสาเหตุของการตอบกลับข้อผิดพลาดจาก Health Check API ให้ทำตามขั้นตอนด้านล่าง
    1. ดูข้อความก่อนหน้าข้อความคำเตือนในบันทึกของ Message Processor
      Apigee-Timer-7 INFO  SERVICES.HEALTH_MONITOR - HTTPMonitor.sendRequest() : HTTPMonitor.monitor() : Connecting to https://mocktarget.apigee.net:443/status/200
                

      จด URL การตรวจสอบประสิทธิภาพการทำงานจากข้อความนี้

    2. คุณโทรไปยัง URL นี้ได้โดยตรงจาก Message Processor และตรวจสอบการตอบกลับจริง
      curl -i https://mocktarget.apigee.net:443/status/200
                

      การตอบกลับจากการเรียกข้างต้นจะแสดง 404 ดังที่เห็นในบันทึกของ Message Processor

      < HTTP/2 404
                
    3. ซึ่งแสดงให้เห็นว่าแม้การเรียก URL การตรวจสอบสถานะโดยตรงก็ล้มเหลวด้วยโค้ดตอบกลับ 404 เดียวกัน ซึ่งหมายความว่า URL การตรวจสอบประสิทธิภาพการทำงานอาจไม่ถูกต้อง หรือทรัพยากรที่เข้าถึงเป็นส่วนหนึ่งของ URL อาจไม่พร้อมใช้งานอีกต่อไป
    4. ในตัวอย่าง API การตรวจสอบประสิทธิภาพการทำงานที่ระบุไว้ข้างต้น ปัญหาเกิดขึ้นเนื่องจากมีการใช้ URL ที่ไม่ถูกต้องในการกำหนดค่าเครื่องมือตรวจสอบสถานะ เราพบว่า URL ที่ถูกต้องคือ https://mocktarget.apigee.net:443/statuscode/200 จาก API เป้าหมายจำลอง
  7. หากคุณได้รับการตอบกลับเป็นข้อผิดพลาดอื่นๆ ให้ระบุสาเหตุของข้อผิดพลาดดังกล่าวโดยทำตาม ขั้นตอนด้านบน หากจำเป็น ให้ทำงานร่วมกับทีมแบ็กเอนด์

ความละเอียด

  1. แก้ไขปัญหาเกี่ยวกับ API การตรวจสอบประสิทธิภาพการทำงานในเซิร์ฟเวอร์แบ็กเอนด์
  2. วิธีแก้ไขปัญหาในตัวอย่างที่กล่าวถึงข้างต้น
    1. แก้ไของค์ประกอบ <Path> ในการกำหนดค่า Health Monitor เป็น /statuscode/200 ดังที่แสดงด้านล่าง
      <Path>/statuscode/200</Path>
              
    2. บันทึกการเปลี่ยนแปลงในพร็อกซี API

หากยังพบปัญหาอยู่ โปรดไปที่ ต้องรวบรวมข้อมูลการวินิจฉัย

วินิจฉัยปัญหาโดยใช้การตรวจสอบ API

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

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

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

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

  1. หากคุณเป็นผู้ใช้ระบบคลาวด์สาธารณะ โปรดระบุข้อมูลต่อไปนี้
    1. ชื่อองค์กร
    2. ชื่อสภาพแวดล้อม
    3. ชื่อพร็อกซี API
    4. คำสั่ง curl ที่สมบูรณ์เพื่อสร้างข้อผิดพลาดซ้ำ
    5. ไฟล์การติดตามที่มีคำขอที่มีข้อผิดพลาด 503 ไม่พร้อมให้บริการพร้อมรหัสข้อผิดพลาด NoActiveTargets
  2. หากคุณเป็นผู้ใช้ Private Cloud โปรดระบุข้อมูลต่อไปนี้
    1. ข้อความแสดงข้อผิดพลาดทั้งหมดที่พบ
    2. ชื่อสภาพแวดล้อม
    3. แพ็กเกจพร็อกซี API
    4. ไฟล์การติดตามที่มีคำขอที่มีข้อผิดพลาด 503 ไม่พร้อมให้บริการพร้อมรหัสข้อผิดพลาด NoActiveTargets
    5. บันทึกการเข้าถึง NGINX

      (/opt/apigee/var/log/edge-router/nginx/<org>~<env>.<port#>_access_log)

    6. บันทึกของ Message Processor

      (/opt/apigee/var/log/edge-message-processor/logs/system.log)