- ระหว่างให้บริการหลังดีพลอยแอปพลิเคชันด้วย 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 ขยายใหญ่ขึ้นได้ไม่จำกัด
ยังไม่มีความคิดเห็น