直呼“卧槽”的诊断工具:Sysdig
Sysdig 是一款功能强大的 系统诊断与监控工具。
有了它,你几乎可以替代掉 top、iftop、lsof、strace 等常见工具,快速完成 性能分析 和 故障排查。
安装
你遇到了这个错误:
bash
-bash: sysdig: command not found这意味着你的系统上没有安装 sysdig 这个工具。
✅ 解决方案:安装 Sysdig
你需要先安装 sysdig 才能使用它。以下是常见的安装方法。
✅ 方法 1:使用官方一键安装脚本(推荐)
bash
curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | sudo bash✅ 适用于大多数 Linux 发行版(Ubuntu、Debian、CentOS、RHEL 等)
安装完成后,就可以运行:
bash
sudo sysdig proc.name=nginx✅ 方法 2:通过包管理器安装
Ubuntu / Debian:
bash
sudo apt-get update
sudo apt-get install -y sysdigCentOS / RHEL / AlmaLinux / Rocky Linux:
bash
sudo yum install -y epel-release
sudo yum install -y sysdig或者使用 dnf(较新版本):
bash
sudo dnf install -y sysdig✅ 方法 3:使用 docker 运行(无需安装)
如果你有 Docker,可以不用安装,直接运行:
bash
sudo docker run --rm -i --name sysdig --privileged \
sysdig/sysdig proc.name=nginx💡 这会启动一个临时容器来运行 sysdig,适合临时排查。
⚠ 注意事项
sysdig需要 root 权限 或sudo权限才能运行,因为它要捕获内核级别的系统调用。- 第一次运行时可能会下载内核模块或构建
dkms模块,需要联网。 - 如果你在容器环境(如 Kubernetes)中,可能需要额外配置才能使用。
🔍 验证是否安装成功
安装完成后运行:
bash
sysdig --version你应该看到类似输出:
bash
sysdig version 0.35.0然后就可以使用你的命令了:
bash
sudo sysdig proc.name=nginx🧰 提示:如果还是无法安装?
你可以考虑使用替代工具:
| 工具 | 用途 |
|---|---|
strace | 跟踪单个进程的系统调用(如 strace -p $(pgrep nginx)) |
lsof | 查看 nginx 打开的文件和网络连接(如 lsof -i :80) |
tcpdump | 抓网络包(如 tcpdump -i any port 80) |
journalctl | 查看服务日志(如 journalctl -u nginx) |
但这些功能不如 sysdig 全面和直观。
下面整理几个高频的应用场景,方便上手。
场景一:跟踪进程的系统调用
在排查故障时,跟踪进程行为 是最常见的手段。
通过 sysdig,你能快速了解应用程序正在执行哪些系统调用。
bash
# 通用格式
sysdig proc.name=<进程名>
# 或者
sysdig proc.pid=<进程ID>
# 以 nginx 为例
sysdig proc.name=nginx然后在另一个终端执行:
bash
curl http://10.0.34.82:8080你就能在 sysdig 中观察到请求日志,包括 三次握手的详细过程。 这比 strace 更直观。
场景二:系统性能分析
sysdig 内置了大量性能分析的命令(称为 chisels)。 常见的几个场景:
- 列出 CPU 使用最高的进程
bash
sysdig -c topprocs_cpu- 列出网络带宽占用最高的进程
bash
sysdig -c topprocs_net- 查看磁盘 I/O 最活跃的进程
bash
sysdig -c topprocs_file- 统计最耗时的系统调用
bash
sysdig -c syscalls_time- 查看网络链接
bash
sysdig -c netstart- 查看进程列表
bash
sysdig -c ps- 查看打开的进程名文件
bash
sysdig -c lsof- 统计最耗时的系统调用
bash
sysdig -c syscalls_time🔎 提示:
-c参数用来调用 sysdig 的内置脚本(chisels)。你可以运行sysdig -cl查看完整清单。
场景二:哪个目录被哪个进程打开
bash
sysdig fd.name contains /etc小结
- sysdig 是一个集 诊断 + 监控 + 性能分析 于一身的瑞士军刀。
- 学会几个常用的 chisels,基本就能替代大部分
top、iftop、strace、lsof的功能。 - 更高级的场景还能配合 Sysdig Inspect 或 Falco(安全审计)使用。
