sysdig

系统调用级抓取与离线分析工具,支持容器与 Kubernetes 元数据

补充说明

sysdig 从内核采集系统调用、tracepoint 和部分调度事件,支持实时过滤、写入 .scap 抓包文件后离线分析,内置 csysdig 交互界面和 Lua chisel 脚本。与 strace 相比,它更适合全系统、带容器元数据的短期抓取;与 tcpdump 相比,它覆盖系统调用而不是网络包。

常用示例

# 实时查看打开文件的进程、路径和返回值
sudo sysdig -p '%evt.time %proc.name %fd.name %evt.res' 'evt.type=openat and evt.dir=<'

# 抓取事件到文件,之后离线分析(Ctrl-C 结束)
sudo sysdig -w /tmp/capture.scap

# 从抓包文件统计读写最多的文件
sysdig -r /tmp/capture.scap -c topfiles_bytes

# 只看某个容器的 openat/write 事件
sudo sysdig -p '%container.name %proc.name %evt.type %fd.name' \
  'container.name=web and evt.type in (openat,write)'

# 按进程统计网络流量
sudo sysdig -c topprocs_net

# 列出可用 chisel 与字段
sysdig -l
sysdig -L | grep -i container

离线分析不需要 root 加载驱动;sysdig -r file.scap 只读取抓包文件,适合在分析机上复现。

易错点与排错

读完自测

  1. sysdig 与 strace 的适用场景有什么差异?
  2. 为什么 sysdig 在容器里经常起不来?
  3. 过滤器里的 evt.dir=< 有什么作用?
答案
  1. strace 适合跟踪单个进程的系统调用且开销大;sysdig 适合全系统短时抓取、带容器/Kubernetes 元数据并离线分析。
  2. 容器通常没有权限加载内核模块、缺少匹配的内核头文件,seccomp/capability 也可能受限;应在宿主机或特权 DaemonSet 中运行。
  3. 它只匹配退出方向的事件,避免进入和退出事件成对出现造成重复,常用于看返回值和耗时。

相关条目