ทำไมถึงต้องมี Internal & External Log

Wirawat Roj
2 min readFeb 28, 2021

--

Design via Canva.com

สวัสดีครับ สำหรับบทความวันนี้จะเป็นการมาแชร์ประสบการณ์ของเรื่อง ความสำคัญของ Internal Log และ External Log ครับ ซึ่ง Log นี่แหละที่สามารถช่วยเราได้อย่างมากในการทำงานจริงบน Server

Log คืออะไร ?

ก่อนอื่นเราก็ต้องมารู้จัก Log กันก่อนครับว่า Log คืออะไร …
Log คือบันทึกการทำงานของระบบ ซึ่งสามารถบอกได้ว่าเกิด Action อะไรขึ้นที่จุดไหนของระบบบ้าง เช่น Request Body , Request Header , Request Time , Response Body , Response Time , Exception โดยขึ้นอยู่กับ Model ที่เราเขียนไว้ให้ Log ลงไป ยิ่ง Model ของเรามีข้อมูลครบเท่าไหร่ Log ก็จะมีประโยชน์มากขึ้นเท่านั้น ดังนั้นสรุปได้ว่า Service Log ก็คือบันทึกการทำงานของระบบว่ามี Action อะไรเกิดตรงไหนบ้างนั่นเอง

แล้ว Internal Log กับ External Log ล่ะ ?

จริง ๆ แล้ว Internal Log กับ External Log ก็คือ Log ของระบบเหมือนกัน แต่เป็น Log ที่มีการแบ่ง Category แล้วซึ่ง มักจะแยก Log ทั้งสองประเภทนี้ออกจากกันด้วยจังหวะการทำงานของระบบ โดย

Internal Log หมายถึง Log ที่บันทึกการทำงานภายใน Service ของเราเอง เช่น Exception , Request ที่ยิงเข้า Service ของเรา , Response ที่เราตอบกลับออกไป , Endpoint ที่ยิงเข้ามา หรือแม้กระทั่ง Source ที่เรียก Service ของเรา

External Log หมายถึง Log ที่บันทึกส่วนที่มีการติดต่อกับ External Service ต่าง ๆ (ส่วนที่ Service เรามีการยิง Request ไป Service อื่น ๆ) โดย Log ประเภทนี้ก็จะมีข้อมูลคล้าย ๆ กัน เช่น Request ที่เรายิงออกไป , Destination , Response ที่ได้รับ รวมถึง เวลาของ Request , Response

ประโยชน์ของ Internal & External Log

มาถึงหัวข้อหลักของบทความนี้แล้ว ประโยชน์ของ Internal Log กับ External Log ซึ่งหากดูตามปกติ Happy Flow เราก็จะเห็นว่า Log ก็แค่เก็บบันทึก Action ต่าง ๆ เองนี่แล้วจะต้องมีไปทำไม ? แต่จริง ๆ แล้ว Log มีประโยชน์อย่างมาก โดยเมื่อเกิด Exception ต่าง ๆ หรือ Service ทำงานผิดพลาด หรือแปลกไปจาก Behavior ที่ควรจะเป็น Log นี่แหละที่จะบอกเราได้ว่า เกิดข้อผิดพลาดนั้นขึ้นตรงส่วนไหนของเรา ยิ่งเรามี Log ที่ละเอียด (หลายจุด) มากเท่าไหร่ เราสามารถหาข้อผิดพลาดนั้นได้ง่ายมากเท่านั้น

หากเป็นตอน Coding เราสามารถใช้วิธี Debug เพื่อ Investigate ได้ แต่เมื่อระบบของเรา Go Live on Server แล้ว การอ่าน Internal และ External Log นี่แหละที่จะช่วยให้เรา Investigate ปัญหาได้ง่ายขึ้นนั่นเอง

Example Case

สมมติระบบของเรามี 2 Services แบ่งเป็น Service A และ Service B โดย Service A มีการ communicate กับ External Service 1 และ Service ทั้ง 2ตัวมีการ Communicate ต่อกัน (1 → A → B ) โดยทุกตัวมีการทำ Log ครบทุกจุด
สมมติ : Service B ได้รับ Error จาก Service A แต่จริง ๆ เป็นผลมาจาก External Service 1 ทำงานผิดพลาด
Use Case: เราสามารถ Investigate การทำงานส่วนนี้ได้ผ่าน Log ขา External ของ Service B และ Log ขา External กับ Internal ของ Service A เราก็จะรู้ว่าจริง ๆ แล้ว Service A เรียก External Service 1 แล้วได้รับ Error ตอบกลับมานั่นเอง

แบบนี้เราก็จะรู้ได้อย่างง่ายดายว่า ระบบส่วนไหนกันแน่ที่มีปัญหา

หมายเหตุ

ผมหวังว่าบทความนี้จะเป็นประโยชน์หรือเป็นไอเดียให้กับผู้อ่านทุกท่านได้ โดยเนื้อหาทั้งหมดนี้เกิดขึ้นมาจากประสบการณ์และความเข้าใจของผมเอง หากมีข้อผิดพลาดประการใด ผมขออภัยมา ณ ทีนี้ และยินดีรับข้อเสนอแนะทุกประการครับ~

Special Thanks

ขอขอบคุณ “สำนักงานส่งเสริมเศรษฐกิจดิจิทัล (depa)” และคณาจารย์ “คณะเทคโนโลยีสารสนเทศ มจธ. (SIT)” ที่ให้การสนับสนุน “ทุนเพชรพระจอมเกล้าเพื่อพัฒนาเทคโนโลยีและนวัตกรรมดิจิทัล (KMUTT-depa)” ซึ่งเป็นทุนที่มอบความรู้ ทักษะและโอกาสดี ๆ กับผมอย่างมาก~

--

--

Wirawat Roj

Software Engineer | 🍔 Always hungry | ❤️ Love Coding