วิธีการดู logs ใน container
เราสามารถเข้าไปดู Log file ของ container ได้ด้วยคำสั่ง
docker container logs [option] [Container ID]
หรือเขียนสั้นๆว่า
$ docker logs [option] [Container ID]
โดยที่ options ต่างๆ ที่เราจะใช้บ่อยๆ มีดังนี้
-
-f ทำการติดตาม log ไปเรื่อยๆจนกว่าจะกด Control + C เพื่อ exit ออกมา
$ docker logs -f [Container ID]
-
-n ระบุจำนวนบรรทัดที่ต้องการดู เช่น -n 20
$ docker logs -n 20 [Container ID]
-
–until ระบุเวลาสุดท้ายที่ต้องการดู เช่น –until=10s(ดู log ตั้งแต่เริ่มต้นจนถึง 10 วินาทีก่อนหน้า)
$ docker logs --until=10s [Container ID]
เราจะใช้หน่วย s เป็น วินาที, m เป็น นาที และ h เป็น ชั่วโมง
หรือเราสามารถใส่ วันที่และเวลาเต็มๆแบบนี้ก็ได้
$ docker logs --until=2024-01-22T00:41 [Container ID]
log จะจบตรงเวลาที่เราใส่เข้าไป(until แปลว่า จนกระทั่ง)
-
–since ระบุเวลาเริ่มต้นที่ต้องการดู เช่น –since=10s(ดู log ตั้งแต่ 10 วินาทีก่อนหน้านี้เป็นต้นไป)
$ docker logs --since=10s [Container ID]
เหมือนกับ –until เราสามารใส่เวลาแบบเต็มๆได้เช่นเดียวกัน
$ docker logs --since=2024-01-22T00:41 [Container ID]
log จะเริ่มต้นจากเวลาที่เราใส่เข้าไป(since แปลว่า ตั้งแต่)
Save log จาก console ไปยัง file
ถ้าเราจะ save logs ที่เราต้องการออกไปเป็น file เราจะใช้คำสั่ง
$ docker logs --since=1h [Container ID] &> nginx.log
Path ที่เก็บ Logfile
เราสามารถดึง path ที่เก็บ log file ได้ด้วยคำสั่ง
$ docker inspect --format='{{.LogPath}}' [containerID]
ผลลัพธ์จะออกมาเป็น
/var/lib/docker/containers/[Container ID]/[Container ID]-json.log
ปรับเปลี่ยน format ของ Log
การจัดเก็บ Log จะถูกกำหนดรูปแบบด้วย logging driver ซึ่งโดย default เราจะใช้ json-file
นอกจาก json-file เรายังสามารถเลือก logging driver ตัวอื่นๆได้ตามตารางนี้
Driver | คำอธิบาย |
---|---|
json-file | เป็นค่า default ของ docker จะเก็บ log ในรูปแบบของ JSON |
syslog | เขียน log messages ในรูปแบบของ syslog ซึ่งเครื่อง host ต้องมี syslog server run อยู่ |
journald | ส่ง log messages ไปยัง journald ซึ่งเครื่อง host ต้องมี journald run อยู่ |
gelf | ส่ง log messages ไปยัง Graylog Extended Log Format (GELF) endpoint เช่น Graylog หรือ Logstash |
fluentd | ส่ง log messages ไปยัง fluentd(fluentd เป็น service ที่คอยเก็บ log ไม่ใช่ log server) ซึ่งในเครื่องก็ต้องมี fluentd run อยู่ |
awslogs | ส่ง log messages ไปยัง Amazon CloudWatch |
splunk | ส่ง log messages ไปยัง splunk โดยใช้ HTTP Event Collector |
etwlogs | ส่ง log messages เข้าไปยัง Event Tracing for Windows (ETW) เพื่อให้ไปแสดงผลใน Event Viewer ใช้ได้เฉพาะ Windows เท่านั้น |
gcplogs | ส่ง log messages ไปยัง Google Cloud Platform (GCP) Logging |
ซึ่งเราต้องลง plug-ins เพื่อให้สามารถใช้งาน logging driver ตัวอื่นๆได้ ซึ่งวิธีการสามารถ click ที่ชื่อ logging driver ได้เลย