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

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

วิดีโอ

ดูข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาด 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

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
คำขอที่ปลอดภัยในพอร์ตที่ไม่ปลอดภัย
  1. หากมีการกำหนดเซิร์ฟเวอร์เป้าหมายเป็นเซิร์ฟเวอร์ที่ปลอดภัย แต่กำหนดค่าไม่ถูกต้องด้วยพอร์ตที่ไม่ปลอดภัย
  2. หากมีการกำหนดเซิร์ฟเวอร์เป้าหมายเป็นเซิร์ฟเวอร์ที่ปลอดภัย แต่มีการกำหนดค่าการตรวจสอบประสิทธิภาพการทำงานเพื่อตรวจสอบประสิทธิภาพการทำงานในพอร์ตที่ไม่ปลอดภัย
ผู้ใช้ Edge Private Cloud
คำขอที่ไม่ปลอดภัยในพอร์ตที่ปลอดภัย
  1. หากมีการกำหนดให้เซิร์ฟเวอร์เป้าหมายเป็นเซิร์ฟเวอร์ที่ไม่ปลอดภัย แต่กำหนดค่าไม่ถูกต้องด้วยพอร์ตที่ปลอดภัย
  2. หากมีการกำหนดเซิร์ฟเวอร์เป้าหมายเป็นเซิร์ฟเวอร์ที่ไม่ปลอดภัย แต่กำหนดค่าเครื่องมือตรวจสอบประสิทธิภาพการทำงานเพื่อตรวจสอบประสิทธิภาพการทำงานในพอร์ตที่ปลอดภัย
ผู้ใช้ Edge Private Cloud
Health Check API ตอบกลับพร้อมข้อผิดพลาด หาก API การตรวจสอบประสิทธิภาพการทำงานตอบกลับด้วยข้อผิดพลาดหรือโค้ดตอบกลับ อะไรก็ได้ที่นอกเหนือจากที่ระบุในองค์ประกอบ SuccessResponse ของ Health Monitor ผู้ใช้ Edge Private Cloud

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

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

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

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

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

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

การวินิจฉัย

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

    ตัวอย่างเช่น ข้อความแสดงข้อผิดพลาด 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

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

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

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

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

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

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

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

      ใช้ รับ 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. ถัดไป ให้ตรวจสอบการกำหนดค่า 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>

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

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

  1. แก้ไขการกำหนดค่า 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>
            
  2. บันทึกการเปลี่ยนแปลงไปยังพร็อกซี API

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

การวินิจฉัย

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

    ตัวอย่างเช่น คุณอาจเห็นข้อผิดพลาดเกี่ยวกับ 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. โปรดตรวจสอบคำจำกัดความของเซิร์ฟเวอร์เป้าหมายที่ใช้ในการกำหนดค่าปลายทางเป้าหมาย

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

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

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

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

    2. ตอนนี้ให้ตรวจสอบการกำหนดค่า 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

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

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

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

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

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

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

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

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

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

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

    2. ถัดไป ให้ตรวจสอบการกำหนดค่า 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>

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

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

  1. นำองค์ประกอบ <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>
            
  2. บันทึกการเปลี่ยนแปลงไปยังพร็อกซี API

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

การวินิจฉัย

  1. ระบุรหัสข้อความของคำขอที่ล้มเหลว
  2. ค้นหารหัสข้อความในบันทึกผู้ประมวลผลข้อความ (/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. ก่อนตรวจสอบสาเหตุของการตอบกลับข้อผิดพลาดจาก 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 การตรวจสอบประสิทธิภาพการทำงาน ระบบจะถือว่าเป็นข้อผิดพลาดและเพิ่มจำนวนความล้มเหลว

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

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

    2. คุณสามารถเรียก URL นี้โดยตรงจากเครื่องมือประมวลผลข้อความและตรวจสอบการตอบกลับจริง
      curl -i https://mocktarget.apigee.net:443/status/200
                

      การตอบสนองจากการเรียกข้างต้นจะให้ 404 ตามที่เห็นในบันทึกของผู้ประมวลผลข้อความ:

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

ความละเอียด

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

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

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

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

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

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

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

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

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

    6. บันทึกตัวประมวลผลข้อความ

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