• ระหว่างให้บริการหลังดีพลอยแอปพลิเคชันด้วย Docker บนเซิร์ฟเวอร์ Linux อาจพบข้อความแจ้งว่าพื้นที่ดิสก์ไม่เพียงพอ
    • แม้ว่าปริมาณข้อมูลและล็อกที่แอปพลิเคชันสร้างและจัดเก็บจริงจะมีไม่มาก แต่พื้นที่สตอเรจของทั้งระบบก็อาจเต็มได้
    • หนึ่งในสาเหตุของปัญหาพื้นที่สตอเรจไม่พอเมื่อใช้ Docker คือ 'ล็อกของคอนเทนเนอร์ Docker'
  • Docker logging driver และตำแหน่งของล็อก
    • logging driver: ใน Docker มีกลไกการบันทึกล็อกที่ช่วยให้ดึงข้อมูลจากคอนเทนเนอร์และบริการที่กำลังทำงานอยู่ได้ ซึ่งก็คือ logging driver
    • คำสั่ง docker logs: แสดงข้อมูลที่คอนเทนเนอร์ที่กำลังทำงานบันทึกไว้
    • คำสั่ง docker service logs: แสดงข้อมูลที่คอนเทนเนอร์ทั้งหมดที่เข้าร่วมใน service บันทึกไว้
    • Docker ใช้ logging driver แบบ json-file ที่จับ standard output(stdout) หรือ standard error(stderr) ของล็อกคอนเทนเนอร์ทั้งหมด แล้วบันทึกลงไฟล์ในรูปแบบ JSON
    • เมื่อรันคอนเทนเนอร์ Docker ด้วยคำสั่ง docker run หรือ docker-compose up จะมีการสร้างไฟล์ /var/lib/docker/containers/[Container-ID]/[Container-ID]-json.log และบันทึกล็อกลงไป
    • logging driver แบบ json-file ไม่ทำ log rotation
      • ถ้าคอนเทนเนอร์สร้างเอาต์พุตจำนวนมาก ไฟล์ล็อกที่เก็บด้วย logging driver นี้จะใช้พื้นที่ดิสก์จำนวนมาก และอาจทำให้พื้นที่ดิสก์หมดได้
  • การลดขนาดล็อกของคอนเทนเนอร์ Docker
    • เมื่อรันคำสั่ง docker rm หรือ docker-compose down คอนเทนเนอร์ Docker จะถูกลบ และไดเรกทอรีที่ตรงกับ [Container-ID] ใต้ /var/lib/docker/containers ก็จะถูกลบด้วย
      • ส่งผลให้ไฟล์ [Container-ID]-json.log ที่กินพื้นที่ดิสก์จำนวนมากถูกลบไปพร้อมกัน ช่วยคืนพื้นที่ดิสก์ของระบบโดยรวม
    • เมื่อรันคำสั่ง truncate -s 0 <json-log-file> จะทำให้ขนาดไฟล์ล็อกเป็น 0 ได้
  • การตั้งค่า log rotation
    • สามารถเปิดใช้ log rotation ได้โดยกำหนดขนาดไฟล์สูงสุด (max-size) และจำนวนไฟล์สูงสุด (max-file)
    • เมื่อขนาดไฟล์ถึงค่าที่กำหนดไว้สูงสุด จะสลับไปใช้ไฟล์ใหม่ และไฟล์เดิมจะถูกสร้างเป็น ...-json.log.1, ...-json.log.2 ไปจนถึงจำนวนสูงสุดที่กำหนด
    • เมื่อเกินจากนั้น ไฟล์ที่เก่าที่สุดจะถูกลบออก เพื่อป้องกันไม่ให้ไฟล์ล็อกของคอนเทนเนอร์ Docker ขยายใหญ่ขึ้นได้ไม่จำกัด

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น