系统调用级抓取与离线分析工具,支持容器与 Kubernetes 元数据
sysdig 从内核采集系统调用、tracepoint 和部分调度事件,支持实时过滤、写入 .scap 抓包文件后离线分析,内置 csysdig 交互界面和 Lua chisel 脚本。与 strace 相比,它更适合全系统、带容器元数据的短期抓取;与 tcpdump 相比,它覆盖系统调用而不是网络包。
sysdig-probe,或 eBPF 探针;模块需要与当前内核匹配。CAP_SYS_ADMIN 等能力;容器内通常无法加载模块,应在宿主机运行。container.name、container.id、k8s.pod.name 等字段,但依赖运行时 socket 与 Kubernetes API 访问权限。# 实时查看打开文件的进程、路径和返回值
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 只读取抓包文件,适合在分析机上复现。
evt.dir=< 只看退出事件。%fd.name 对非文件 fd 可能显示 <NA>;先用 evt.type 限定文件类事件,避免格式字段误导。-w 落盘、加过滤条件,或限制抓取时长和事件数。sysdig -l 中列出的完全一致,不同版本附带脚本不同;-c 写错会直接报错。sysdig 与 strace 的适用场景有什么差异?sysdig 在容器里经常起不来?evt.dir=< 有什么作用?strace 适合跟踪单个进程的系统调用且开销大;sysdig 适合全系统短时抓取、带容器/Kubernetes 元数据并离线分析。