คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่
เอกสารประกอบของ Apigee X info
ลักษณะปัญหา
แอปพลิเคชันไคลเอ็นต์ได้รับรหัสสถานะ 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และคุณสามารถใช้ค่านี้ในภายหลังเพื่อบันทึกtcpdump2021-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 ที่เฉพาะเจาะจง ระยะหมดเวลาจะกำหนดโดยระบบปฏิบัติการที่ Edge Microgateway ทำงานอยู่ ตัวอย่างที่พบบ่อย ได้แก่ Windows, Linux และคอนเทนเนอร์ Docker
- ระบบปฏิบัติการอาจมีการปรับแต่งระยะหมดเวลา Keep-Alive โปรดตรวจสอบกับ ผู้ดูแลระบบ โดยค่าเริ่มต้น ระบบปฏิบัติการ 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 ในแอปพลิเคชันไคลเอ็นต์หรือ Load Balancer ควรน้อยกว่าระยะหมดเวลา Keep-Alive ของ Edge Microgateway
หากต้องการกำหนดค่าระยะหมดเวลา Keep-Alive ใน Edge Microgateway ให้เพิ่มค่า
keep_alive_timeoutลงในไฟล์~/.edgemicro/org-env-config.yamledgemicro: 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 ให้ไปที่ ข้อมูลการวินิจฉัยที่ต้องรวบรวมข้อมูลการวินิจฉัยที่ต้องรวบรวม
หากยังพบปัญหาเดิมอยู่แม้จะทำตามวิธีการข้างต้นแล้ว ให้รวบรวมข้อมูลการวิน01}การวินิจฉัยต่อไปนี้ แล้วติดต่อทีมสนับสนุนของ 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 ส่งคำขอ