Skip to content

直呼“卧槽”的诊断工具:Sysdig

Sysdig 是一款功能强大的 系统诊断与监控工具
有了它,你几乎可以替代掉 topiftoplsofstrace 等常见工具,快速完成 性能分析故障排查

安装

你遇到了这个错误:

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 sysdig
CentOS / 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)。 常见的几个场景:

  1. 列出 CPU 使用最高的进程
bash
sysdig -c topprocs_cpu
  1. 列出网络带宽占用最高的进程
bash
sysdig -c topprocs_net
  1. 查看磁盘 I/O 最活跃的进程
bash
sysdig -c topprocs_file
  1. 统计最耗时的系统调用
bash
sysdig -c syscalls_time
  1. 查看网络链接
bash
sysdig -c netstart
  1. 查看进程列表
bash
sysdig -c ps
  1. 查看打开的进程名文件
bash
sysdig -c lsof
  1. 统计最耗时的系统调用
bash
sysdig -c syscalls_time

🔎 提示:-c 参数用来调用 sysdig 的内置脚本(chisels)。你可以运行 sysdig -cl 查看完整清单。

场景二:哪个目录被哪个进程打开

bash
sysdig fd.name contains /etc

小结

  • sysdig 是一个集 诊断 + 监控 + 性能分析 于一身的瑞士军刀。
  • 学会几个常用的 chisels,基本就能替代大部分 topiftopstracelsof 的功能。
  • 更高级的场景还能配合 Sysdig InspectFalco(安全审计)使用。

参考链接

Released under the MIT License.