การใช้งาน Container ในระบบ Production ต้องการเครื่องมือ Monitoring ที่มองเห็นทั้งการใช้ทรัพยากรของแต่ละ Workload, Process ที่กำลังทำงานอยู่ภายใน, และพฤติกรรมที่อาจเป็นภัยต่อความปลอดภัย เครื่องมือสามตัวที่ถูกนำมาเปรียบเทียบบ่อยที่สุดคือ cAdvisor, Sysdig และ Falco — ซึ่งแต่ละตัวถูกออกแบบมาเพื่อตอบโจทย์คนละด้าน
บทความนี้เปรียบเทียบจุดแข็ง, ข้อจำกัด, และ Use Case ที่เหมาะสมของทั้งสามเครื่องมือ เพื่อให้เลือกใช้งานได้ตรงกับสิ่งที่ต้องการจริง ๆ ไม่ว่าจะเป็นการวัดประสิทธิภาพ (Performance Monitoring), การตรวจสอบเชิงลึก (Deep Troubleshooting), หรือการเฝ้าระวังความปลอดภัยขณะ Runtime (Runtime Security)
ภาพรวมของเครื่องมือทั้งสาม
ก่อนลงรายละเอียด ขอสรุปภาพรวมของเครื่องมือทั้งสามว่าแต่ละตัวเกิดมาเพื่อทำอะไร และควรใช้ตอนไหน
| เครื่องมือ | ประเภท | จุดเด่น | ผู้สร้าง / License |
|---|---|---|---|
| cAdvisor | Resource Monitoring | วัด CPU/Memory/Network/Disk ของ Container | Google / Apache 2.0 (Open Source) |
| Sysdig | Deep Monitoring + Security | วิเคราะห์ System Call ระดับ Kernel + Forensics | Sysdig Inc. / Open Source + Enterprise |
| Falco | Runtime Security | ตรวจจับพฤติกรรมผิดปกติ, Intrusion Detection | Sysdig / CNCF Graduated |
จากตารางจะเห็นว่าทั้งสามเครื่องมือไม่ได้ซ้อนทับกันเต็ม ๆ — cAdvisor เน้นวัดทรัพยากร, Sysdig เน้นการวิเคราะห์เชิงลึก และ Falco เน้นด้านความปลอดภัย ส่วนใหญ่ในระบบจริงจึงใช้ร่วมกันมากกว่าเลือกแค่ตัวใดตัวหนึ่ง
cAdvisor: Container Resource Monitoring
cAdvisor (Container Advisor) พัฒนาโดย Google เป็นเครื่องมือที่เก็บข้อมูลการใช้ทรัพยากรและ Performance ของแต่ละ Workload แบบ Real-time โดยไม่ต้องติดตั้ง Agent เพิ่มภายใน — cAdvisor จะอ่านข้อมูลจาก cgroups ของ Linux Kernel โดยตรง
คุณสมบัติหลัก
- เก็บ Metric CPU, Memory, Network, Filesystem, และ Disk I/O ของแต่ละ Workload
- มี Web UI ในตัวสำหรับดู Metric แบบ Real-time
- รองรับการ Export Metric ไป Prometheus ผ่าน /metrics endpoint
- รองรับ Runtime หลักทั้ง Docker, containerd, CRI-O
- ใช้ทรัพยากรต่ำ — ตัว Agent กินเพียง ~50MB RAM
ติดตั้ง cAdvisor ด้วย Docker
docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
--privileged \
--device=/dev/kmsg \
gcr.io/cadvisor/cadvisor:v0.47.2
เปิด Web UI ที่ http://server-ip:8080 จะเห็นกราฟ CPU, Memory, Network ของทุก Workload ทันที ส่วน Prometheus สามารถ scrape ได้ที่ /metrics
Prometheus Scrape Config
scrape_configs:
- job_name: 'cadvisor'
scrape_interval: 15s
static_configs:
- targets: ['cadvisor:8080']
Metric ที่สำคัญจาก cAdvisor
| Metric | ความหมาย |
|---|---|
| container_cpu_usage_seconds_total | CPU ที่ใช้สะสม |
| container_memory_usage_bytes | Memory ที่ใช้อยู่ปัจจุบัน |
| container_memory_working_set_bytes | Memory ที่ใช้งานจริง (ไม่รวม cache) |
| container_network_receive_bytes_total | Bytes ที่รับผ่าน Network |
| container_fs_usage_bytes | Disk ที่ใช้งาน |
ข้อจำกัดของ cAdvisor
- ไม่สามารถมองเห็น Process ภายในได้ (เห็นแค่ตัวเลขรวม)
- ไม่มีความสามารถด้าน Security หรือตรวจจับภัยคุกคาม
- ไม่มี Alerting ในตัว — ต้องใช้ร่วมกับ Prometheus + Alertmanager
- ไม่มีการเก็บข้อมูลระยะยาว — ต้อง Export ไป TSDB
Sysdig: Deep Monitoring & Troubleshooting
Sysdig เป็นเครื่องมือที่ไปไกลกว่าการวัดทรัพยากร — สามารถดักจับ System Call (syscalls) ระดับ Kernel ได้โดยตรงผ่าน Kernel Module หรือ eBPF ทำให้มองเห็นทุกอย่างที่เกิดขึ้นภายใน Workload ตั้งแต่การเปิดไฟล์, การสร้าง Process, ไปจนถึงการติดต่อ Network
คุณสมบัติหลัก
- ดักจับ syscall ทุกระดับ — เหมาะกับการ Deep Troubleshooting
- รองรับ Container-aware filter — กรองดูเฉพาะ Workload ที่สนใจได้
- สามารถ Record และ Replay เหตุการณ์ย้อนหลัง (Forensics)
- มี CLI Tool (sysdig) และ csysdig (TUI) สำหรับใช้งานแบบ Interactive
- มี Version Enterprise (Sysdig Monitor + Secure) ที่เพิ่ม Cloud UI และ Compliance
ติดตั้ง Sysdig บน Linux
# Ubuntu/Debian
curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | sudo bash
# Run Sysdig แบบ snapshot ดูทุก syscall
sudo sysdig
# ดู CPU ของทุก Container
sudo sysdig -c topcontainers_cpu
# ดู File ที่ถูกเปิดใน Container ชื่อ nginx
sudo sysdig -pc -c topfiles_bytes container.name=nginx
Chisels — Script สำเร็จรูป
Sysdig มีสิ่งที่เรียกว่า chisels ซึ่งเป็น Script Lua สำเร็จรูปสำหรับการวิเคราะห์รูปแบบต่าง ๆ ที่ใช้บ่อย
# ดู chisels ทั้งหมด
sudo sysdig -cl
# ดู Top Process CPU
sudo sysdig -c topprocs_cpu
# ดู Top File I/O
sudo sysdig -c topfiles_time
# ดู HTTP Request ที่วิ่งเข้าออก
sudo sysdig -c httplog
# ดู Error ของ syscall
sudo sysdig -c errors
Use Case ของ Sysdig
- ตามหาสาเหตุที่ Workload ใด CPU สูงผิดปกติว่ามี Process ไหนเป็นตัวการ
- ตรวจว่าโปรเซสกำลังเปิดไฟล์ไหน, Network Connection ไปที่ใด
- ทำ Forensics หลังเกิดเหตุการณ์ผิดปกติ — replay ดูย้อนหลังได้
- ดีบัก Performance Issue ระดับ Syscall (เช่น write, read, accept ช้า)
ข้อจำกัดของ Sysdig
- Overhead สูงกว่า cAdvisor เพราะ Capture syscalls ทั้งหมด
- Version Open Source ไม่มี UI ที่ครบเท่า Commercial
- ต้องใช้ Kernel Module หรือ eBPF — อาจติดตั้งไม่ได้ในบาง Environment
- ข้อมูล Log ที่ได้อาจเยอะเกินไปถ้าไม่ตั้ง Filter ให้ดี
Falco: Runtime Security & Threat Detection
Falco เป็น Open Source Project ที่พัฒนาโดย Sysdig และได้ Graduate จาก CNCF แล้ว — ถูกออกแบบมาเพื่อทำ Runtime Security โดยเฉพาะ คือ ตรวจจับพฤติกรรมที่ผิดปกติหรือเป็นภัยต่อ Workload ขณะที่กำลังทำงาน
หลักการทำงาน
Falco ใช้ eBPF หรือ Kernel Module เพื่อดักจับ syscall แล้วเทียบกับ Rule ที่เขียนไว้ ถ้าพฤติกรรมตรงกับ Rule จะ Alert ทันที ตัวอย่างพฤติกรรมที่มักตรวจจับ เช่น เปิด Shell ภายใน Workload, Read /etc/shadow, สร้าง Process แปลก, หรือเชื่อมต่อ Network ไปยัง IP ที่ไม่น่าไว้ใจ
ติดตั้ง Falco
# Ubuntu/Debian
curl -fsSL https://falco.org/repo/falcosecurity-packages.asc | \
sudo gpg --dearmor -o /usr/share/keyrings/falco-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/falco-archive-keyring.gpg] \
https://download.falco.org/packages/deb stable main" | \
sudo tee /etc/apt/sources.list.d/falcosecurity.list
sudo apt update
sudo apt install -y falco
# Enable และเริ่มต้น Service
sudo systemctl enable falco-modern-bpf --now
sudo systemctl status falco-modern-bpf
ตัวอย่าง Rule ของ Falco
# /etc/falco/falco_rules.local.yaml
- rule: Shell spawned in container
desc: Detect shell executed inside a container
condition: >
container.id != host and
proc.name in (bash, sh, zsh, ash, dash)
output: >
Shell opened in container (user=%user.name container=%container.name
image=%container.image.repository cmd=%proc.cmdline)
priority: WARNING
tags: [container, shell, mitre_execution]
- rule: Write below /etc
desc: Detect write activity beneath /etc
condition: >
evt.dir = < and open_write and
fd.name startswith /etc and
not proc.name in (apt, dpkg, yum, systemd)
output: >
File below /etc opened for writing (user=%user.name
file=%fd.name program=%proc.name)
priority: ERROR
tags: [filesystem, mitre_persistence]
- rule: Read sensitive file
desc: Detect attempts to read sensitive system files
condition: >
open_read and
fd.name in (/etc/shadow, /etc/passwd, /root/.ssh/id_rsa) and
not proc.name in (sshd, login, sudo)
output: >
Sensitive file read (user=%user.name file=%fd.name program=%proc.name)
priority: WARNING
tags: [filesystem, secret]
Default Rules ที่มาพร้อม Falco
- Container Escape Attempt — ตรวจจับการพยายามหลุดออกจากสภาพแวดล้อม isolated
- Privileged Container Started — เตือนเมื่อมีการรัน Workload แบบ privileged
- Unexpected Network Connection — Connection ไปยัง IP หรือ Port ที่ไม่ได้อยู่ใน allowlist
- Crypto Mining Detection — ตรวจจับพฤติกรรมที่คล้ายการขุดเหรียญ
- Package Management in Container — เตือนเมื่อมีการ apt/yum install ใน Production
ส่ง Alert ไปที่อื่น
Falco สามารถส่ง Alert ไปยัง SIEM, Slack, หรือ Webhook ผ่าน Falcosidekick ซึ่งเป็น Forwarder ที่รองรับกว่า 60 outputs เช่น Slack, Teams, Elasticsearch, Prometheus Alertmanager, Kafka, PagerDuty
docker run -d \
--name falcosidekick \
-p 2801:2801 \
-e SLACK_WEBHOOKURL="https://hooks.slack.com/services/xxx" \
-e SLACK_MINIMUMPRIORITY="warning" \
falcosecurity/falcosidekick:latest
ข้อจำกัดของ Falco
- ไม่ได้ทำ Resource Monitoring — ต้องใช้ร่วมกับ cAdvisor หรือ Prometheus
- ต้องปรับจูน Rule อย่างต่อเนื่อง ไม่งั้นจะ Alert ซ้ำ ๆ (false positive)
- Rule Syntax มี Learning Curve — ต้องเข้าใจ syscall พอสมควร
- ต้อง Enable Kernel Module หรือ eBPF — บาง Managed Kubernetes มีข้อจำกัด
เปรียบเทียบคุณสมบัติ
ตารางเปรียบเทียบรวมเพื่อให้เห็นภาพชัด ๆ ว่าแต่ละเครื่องมือเหมาะกับอะไรบ้าง
| คุณสมบัติ | cAdvisor | Sysdig | Falco |
|---|---|---|---|
| Resource Metrics | ✅ ดีเยี่ยม | ✅ ดี | ❌ ไม่มี |
| Syscall Capture | ❌ ไม่มี | ✅ ครบถ้วน | ✅ เฉพาะตาม Rule |
| Runtime Security | ❌ ไม่มี | ⚠️ มี (ผ่าน Falco) | ✅ จุดแข็งหลัก |
| Deep Troubleshooting | ❌ ไม่มี | ✅ ดีเยี่ยม | ⚠️ จำกัด |
| Forensics / Replay | ❌ ไม่มี | ✅ มี | ⚠️ จำกัด |
| Prometheus Export | ✅ Native | ✅ ผ่าน Exporter | ✅ ผ่าน Sidekick |
| Overhead | ต่ำ (<1% CPU) | ปานกลาง-สูง | ปานกลาง |
| Learning Curve | ง่าย | ปานกลาง-สูง | ปานกลาง |
ใช้ร่วมกันดีกว่าเลือกแค่ตัวเดียว
ในระบบ Production สามเครื่องมือนี้ไม่ใช่คู่แข่งแต่เป็นเพื่อนร่วมทีม — แต่ละตัวดูแลคนละด้าน และช่วยเสริมจุดอ่อนซึ่งกันและกัน
- cAdvisor — ใช้เก็บ Metric พื้นฐานของทุก Workload ส่งเข้า Prometheus สำหรับ Dashboard และ Alert
- Sysdig — ใช้ตอน Troubleshoot ปัญหาเชิงลึกที่ Metric ปกติบอกไม่ได้
- Falco — ทำงานต่อเนื่องเพื่อตรวจจับพฤติกรรมผิดปกติด้าน Security
ตัวอย่างสถาปัตยกรรมทั่วไป: cAdvisor + Node Exporter + Prometheus + Grafana สำหรับ Observability พื้นฐาน, Falco + Falcosidekick + Slack/SIEM สำหรับ Security Alert, และ Sysdig Open Source ติดตั้งไว้ทุก Node เพื่อเรียกใช้เมื่อต้อง Debug
สรุป
cAdvisor, Sysdig และ Falco เป็นเครื่องมือที่ถูกออกแบบมาเพื่องานคนละประเภท — cAdvisor เป็นตัวเลือกหลักสำหรับ Resource Monitoring เนื่องจากน้ำหนักเบาและต่อกับ Prometheus ได้ทันที, Sysdig เหมาะกับการ Deep Troubleshooting และ Forensics ขณะเกิดปัญหา, ส่วน Falco เป็นหัวใจของ Runtime Security ที่ตรวจจับพฤติกรรมอันตรายในระดับ syscall
ในทางปฏิบัติ ทีม DevOps และ SRE ส่วนใหญ่เลือกใช้ทั้งสามตัวร่วมกัน เพราะ Container ที่ทำงานอยู่ใน Production ต้องการทั้งการวัดทรัพยากร, ความสามารถในการดีบักเชิงลึก, และการเฝ้าระวังภัยคุกคามพร้อมกัน การเลือกใช้แค่ตัวเดียวจึงมักไม่เพียงพอ

