คุณกำลังดูเอกสารประกอบ Apigee Edge
ไปที่
เอกสารประกอบเกี่ยวกับ Apigee X. ข้อมูล
ลักษณะปัญหา
แอปพลิเคชันไคลเอ็นต์ได้รับรหัสสถานะ HTTP 502 Bad Gateway
ที่มีค่า
ECONNRESET
เป็นการตอบกลับสำหรับการเรียก API ใน Edge Microgateway
ข้อความแสดงข้อผิดพลาด
ไคลเอ็นต์จะเห็นโค้ดตอบกลับต่อไปนี้
HTTP/1.1 502 Bad Gateway
การตอบกลับจะมีข้อความแสดงข้อผิดพลาดต่อไปนี้
{"message":"socket hang up","code":"ECONNRESET"}
สาเหตุที่เป็นไปได้
สาเหตุ | คำอธิบาย | วิธีการแก้ปัญหาสำหรับ |
---|---|---|
ระยะหมดเวลา Keep-alive ที่กำหนดค่าไม่ถูกต้อง | การกำหนดค่าระยะหมดเวลาของ Keep-alive ไม่ถูกต้องระหว่าง Edge Microgateway กับเซิร์ฟเวอร์เป้าหมาย | ผู้ใช้ Edge สาธารณะและ Private Cloud |
เซิร์ฟเวอร์เป้าหมายปิดการเชื่อมต่อก่อนกำหนด | เซิร์ฟเวอร์เป้าหมายปิดการเชื่อมต่อก่อนกำหนดขณะที่ Edge Microgateway ส่งคำขอ เพย์โหลดคำขอ | ผู้ใช้ Edge สาธารณะและ Private Cloud |
ขั้นตอนการวินิจฉัยทั่วไป
- ตรวจสอบบันทึกของ Edge Microgateway ดังต่อไปนี้
/var/tmp/edgemicro-`hostname`-*.log
- ค้นหาว่ามีข้อผิดพลาด
502
ในโค้ดECONNRESET
ไหม ในช่วงระยะเวลาหนึ่งๆ (หากปัญหาเกิดขึ้นในอดีต) หรือมีคำขอ ยังคงล้มเหลวกับ502
2021-06-23T03:52:24.110Z [error][0:8000][3][myorg][test] [emg_badtarget/flakey/hangup][][][6b089a00-d3d6-11eb-95aa-911f1ee6c684] [microgateway-core][][GET][502][socket hang up][ECONNRESET][]
- หากตั้งค่าระดับการบันทึกเป็น
warn
หรือinfo
การตั้งค่าดังกล่าวจะมีผลด้วย เป็นข้อความ[warn]
ซึ่งรวมถึงชื่อโฮสต์ของเซิร์ฟเวอร์เป้าหมายและพอร์ตใน ในตัวอย่างนี้คือX.X.X.X:8080
ซึ่งสามารถใช้ ในภายหลังเพื่อบันทึกtcpdump
2021-06-23T03:52:24.109Z [warn][X.X.X.X:8080][3][myorg][test][emg_badtarget/flakey/hangup] [][][6b089a00-d3d6-11eb-95aa-911f1ee6c684][plugins-middleware] [targetRequest error][GET][][socket hang up][ECONNRESET][395]
- รหัสข้อผิดพลาด
[socket hang up][ECONNRESET]
ระบุว่าเซิร์ฟเวอร์เป้าหมาย ได้ปิดการเชื่อมต่อกับ Edge Microgateway แล้ว โดยค้นหาได้ในบันทึกเพื่อระบุ เกิดขึ้นบ่อยแค่ไหน
สาเหตุ: กำหนดค่าระยะหมดเวลา Keep-alive ไม่ถูกต้อง
การวินิจฉัย
- ใช้ขั้นตอนใน ขั้นตอนการวิเคราะห์ทั่วไป และตรวจสอบว่าคุณได้รับ
ข้อผิดพลาด
[socket hang up][ECONNRESET]
รายการ หากใช่ ให้ตรวจสอบเพิ่มเติมโดยรับความช่วยเหลือจาก
tcpdump
ตามที่อธิบายไว้ด้านล่าง
การใช้ tcpdump
- บันทึก
tcpdump
ระหว่าง Edge Microgateway กับเซิร์ฟเวอร์แบ็กเอนด์ใน ระบบปฏิบัติการโฮสต์ Edge Microgateway ด้วยคำสั่งต่อไปนี้ วันที่tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
- วิเคราะห์
tcpdump
ที่บันทึกไว้:ตัวอย่างเอาต์พุต tcpdump ( ดูรูปภาพขนาดใหญ่ขึ้น)
ในตัวอย่าง
tcpdump
ข้างต้น คุณจะเห็นข้อมูลต่อไปนี้- ในแพ็กเก็ต 250288 ไคลเอ็นต์จะส่งคำขอ
POST
- ในแพ็กเก็ต 250371 เซิร์ฟเวอร์จะตอบสนองด้วย
200 OK
- ในแพ็กเก็ต 250559 ไคลเอ็นต์จะส่ง
ACK.
- ในแพ็กเก็ต 250560 เซิร์ฟเวอร์จะส่ง
Continuation
- ในแพ็กเก็ต 250561 ไคลเอ็นต์จะส่ง
ACK.
- ในแพ็กเก็ต 262436 เซิร์ฟเวอร์จะส่ง
FIN, ACK
ไปยัง ไคลเอ็นต์ที่เริ่มการปิดการเชื่อมต่อ โปรดทราบว่านี่เป็นเพียง 5 วินาทีหลังจากแพ็กเก็ตก่อนหน้า (250561) - ในแพ็กเก็ต 262441 ไคลเอ็นต์ส่ง
POST
อีกรายการ อีกครั้ง อย่างไรก็ตาม วิธีนี้ล้มเหลวเนื่องจากเซิร์ฟเวอร์ได้เริ่มปิด การเชื่อมต่อ ตอบสนองด้วยRST
ในแพ็กเก็ต 262441
ในตัวอย่างนี้มีการใช้การเชื่อมต่อเดียวกันซ้ำอย่างน้อย 1 ครั้ง แต่เปิด คำขอสุดท้าย เซิร์ฟเวอร์จะเริ่มปิดการเชื่อมต่อหลังจากผ่านไป 5 วินาที ในช่วงเวลาที่ไม่มีการใช้งาน ซึ่งเกิดขึ้นพร้อมกับไคลเอ็นต์ได้ส่งคำขอใหม่ ช่วงเวลานี้ แนะนำว่าระยะหมดเวลา Keep-alive ของเซิร์ฟเวอร์แบ็กเอนด์มีแนวโน้มจะสั้นกว่าหรือเท่ากับ มูลค่าที่กำหนดไว้ในไคลเอ็นต์ เพื่อตรวจสอบความถูกต้อง โปรดดู เปรียบเทียบระยะหมดเวลา Keep-alive ใน Edge Microgateway และเซิร์ฟเวอร์แบ็กเอนด์
- ในแพ็กเก็ต 250288 ไคลเอ็นต์จะส่งคำขอ
เปรียบเทียบการหมดเวลาแบบ Keep-alive
- Edge Microgateway ไม่มีพร็อพเพอร์ตี้ระยะหมดเวลา Keep-alive ที่เฉพาะเจาะจง ใช่เลย ซึ่งกำหนดโดยระบบปฏิบัติการที่กำลังทำงาน ตัวอย่างทั่วไป ได้แก่ Windows คอนเทนเนอร์ Linux และ Docker
- โดยอาจมีการกำหนดค่าเองในระบบปฏิบัติการ โปรดตรวจสอบกับ ผู้ดูแลระบบ โดยค่าเริ่มต้น ระบบปฏิบัติการ Linux จะมี Keep-alive เริ่มต้น สองชั่วโมง
- ถัดไป ให้ตรวจสอบพร็อพเพอร์ตี้การหมดเวลา Keep-alive ที่กำหนดค่าไว้ในเซิร์ฟเวอร์แบ็กเอนด์ มาเริ่มกันเลย สมมติว่าเซิร์ฟเวอร์แบ็กเอนด์กำหนดค่าเป็น 10 วินาที
- ถ้าคุณระบุว่าค่าของระยะหมดเวลา Keep-alive ในระบบปฏิบัติการคือ
สูงกว่าค่าของพร็อพเพอร์ตี้การหมดเวลา Keep-alive ในเซิร์ฟเวอร์แบ็กเอนด์ตามที่แสดงใน
ข้างต้น นี่เป็นสาเหตุของข้อผิดพลาด
502
ความละเอียด
ตรวจสอบว่าพร็อพเพอร์ตี้การหมดเวลาแบบ Keep-alive นั้นต่ำกว่าเสมอในระบบปฏิบัติการที่ Edge Microgateway กำลังทำงานเมื่อเทียบกับในเซิร์ฟเวอร์แบ็กเอนด์
- ระบุค่าที่ตั้งไว้สำหรับระยะหมดเวลา Keep-alive ในเซิร์ฟเวอร์แบ็กเอนด์
- กำหนดค่าที่เหมาะสมสำหรับพร็อพเพอร์ตี้ระยะหมดเวลา Keep-alive ในการดำเนินการ ซึ่งทำให้พร็อพเพอร์ตี้ระยะหมดเวลา Keep-alive ต่ำกว่าค่าที่ตั้งไว้ในแบ็กเอนด์ เซิร์ฟเวอร์ของคุณ โดยใช้ขั้นตอนที่เกี่ยวข้องกับระบบปฏิบัติการของคุณ
แนวทางปฏิบัติแนะนำ
เราขอแนะนำเป็นอย่างยิ่งว่าคอมโพเนนต์ดาวน์สตรีมจะมีระยะหมดเวลาของ Keep-alive น้อยกว่าเสมอ
เกณฑ์มาตรฐานสูงกว่าที่กำหนดค่าไว้ในเซิร์ฟเวอร์อัปสตรีม เพื่อหลีกเลี่ยงเงื่อนไขการแข่งขันประเภทนี้ และ
ข้อผิดพลาด 502
รายการ ฮอพดาวน์สตรีมแต่ละรายการควรต่ำกว่าฮอพอัปสตรีมแต่ละรายการ อยู่ใน Edge
การใช้หลักเกณฑ์ต่อไปนี้เป็นแนวทางปฏิบัติที่ดี
ระยะหมดเวลาของ Keep-alive ในแอปพลิเคชันไคลเอ็นต์หรือตัวจัดสรรภาระงานควรน้อยกว่า ระยะหมดเวลาแบบ Keep-alive ของ Edge Microgateway
ในการกำหนดค่าระยะหมดเวลา Keep-alive บน Edge Microgateway ให้เพิ่ม มูลค่า
keep_alive_timeout
เป็น~/.edgemicro/org-env-config.yaml
edgemicro: keep_alive_timeout: 65000
- ระยะหมดเวลาแบบ Keep-alive ของระบบปฏิบัติการ Edge Microgateway ควรน้อยกว่าเป้าหมาย เซิร์ฟเวอร์ Keep-alive หมดเวลา
- ถ้าคุณมีการกระโดดอื่นๆ ที่ด้านหน้าหรือด้านหลัง Edge Microgateway กฎเดียวกันนี้ควร ได้ คุณควรปล่อยให้ลูกค้าเป็นผู้รับผิดชอบปลายทางในการปิดบัญชีเสมอ การเชื่อมต่อกับอัปสตรีมหรือไม่
สาเหตุ: เซิร์ฟเวอร์เป้าหมายปิดการเชื่อมต่อก่อนกำหนด
การวินิจฉัย
- ใช้ขั้นตอนที่อธิบายไว้ในขั้นตอนการวิเคราะห์ทั่วไปและตรวจสอบว่าคุณ
ได้รับข้อผิดพลาด
[socket hang up][ECONNRESET]
- หากใช่ ให้ตรวจสอบเพิ่มเติมโดยความช่วยเหลือจาก
tcpdump
ตามที่อธิบายไว้ด้านล่างข้อความแสดงข้อผิดพลาด
[targetRequest error][GET][][socket hang up][ECONNRESET]
ในตัวอย่างข้างต้น ระบุว่าข้อผิดพลาดนี้เกิดขึ้นขณะที่ Edge Microgateway ได้ส่งคำขอไปยังเซิร์ฟเวอร์แบ็กเอนด์ (เป้าหมาย) กล่าวคือ Edge Microgateway ได้ส่ง คำขอ API ไปยังเซิร์ฟเวอร์แบ็กเอนด์และกำลังรอการตอบกลับ อย่างไรก็ตาม แบ็กเอนด์ เซิร์ฟเวอร์ยุติการเชื่อมต่อกะทันหันก่อนที่ Edge Microgateway จะได้รับการตอบสนอง - ตรวจสอบบันทึกเซิร์ฟเวอร์แบ็กเอนด์และดูว่ามีข้อผิดพลาดหรือข้อมูลที่อาจ ทำให้เซิร์ฟเวอร์แบ็กเอนด์สิ้นสุดการเชื่อมต่ออย่างกะทันหัน หากพบข้อผิดพลาดหรือ ให้ไปที่การแก้ปัญหา แล้วแก้ไขปัญหาอย่างเหมาะสม ในเซิร์ฟเวอร์แบ็กเอนด์
- หากไม่พบข้อผิดพลาดหรือข้อมูลในเซิร์ฟเวอร์แบ็กเอนด์ ให้รวบรวมข้อมูล
เอาต์พุต
tcpdump
บนเซิร์ฟเวอร์ Edge Microgateway: วันที่tcpdump -i any -s 0 host TARGET_SERVER_HOSTNAME -w FILENAME.pcap
- วิเคราะห์
tcpdump
ที่บันทึกไว้:ตัวอย่างเอาต์พุต tcpdump ( ดูรูปภาพขนาดใหญ่ขึ้น)
ในตัวอย่าง
tcpdump
ข้างต้น คุณจะเห็นข้อมูลต่อไปนี้- ในแพ็กเก็ต 4 Edge Microgateway ได้ส่งคำขอ
GET
ไปยังเป้าหมาย เซิร์ฟเวอร์ - ในแพ็กเก็ต 5 เซิร์ฟเวอร์เป้าหมายตอบกลับด้วย
ACK
เพื่อรับทราบ อีกครั้ง - อย่างไรก็ตาม ในแพ็กเก็ต 6 แทนที่จะตอบสนองด้วยเพย์โหลดการตอบสนอง เป้าหมาย
เซิร์ฟเวอร์จะส่ง
FIN, ACK
ที่เริ่มต้นการปิดการเชื่อมต่อ - ในแพ็กเก็ต 7 เป็นต้นไป การเชื่อมต่อจะปิดพร้อมกัน เนื่องจากการเชื่อมต่อคือ
ปิดก่อนที่จะส่งการตอบกลับ Edge Microgateway จะส่งคืน HTTP
502
กลับไปที่ไคลเอ็นต์ - โปรดทราบว่าการประทับเวลาของแพ็กเก็ต 8
2021-06-23T03:52:24.110Z
สอดคล้องกับการประทับเวลาที่มีการบันทึกข้อผิดพลาดใน Edge Microgateway บันทึก การประทับเวลาในไฟล์บันทึกและในtcpdump
มักจะ เพื่อเชื่อมโยงข้อผิดพลาดกับแพ็กเก็ตจริง
ความละเอียด
แก้ไขปัญหาในเซิร์ฟเวอร์แบ็กเอนด์อย่างเหมาะสม
หากยังพบปัญหาอยู่และคุณต้องการความช่วยเหลือในการแก้ปัญหา
502 Bad Gateway Error
หรือคุณสงสัยว่าจะเป็นปัญหาใน Edge Microgateway ให้ไปที่ ต้องรวบรวมข้อมูลการวินิจฉัยต้องรวบรวมข้อมูลการวินิจฉัย
หากปัญหายังคงอยู่แม้ว่าจะทำตามคำแนะนำด้านบนแล้ว ให้รวบรวมข้อมูลต่อไปนี้ ข้อมูลการวินิจฉัย จากนั้นติดต่อฝ่ายสนับสนุนของ Apigee Edge
- ไฟล์บันทึก: โฟลเดอร์เริ่มต้นคือ
/var/tmp
แต่อาจถูกลบล้าง ในไฟล์config.yaml
หลัก (logging > dir parameter
) ใช่เลย แนะนำให้เปลี่ยนlog > level
เป็นinfo
ก่อนที่จะระบุ ไฟล์บันทึกให้กับทีมสนับสนุนของ Apigee - ไฟล์การกำหนดค่า: การกำหนดค่าหลักของ Edge Microgateway อยู่ใน
ไฟล์ YAML ในโฟลเดอร์ Edge Microgateway เริ่มต้น
$HOME/.edgemicro
มี ไฟล์การกำหนดค่าเริ่มต้นชื่อdefault.yaml
และอีกไฟล์สำหรับแต่ละสภาพแวดล้อมORG-ENV-config.yaml
โปรดอัปโหลดไฟล์นี้ ฉบับเต็มสำหรับองค์กรและสภาพแวดล้อมที่ได้รับผลกระทบ
- ในแพ็กเก็ต 4 Edge Microgateway ได้ส่งคำขอ