Exp: Logging Severely Affects — Performance

Chutipon Pongpanit (Aof)
1 min readMar 18, 2021

--

จากการอ่าน log และเขียน log แล้วทำไมต้อง log ? สำหรับผมมันเริ่มต้้นจากต้องการกลับมาดูอะไรซ้ำ และlog ควรบ่งบอกพฤติกรรมของ application ยังคงทำงานปกติ ครั้งนี้มาแชร์สิ่งที่ผมทำอย่างไรที่จะเราสามารถที่จะช่วยตรวจสอบผ่าน log ได้เร็วขึ้น

อย่างแรกก่อนคือแบ่งประเภทของ Log ที่จะใช้อยู่เป็นประจำ

มีอยู่ 4 ประเภท (มีประเภทอื่นอีก แต่ก็ไม่ใช้งานเลย)
DEBUG
— ผมมักจะใช้บน Environment DEV อยู่บ่อยๆ เพื่อ Debug Application แต่หลังจากนั้นก็จะไม่เก็บไว้
INFO — เป็นประเภทที่สำคัญที่ถูกใช้จริงตอนเก็บ log ไว้จริง
WARN — ไม่ค่อยได้ใช้บ่อยนัก ผมก็มักจะใช้ประเภทนี้ตอนที่ต้องการจะบอกเป็น Message ไว้ใน application เท่านั้้
ERROR — เป็นประเภทที่สำคัญอีกตัว เมื่อเราหา log ด้วย error จะพบเจอเสมอว่าเหตุของ error เป็นเพราะอะไร

Loogging Affects Performance

การทำ logging จำนวนมาก แน่นอนว่ามันส่งผลเกิดการใช้ I/O ต่อ Server ทีนี้ก็เลยทำให้เราตระหนักประเภทและ message ที่ logging นั้นสำคัญ

  1. Log ที่เราใส่มี information เยอะเกินไป แน่นอนว่ามันส่งผลเกิดการใช้ I/O ต่อ Server ทีนี้ก็เลยทำให้เราตระหนักประเภทและ message ที่ logging นั้นสำคัญ และยังทำให้เราระบุหาสาเหตุเมื่อเกิดปัญหาได้ยาก เพราะบางทีพบว่า log ใส่ข้อมูลไปเยอะแยะ แต่ใน log ชุดนั้น ไม่ได้มีอะไรอยู่เลย
  2. Format of logging จะต้องมี Timestamp, Thread Name, Class/Function Name
    Q:ทำไมต้องมี Timestamp
    A:ทำให้รู้ว่าสิ่งที่เกิดขึ้นเมื่อไหร่
    Q:ทำไมต้องมี Thread Name
    A:อ่าน log ไม่รู้เรื่องเลยถ้า Application รองรับการทำงานแบบ multiple thread
    Q:ทำไมต้องมี Class/Function Name
    A:เราจะรู้พฤติกรรมของ app ผ่านได้ผ่าน Class/Function Name
  3. การเลือก Format of logging นั้นสำคัญก็จริง แต่เราต้องใช้เวลาสักระยะเพื่อมาทบทวนว่า สิ่งที่เราต้องการ logging นั้นต้องสอดคล้องกัน สุดท้ายแล้วเราต้องการ format ที่เหมาะสมมากว่าเป็นมาตรฐานแล้วไม่ได้ช่วยอะไร ช่วยให้เราเห็นภาพรวมพฤติกรรมของ Application
  4. ภาษาใน Message ผมเลือกใช้แบบ Simple English ซึ่งอ่านแล้ว Make Sense และก็อ่านเข้าใจง่าย ส่งต่อ Team Support ช่วย Monitor Application ก็ใช้เวลาไม่นาน
  5. บางอย่างที่เป็นข้อมูล Sensitive ไม่ต้องใส่ลงไปใน Message อย่างเช่น Password, Credit card numbers, Phone Number, Personal Identify Number, National Identify Number, Passport Identify Number
  6. log all important information that is necessary to debug or troubleshoot a problem if it happens.
  7. เลือก logging ที่ช่วยสามารถแก้ปัญหาให้ได้เมื่อมันเกิดขึ้นจริงๆ ตัวอย่างที่ message ที่เกิดขึ้นจริง “failed to convert String to date” แต่เรามีทั้ง Start Date, End Date, Create Date, Update Date แล้วอันไหนที่เราผิดหล่ะ ซึ่งควรปรับแก้เป็น “invalid startDate : {startDate}” จะช่วยให้เราย้อนกลับมาแก้ได้ตรงจุด
  8. เมื่อทำบางอย่างไม่สำเร็จเลยไปเอาค่า Default Setting ขึ้นมาใช้งาน ในมุมของ Application จะมีการทำงานแบบนี้เกิดขึ้น และสิ่งนี้ก็จำเป็นที่จะต้อง logging ไว้เหมือนกัน “Not able to load port settings, default Setting selected for port : {port}”

--

--

Chutipon Pongpanit (Aof)
Chutipon Pongpanit (Aof)

Written by Chutipon Pongpanit (Aof)

Aoftionstyle idea here #idea is anything happen faster speed of light then captured in the chest. no ✔ no ✘ just Casually open chest beacause world need you

No responses yet