Container Monitoring Tools: cAdvisor vs Sysdig vs Falco

การใช้งาน Container ในระบบ Production ต้องการเครื่องมือ Monitoring ที่มองเห็นทั้งการใช้ทรัพยากรของแต่ละ Workload, Process ที่กำลังทำงานอยู่ภายใน, และพฤติกรรมที่อาจเป็นภัยต่อความปลอดภัย เครื่องมือสามตัวที่ถูกนำมาเปรียบเทียบบ่อยที่สุดคือ cAdvisor, Sysdig และ Falco — ซึ่งแต่ละตัวถูกออกแบบมาเพื่อตอบโจทย์คนละด้าน

บทความนี้เปรียบเทียบจุดแข็ง, ข้อจำกัด, และ Use Case ที่เหมาะสมของทั้งสามเครื่องมือ เพื่อให้เลือกใช้งานได้ตรงกับสิ่งที่ต้องการจริง ๆ ไม่ว่าจะเป็นการวัดประสิทธิภาพ (Performance Monitoring), การตรวจสอบเชิงลึก (Deep Troubleshooting), หรือการเฝ้าระวังความปลอดภัยขณะ Runtime (Runtime Security)

ภาพรวมของเครื่องมือทั้งสาม

ก่อนลงรายละเอียด ขอสรุปภาพรวมของเครื่องมือทั้งสามว่าแต่ละตัวเกิดมาเพื่อทำอะไร และควรใช้ตอนไหน

เครื่องมือประเภทจุดเด่นผู้สร้าง / License
cAdvisorResource Monitoringวัด CPU/Memory/Network/Disk ของ ContainerGoogle / Apache 2.0 (Open Source)
SysdigDeep Monitoring + Securityวิเคราะห์ System Call ระดับ Kernel + ForensicsSysdig Inc. / Open Source + Enterprise
FalcoRuntime Securityตรวจจับพฤติกรรมผิดปกติ, Intrusion DetectionSysdig / 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_totalCPU ที่ใช้สะสม
container_memory_usage_bytesMemory ที่ใช้อยู่ปัจจุบัน
container_memory_working_set_bytesMemory ที่ใช้งานจริง (ไม่รวม cache)
container_network_receive_bytes_totalBytes ที่รับผ่าน Network
container_fs_usage_bytesDisk ที่ใช้งาน

ข้อจำกัดของ 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 มีข้อจำกัด

เปรียบเทียบคุณสมบัติ

ตารางเปรียบเทียบรวมเพื่อให้เห็นภาพชัด ๆ ว่าแต่ละเครื่องมือเหมาะกับอะไรบ้าง

คุณสมบัติcAdvisorSysdigFalco
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 ต้องการทั้งการวัดทรัพยากร, ความสามารถในการดีบักเชิงลึก, และการเฝ้าระวังภัยคุกคามพร้อมกัน การเลือกใช้แค่ตัวเดียวจึงมักไม่เพียงพอ