Jaynarol Blog

Docker : จัดเก็บและจัดการ Logs ด้วย PapertrailApp

สวัสดีครับ บทความนี้ต่อเนื่องจากบทความ เข้าใจและจัดการ Logs ด้วย Syslog ซึ่งในบทความนั้นเราได้สร้าง Syslog Container เพิ่มขึ้นมาในระบบเพื่อใช้รับ Logs จาก Container อื่นๆ แต่บทความนี้จะพูดถึงการจัดเก็บ Logs ด้วยวิธีที่คล้ายๆกันแต่ผลลัพธ์เจ๋งกว่าเยอะครับ

 

ปัญหา

  • Logs ในระบบเราคือข้อมูลหรือขยะ?
  • เราตรวจสอบ Logs ครั้งล่าสุดกันเมื่อไหร่?
  • เราใช้วิธีในการค้นหาและระบุช่วงเวลา Logs ที่ต้องการได้เร็วแค่ไหน?
  • Logs ในแต่ละส่วนของระบบเรากระจัดกระจายกันหรือไม่?
  • การจัดเก็บ Logs มีความมั่นคงแค่ไหน?
  • ใช้พื้นที่ในการจัดเก็บ Logs เท่าไร?
  • เราสามารถ Monitor Logs แบบ Realtime ได้หรือไม่?
  • เราสามารถ Monitor Logs ทุกระบบพร้อมกันได้หรือไม่?
  • เวลาระบบแจ้งเตือนปัญหาผ่าน Logs ออกมา เราจะรู้ได้ยังไง?
  • เราใช้เวลาในการตอบสนอง Logs ที่มีปัญหานานเท่าไร?

 

นี่แค่ตัวอย่างคำถามเล็กๆ น้อยๆ เกี่ยวกับ Logs ที่เราต้องเจอกันทุกคน ทุกระบบอยู่แล้ว ซึ่งพอเราใส่ใจมันจริงๆเราจะเห็นได้ว่ามันไม่ใช่เรื่องเล็กๆเลยใช่ไหมครับ แน่นอนว่าในระบบใหญ่ๆก็มักจะมีเครื่องมือช่วยบริหารจัดการเรื่องพวกนี้อยู่แล้ว เขาอาจจะเอา Logs ไป Analyze อัตโนมัติต่อยอดกันได้อีก แต่วันนี้เราจะยังไม่มองไปถึงจุดนั้นนะ เราจะคุยในฐานะระบบขนาดกลาง-เล็ก ซึ่งไม่มีความจำเป็นต้องลงทุนขี่ช้างจับตั๊กแตนขนาดนั้น

ในบทความที่แล้ว ใช้งาน Crontabs + ตั้งเวลา Log Rotation อัตโนมัติ ผมได้พูดถึงเรื่องการทำ Logs Rotation เพื่อการจัดเก็บ Logs อย่างเป็นระบบ แต่พอมองย้อนกลับไปดูปัญหาด้านบนอีกครั้ง จะเห็นได้ว่ามันเป็นแค่เศษเสี้ยวเล็กๆในคุณสมบัติของ Logs ที่ระบบเราควรมีเท่านั้น คงไม่ต้องจินตนาการต่อเลยว่าการจะทำให้แก้ปัญหาให้ครบทุกข้อด้วยตัวเราเองระบบเราจะยุ่งเหยิงและเราจะเสียเวลาแค่ไหน

 

 

ทางออก

Papertrail cloud hosted log management live in seconds

 

เรื่องบางเรื่องเราก็ควรปล่อยให้เป็นหน้าที่ของคนอื่น เพื่อให้เราไปโฟกัสจุดที่สำคัญกว่า

*** ลิงค์ไปยัง papertrailapp ในบทความนี้ผมได้ใส่ Refer Friends ของผมไว้ด้วย แจ้งไว้เพื่อทราบครับ ใครอยากจะลบออกก่อน ผมไม่ได้โกรธเคืองแต่อย่างใดครับ 😀

 

papertrailapp.com คือหนึ่งในเว็บที่ให้บริการระบบจัดเก็บและจัดการ Logs แน่นอนว่ามันช่วยแก้ไขปัญหาด้านบนได้ทั้งหมด และสิ่งที่สำคัญที่สุดคือมันเชื่อมต่อเข้ากับ Docker ได้อย่างง่ายดาย ด้วยการแก้ไข docker-compose เพียงนิดเดียวเท่านั้น (ใครอยากอ่านฟีเจอร์เต็มๆก็กดเข้าไปอ่านที่เว็บต้นทางได้เลยนะครับ)

ในการใช้บริการ papertrailapp จะแบ่งการจัดเก็บ Logs ให้เราเป็น 2 รูปแบบคือ

  • Search – คือ Logs ล่าสุดที่เพิ่งถูกจัดเก็บเข้าไป เราสามารถเรียกดู ค้นหา มอนิเตอร์ผ่านเว็บได้ทันที สะดวกและรวดเร็ว
  • Archive – คือ Logs ที่เก่าแล้วอาจจะ 1 สัปดาห์ขึ้นไปจะถูกจัดเก็บแบบบีบอัดไว้ในระบบ เราไม่สามารถค้นหาหรือกระทำผ่านเว็บได้โดยตรง แต่สามารถโหลดข้อมูลลงมาเปิดเองได้

ซึ่งระยะเวลาในการจัดเก็บ Logs ทั้ง 2 ประเภทก็จะแตกต่างกันไปในแต่ละ Plan แต่ที่พลาดไม่ได้คือในเว็บเขามี Free Plan ให้ด้วยครับ ลองใช้ได้เลยไม่มีข้อผูกมัด ใครจะใช้ฟรีตลอดไปก็ได้ครับเหมาะกับระบบเล็กๆ หรือจัดเก็บเฉพาะ Logs ที่จำเป็นเท่านั้น โดย Free Plan เราสามารถ Search ได้ 48 ชั่วโมง และ Archive ไว้ให้ 7 วันครับ (แน่นอนว่าหากใช้งานได้ดีก็ควรสนันสนุนเขาบ้างนะครับ :D)

 

 

ลองใช้งานกันดีกว่า

1. ก่อนอื่นก็เข้าไปที่เว็บ papertrailapp และสมัครกันให้เรียบร้อย หลังจากนั้น เข้าไปที่ Setting -> Log Destinations -> Create a Log Destination ครับ

Settings — Papertrail

 

2. หลังจากนั้นเมื่อเราเข้ามาหน้า Log Destinations อีกครั้งจะพบ syslog-address สำหรับนำไปใช้งานใน Docker ของเราครับ

Settings — Papertrail

3. สร้างไฟล์ docker-compose.yml และใส่ข้อมูลลงไปดังนี้ครับ

 

4. แก้ไขบรรทัด syslog-address: "udp://xxx.xxx.xxx.xxx" ให้เป็น syslog-address ของเราตามขั้นตอนที่ 2 ครับ

 

5.  สั่งรัน docker-compose up -d (ต้องอยู่ path เดียวกับไฟล์ docker-compose.yml นะครับ)

 

6. เปิด Browser ไปที่ IP ของ Docker http://192.168.99.100/ และอีก Tab เปิดเว็บ papertrailapp -> Event จากนั้นรีเฟรช http://192.168.99.100/ รัวๆ

 

ถ้าไม่มีอะไรผิดพลาดเราจะพบว่ามีข้อความโผล่ขึ้นมาใน papertrailapp ซึ่งก็คือ Logs ของ Container hello นั่นเองครับ เราสามารถลองใช้ความสามารถต่างๆของ papertrailapp เช่นการ search filter time range ได้จนพอใจครับ

เห็นไหมครับ อย่างที่บอกว่า papertrailapp สามารถใช้งานร่วมกับ Docker ได้ง่ายมากๆ ด้วยการเปลี่ยนข้อมูลเพียงจุดเดียวเท่านั้น จากนี้ก็สามารถนำไปประยุกต์ใช้กับระบบต่างๆได้ตามอัธยาศัยครับ

 

ปิดท้าย

บทความนี้ตั้งใจจะแสดงให้เห็นถึงการใช้งาน Docker ร่วมกับ Service อื่นๆ เพื่อทุ่นแรงและเพิ่มขีดความสามารถของระบบ แนวคิดนี้ไม่เพียงแต่เฉพาะเรื่อง Logs เท่านั้น เรื่องอื่นๆก็สามารถนำไปประยุกต์ใช้ได้เช่นกันครับ แต่ถึงอย่างนั้นก็ต้องท่องให้ขึ้นใจกับคำว่า พอดี ด้วยนะครับ เพราะระบบภายนอกมีข้อเสียร้ายแรงที่สุดคือ Out of Control อยู่นอกเหนือการควบคุม ควรจะใช้เฉพาะระบบรอง ระบบปลีกย่อยก็พอครับ

ยังไงหากใครมีเว็บอื่นหรือแนวคิดดีๆก็สามารถคอมเม้นไว้เพื่อแบ่งปันกันได้เต็มที่ครับ ผมยินดีมากที่จะได้แลกเปลี่ยนกันครับ

เจอกันใหม่บทความหน้า สวัสดีครับ