CentOS 7 安装使用 Sysdig 教程(通用安装 + Docker 方式)
前言
Sysdig 是 Linux 系统的全栈可见性工具,可以捕获、解析和分析系统调用和事件,相当于 strace + tcpdump + htop + iftop + wireshark 的综合体。本文介绍在 CentOS 7 上安装和使用 Sysdig 的两种方式:直接安装和 Docker 方式。
一、什么是 Sysdig
Sysdig 是一个开源的系统监控工具,具有以下特点:
- 支持捕获系统调用、文件操作、网络活动
- 提供高级过滤语法(类似 Wireshark)
- 内置
csysdig交互式界面 - 支持容器级别的监控(Docker/Kubernetes)
- 可通过 Lua 编写自定义插件
二、安装方式一:直接安装(通用方式)
2.1 一键安装(推荐方式)
# 推荐的一键安装方式,自动完成所有配置
curl -s https://download.sysdig.com/stable/install-sysdig | bash
2.2 手动分步安装
如果一键脚本不生效,可以按以下步骤手动配置:
Step 1 - 导入 GPG 密钥并添加仓库
# 导入 Draios GPG 密钥
rpm --import https://download.sysdig.com/DRAIOS-GPG-KEY.public
# 添加 Draios YUM 仓库
curl -s -o /etc/yum.repos.d/draios.repo https://download.sysdig.com/stable/rpm/draios.repo
Step 2 - 安装 EPEL 仓库
# CentOS 7 安装 EPEL 仓库(如果 DKMS 不可用)
yum install -y epel-release
# 验证 DKMS 是否可用
yum list dkms
Step 3 - 安装内核开发包
# 安装与当前内核版本匹配的内核开发包
yum install -y kernel-devel-$(uname -r)
Step 4 - 安装 Sysdig
yum install -y sysdig
2.3 验证安装
# 查看版本
sysdig --version
# 查看帮助
sysdig --help
2.4 内核模块自动加载
首次运行 Sysdig 时会自动编译并加载内核模块:
# 测试运行(会触发内核模块编译)
sysdig proc.name=sshd
# 查看加载的内核模块
lsmod | grep sysdig
# 查看内核模块信息
modinfo sysdig
三、安装方式二:Docker 方式
3.1 前置要求
- 已安装 Docker
- 需要 privileged 权限运行容器(因为要访问内核)
3.2 使用官方 Docker 镜像
# 运行交互式 csysdig 界面(csysdig 已包含在 sysdig/sysdig 镜像中)
docker run -it --rm \
--name sysdig \
--privileged \
-v /var/run/docker.sock:/host/var/run/docker.sock \
-v /dev:/host/dev \
-v /proc:/host/proc:ro \
-v /boot:/host/boot:ro \
-v /lib/modules:/host/lib/modules:ro \
-v /usr:/host/usr:ro \
-v /etc:/host/etc:ro \
sysdig/sysdig \
csysdig
3.3 使用 sysdig 命令行
# 捕获系统事件到文件
docker run -it --rm \
--name sysdig \
--privileged \
-v /var/run/docker.sock:/host/var/run/docker.sock \
-v /dev:/host/dev \
-v /proc:/host/proc:ro \
-v /boot:/host/boot:ro \
-v /lib/modules:/host/lib/modules:ro \
-v /usr:/host/usr:ro \
-v /etc:/host/etc:ro \
sysdig/sysdig \
sysdig -w /tmp/capture.scap
# 读取捕获文件
docker run -it --rm \
--name sysdig \
--privileged \
-v /tmp/capture.scap:/tmp/capture.scap \
sysdig/sysdig \
sysdig -r /tmp/capture.scap
# 实时监控容器网络活动
docker run -it --rm \
--name sysdig \
--privileged \
-v /var/run/docker.sock:/host/var/run/docker.sock \
-v /dev:/host/dev \
-v /proc:/host/proc:ro \
-v /boot:/host/boot:ro \
-v /lib/modules:/host/lib/modules:ro \
-v /usr:/host/usr:ro \
-v /etc:/host/etc:ro \
sysdig/sysdig \
sysdig -c topcontainers_net
四、常用命令和用法
4.1 实时监控命令
# 列出所有可用 chisel(内置分析脚本)
sysdig -cl
# 查看特定 chisel 的详细信息
sysdig -i topfiles_total
# 实时显示 CPU 使用最高的进程
sysdig -c topprocs_cpu
# 实时显示网络连接
sysdig -c netcuts
# 显示文件 I/O 最高的进程
sysdig -c topfiles_bytes
4.2 过滤语法
Sysdig 使用类似 Wireshark 的过滤语法:
# 监控特定进程
sysdig proc.name=nginx
# 监控特定用户的所有操作
sysdig user.name=root
# 监控文件读写
sysdig fd.type=file and (evt.is_write=true)
# 监控网络连接
sysdig fd.type=ipv4 and evt.rawres>=0
# 监控 HTTP 请求
sysdig -c httplog
# 监控 DNS 查询
sysdig -c dnsqueries
# 组合过滤:监控 root 用户的网络写操作
sysdig user.name=root and fd.type=ipv4 and evt.is_write=true
4.3 保存和回放捕获
# 保存捕获到文件(最大 1GB)
sysdig -w capture.scap
# 保存并限制文件大小
sysdig -W 10 -w capture.scap # 每个文件 10MB,自动滚动
# 按文件大小或时间滚动
sysdig -G 3600 -W 5 -w capture.scap # 每小时一个文件,保留 5 个
# 回放捕获
sysdig -r capture.scap
# 回放时应用过滤
sysdig -r capture.scap proc.name=nginx
4.4 容器相关监控
# 显示容器列表
sysdig -c lscontainers
# 显示容器 CPU 使用排名
sysdig -c topcontainers_cpu
# 显示容器 I/O 排名
sysdig -c topcontainers_file
# 监控特定容器
sysdig container.id=xxxxx
# 显示容器网络活动
sysdig -c topcontainers_net
# 监控容器间的通信
sysdig -c fdcount_by container.name evt.rawres>=0
五、高级用法
5.1 自定义 Chisel 脚本
Sysdig 支持用 Lua 编写自定义分析脚本:
# 创建自定义 chisel
cat > /tmp/my_chisel.lua << 'EOF'
-- 监控所有写入敏感目录的操作
sensitivity_dirs = {
"/etc/",
"/usr/bin/",
"/usr/sbin/"
}
function onbuffer_init(buffer)
-- 初始化
end
function onbuffer_event(buffer)
-- 获取事件信息
local evt = buffer:get evt()
local pid = evt:get(pid)
local comm = evt:get(comm)
local fd = evt:get(fd)
-- 检查是否为写操作
if evt:get(is_write) then
local filename = fd:get_name()
for _, dir in ipairs(sensitivity_dirs) do
if string.find(filename, dir) then
print(string.format("[ALERT] %s (PID %d) wrote to sensitive: %s",
comm, pid, filename))
end
end
end
end
sensitivity_dirs = nil
collectgarbage()
EOF
# 运行自定义 chisel
sysdig -c /tmp/my_chisel.lua
5.2 输出格式化
# JSON 格式输出(便于后续分析)
sysdig -j -w capture.scap
# 从 JSON 文件提取信息
sysdig -r capture.scap -j | jq '. | select(.proc.name=="nginx")'
# 只输出特定字段
sysdig -p "%evt.time %user.name %proc.name %fd.name" proc.name=nginx
六、故障排查示例
6.1 排查服务器卡顿
# 1. 查看 CPU 使用最高的进程
sysdig -c topprocs_cpu
# 2. 查看 I/O 最高的文件
sysdig -c topfiles_file
# 3. 查看网络流量异常
sysdig -c topconnections
# 4. 查看系统调用耗时
sysdig -c spectrogram
6.2 排查网络问题
# 查看所有网络连接
sysdig -c netstat
# 查看 DNS 查询
sysdig -c dnsqueries
# 查看 HTTP 请求
sysdig -c httplog
# 查看谁在连接某个端口
sysdig fd.port=80 and fd.type=ipv4
6.3 排查容器问题
# 查看所有容器资源使用
sysdig -c topcontainers_cpu
sysdig -c topcontainers_net
# 查看特定容器的所有系统调用
sysdig container.name=myapp
# 查看容器内进程网络活动
sysdig -c topcontainers_net container.name=myapp
七、常见问题
7.1 内核模块加载失败
# 检查内核版本
uname -r
# 确保内核-devel 包版本匹配
yum install -y kernel-devel-$(uname -r)
# 手动编译内核模块
sysdig-probe-loader
7.2 Docker 方式权限问题
# 确保使用 --privileged 或添加 CAP_SYS_ADMIN
docker run --rm --privileged -v /var/run/docker.sock:/host/var/run/docker.sock \
sysdig/sysdig sysdig -c topprocs_cpu
# 或者挂载必要的设备
docker run --rm \
--cap-add SYS_ADMIN \
--security-opt apparmor:unconfined \
-v /var/run/docker.sock:/host/var/run/docker.sock \
sysdig/sysdig sysdig -c topprocs_cpu
7.3 性能影响
Sysdig 默认对系统性能影响较小,但大量捕获时建议:
- 使用过滤器限制捕获范围
- 设置合理的文件大小滚动
- 生产环境优先使用 Docker 方式,便于隔离
- 避免长时间捕获大流量场景
八、总结
Sysdig 是 Linux 系统监控的瑞士军刀,无论是直接安装在主机上,还是通过 Docker 容器运行,都能提供强大的系统可见性。推荐:
- 直接安装:适合需要深入系统内核的场景,性能最好
- Docker 方式:适合快速部署、隔离环境、容器化运维场景
掌握 Sysdig 的过滤语法和常用 chisel,可以大大提高故障排查和性能分析的效率。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。



