คุณกำลังดูเอกสารประกอบของ 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 Public และ Private Cloud |
เซิร์ฟเวอร์เป้าหมายปิดการเชื่อมต่อก่อนกำหนด | เซิร์ฟเวอร์เป้าหมายจะปิดการเชื่อมต่อก่อนกำหนดขณะที่ Edge Microgateway ส่งเพย์โหลดคำขอ | ผู้ใช้ Edge Public และ 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]
รวมถึงชื่อโฮสต์ของเซิร์ฟเวอร์เป้าหมายและพอร์ตในองค์ประกอบที่ 2 ด้วย ในตัวอย่างนี้คือ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 เริ่มต้นอยู่ที่ 2 ชั่วโมง
- ถัดไป ให้ตรวจสอบพร็อพเพอร์ตี้ระยะหมดเวลาของ Keep-alive ที่กำหนดค่าไว้ในเซิร์ฟเวอร์แบ็กเอนด์ของคุณ สมมติว่าเซิร์ฟเวอร์แบ็กเอนด์ได้รับการกําหนดค่าด้วยค่า 10 วินาที
- หากพบว่าค่าระยะหมดเวลาของ Keep-alive ในระบบปฏิบัติการสูงกว่าค่าของพร็อพเพอร์ตี้ระยะหมดเวลาของ Keep-alive ในเซิร์ฟเวอร์แบ็กเอนด์ตามตัวอย่างข้างต้น จึงเป็นสาเหตุที่ทําให้เกิดข้อผิดพลาด
502
ความละเอียด
ตรวจสอบว่าพร็อพเพอร์ตี้ระยะหมดเวลาของ Keep-alive ต่ำกว่าเสมอในระบบปฏิบัติการที่ Edge Microgateway ทำงานอยู่เมื่อเทียบกับในเซิร์ฟเวอร์แบ็กเอนด์
- ระบุค่าที่ตั้งค่าสำหรับระยะหมดเวลา Keep-alive ในเซิร์ฟเวอร์แบ็กเอนด์
- กำหนดค่าที่เหมาะสมสำหรับพร็อพเพอร์ตี้ระยะหมดเวลาของ Keep-alive ในระบบปฏิบัติการ เพื่อให้พร็อพเพอร์ตี้ระยะหมดเวลาของ Keep-alive ต่ำกว่าค่าที่ตั้งไว้ในเซิร์ฟเวอร์แบ็กเอนด์โดยใช้ขั้นตอนที่เกี่ยวข้องกับระบบปฏิบัติการของคุณ
แนวทางปฏิบัติแนะนำ
ขอแนะนำเป็นอย่างยิ่งว่าคอมโพเนนต์ดาวน์สตรีมจะมีเกณฑ์ระยะหมดเวลาของ Keep-alive ต่ำกว่าที่กำหนดค่าไว้บนเซิร์ฟเวอร์อัปสตรีมเสมอ เพื่อหลีกเลี่ยงเงื่อนไขเกี่ยวกับการแข่งขันและข้อผิดพลาด 502
ประเภทนี้ ฮอพดาวน์สตรีมแต่ละรายการควรต่ำกว่าอัปสตรีมฮอพแต่ละรายการ ใน Edge Microgateway แนวทางปฏิบัติที่ดีคือการใช้หลักเกณฑ์ต่อไปนี้
ระยะหมดเวลาของ 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
และมีไฟล์กำหนดค่าเริ่มต้นอีก 1 ไฟล์สำหรับแต่ละสภาพแวดล้อมORG-ENV-config.yaml
โปรดอัปโหลดไฟล์นี้แบบเต็มสำหรับองค์กรและสภาพแวดล้อมที่ได้รับผลกระทบ
- ในแพ็กเกต 4 Edge Microgateway ได้ส่งคำขอ