ปัญหา Log ใน Docker
โดยตั้งค่า Docker เก็บ Log ทุก Container ไว้ในไฟล์ JSON บน Host หากไม่จัดการ Container ที่เสียหรือใช้งานหนักจะสามารถเพิ่ม Disk Usage จนเต็ม Server ได้
ดู Log ผ่าน Docker CLI
# ดู log ปัจจุบัน
docker logs container_name
# ดู log แบบต่อเนื่อง
docker logs -f container_name
# ดู log 100 บรรทัดล่าสุด
docker logs --tail 100 container_name
# ดู log พร้อม timestamp
docker logs -t container_name
# ดู log พร้อม filter ตามวันเวลา
docker logs --since 2026-03-01 container_name
docker logs --until 2026-03-27 container_name
ควบคุมขนาด Log ด้วย max-size
# กำหนด Log Rotation ปัปปันทันที ในคำสั่ง docker run
docker run -d \
--log-opt max-size=10m \
--log-opt max-file=3 \
myapp:latest
# ใน Docker Compose
services:
app:
image: myapp:latest
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
ตั้งค่า Default Log Limit สำหรับทุก Container
แก้ไฟล์ /etc/docker/daemon.json:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
จากนั้น restart Docker:
systemctl restart docker
Log Drivers ที่นิยมใช้
| Driver | ความสามารถ | เหมาะ |
|---|---|---|
| json-file | บันทึกเป็น JSON บนดิสก์ | ค่า default |
| local | บันทึกเป็น binary เป็นนี้ fast กว่า | ถ้าไม่ใช้ docker logs |
| syslog | ส่งไป Syslog daemon | ระบบ Centralized |
| gelf | ส่งไป Graylog | Log Management พื้นฐาน |
| fluentd | ส่งไป Fluentd/Fluentbit | Enterprise Logging |
| none | ไม่บันทึก log เลย | Job ที่ไม่ต้องการ log |
Loki + Grafana (Lightweight Log Stack)
version: '3.8'
services:
loki:
image: grafana/loki:2.9.0
container_name: loki
restart: unless-stopped
ports:
- "3100:3100"
volumes:
- loki_data:/loki
grafana:
image: grafana/grafana:latest
container_name: grafana
restart: unless-stopped
ports:
- "3000:3000"
environment:
GF_SECURITY_ADMIN_PASSWORD: admin123
volumes:
- grafana_data:/var/lib/grafana
depends_on:
- loki
volumes:
loki_data:
grafana_data:
ส่ง Log เข้า Loki โดยตั้ง Docker logging driver:
services:
app:
image: myapp:latest
logging:
driver: loki
options:
loki-url: "http://localhost:3100/loki/api/v1/push"
loki-batch-size: "400"
การลบ Log เก่าออก
# ตรวจดู disk usage ของ log
docker system df
# ดูเส้นทาง log file
ls -lh /var/lib/docker/containers/*/
# ลบ log container ที่เหลือ (truncate)
truncate -s 0 /var/lib/docker/containers/CONTAINER_ID/CONTAINER_ID-json.log
สรุป
ตั้งค่า max-size และ max-file ในทุก Container ที่เป็น Production เพื่อป้องกัน Disk เต็ม หรือใช้ Loki สำหรับเก็บ Log อย่างเป็นระบบ

