ในการจัดการ container ด้วย Docker นั้น
เรื่องหนึ่งที่สำคัญมาก ๆ คือ การ monitoring นั่นเอง
เราจะรู้ได้อย่างไรว่า Docker ทำงานอะไรบ้าง ?
เราจะรู้ได้อย่างไรว่า แต่ละ container ใช้งาน CPU, Memory และ I/O เท่าไร ?
สิ่งต่าง ๆ เหล่านี้เป็นคำถามที่ผู้ใช้งานใหม่ ๆ ต้องตอบให้ได้
ดังนั้นมาดูกันหน่อย ว่าทำอย่างไรได้บ้าง ?

เริ่มต้นด้วยวิธีการง่าย ๆ คือ Command line นี่เอง

โดย Docker ได้เตรียมชุดคำสั่งมาให้แล้ว
คำสั่งแรกคือ

// ดูการทำงานทั้งหมด ประกอบไปด้วย CPU/Memory และ I/O แบบ realtime
$docker container stats

// หรือสามารถดูรายละเอียดของแต่ละ container ก็ได้
$docker container stats <id/name>

// หรือสามารถเรียกใช้งานผ่าน Docker Remote API ได้เลย
$curl --unix-socket /var/run/docker.sock http://localhost/containers/<id/name>/stats

// หรือถ้าต้องการดู event หรือการทำงานภายในของ Docker ก็ใช้
$docker system events

วิธีการที่สอง ทำการ monitor ผ่าน Metric ด้วย Premetheus

โดยค่า default นั้นปิดไว้
ดังนั้นเราจำเป็นต้องเปิดใช้งานก่อน
ในแต่ละ OS นั้นก็มีการ configuration ที่ต่างกันดังนี้

  • Linux แก้ไขที่ไฟล์ /etc/docker/daemon.json
  • Windows Server แก้ไขที่ไฟล์ C:\ProgramData\docker\config\daemon.json
  • Docker for Mac / Docker for Windows ไปที่ Docker icon เลือก Preferences => Daemon และกด Advanced

จากนั้นทำการแก้ไขและ restart Docker ดังนี้

{
  "metrics-addr" : "0.0.0.0:1337",
  "experimental" : true
}

จากนั้นสามารถเข้าใช้งานผ่าน url = http://localhost:1337/metrics
เมื่อทุกอย่างเรียบร้อยก็ติดตั้งและ configuration ค่าของ Premetheus ซะ
ส่วน graph สวย ๆ ก็ไปใช้งาน Grafana ก็พอไปวัดไปวาได้

วิธีการที่สาม ใช้งานผ่าน cAdvisor

ไม่ต้องทำอะไรมาก เพียงสร้าง container มาเลย ดังนี้

$docker run \
  -d \
  --name=cadvisor \
  -p 8080:8080 \
  --volume=/var/run:/var/run:rw \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  google/cadvisor:latest

จากนั้นก็เข้าไปใช้งานผ่าน url = http://localhost:8080

เพียงเท่านี้เราก็สามารถ monitor การทำงานของ Docker แบบง่าย ๆ ได้แล้วครับ