目录
Sysdig 是一款功能强大的 Linux 系统监控与分析工具,专为实时跟踪系统调用(system calls)和诊断系统故障设计。它整合了 strace、tcpdump、lsof 等多个传统工具的功能,提供统一的命令行接口,广泛应用于系统监控、资源优化和故障排查场景,尤其在容器环境(如 Docker 和 Kubernetes)中表现出色。
1. 安装方法
- 官方脚本安装(推荐)
curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | sudo bash- 注意:网络不稳定时可多次尝试,脚本支持主流Linux发行版(如Ubuntu/CentOS)。
2. 核心功能操作
2.1 基础命令格式
sysdig [选项] [过滤表达式]
2.1.1 核心选项
| 选项 | 作用 |
|---|---|
-s 字节数 | 限制每行输出字节数(避免日志过大) |
-w 文件.scap | 捕获系统状态并保存为文件(仅sysdig可解析) |
-r 文件.scap | 读取已保存的捕获文件进行分析 |
-c 凿子名称 | 调用预设的分析脚本(Chisel) |
-l | 列出所有可用凿子脚本 |
2.1.2 常用过滤字段
| 字段 | 示例值 | 用途 |
|---|---|---|
proc.name | nginx | 按进程名过滤 |
evt.type | read, write | 按系统调用类型过滤 |
fd.port | 80, 3306 | 按网络端口过滤 |
fd.directory | /etc | 按文件目录过滤 |
container.id | abcd1234 | 按容器ID过滤 |
3. 应用场景
3.1 基础应用
3.1.1 实时监控所有系统调用
sudo sysdig
- 输出说明:每行显示一个系统调用事件,包含进程名、CPU、文件/网络操作等原始数据(按
Ctrl+C停止)。
3.1.2 按进程名过滤
sudo sysdig proc.name=nginx # 只跟踪Nginx进程
3.1.3 按系统调用类型过滤
sudo sysdig evt.type=open # 仅跟踪文件打开操作
sudo sysdig evt.type=connect # 仅跟踪网络连接
3.1.4 数据保存与回放
3.1.4.1 捕获到文件
sudo sysdig -w trace.scap # 保存为.scap文件
- 注意:文件较大时用
-s 1024限制每事件记录大小。
3.1.4.2 离线分析
sudo sysdig -r trace.scap "proc.name=python" # 从文件过滤数据
3.2 高级过滤与分析
3.2.1 组合过滤条件
sudo sysdig "proc.name=nginx and evt.type=accept and fd.port=80"
- 解释:监控Nginx进程在80端口的连接接受事件。
3.2.2 输出字段定制
sudo sysdig -p"%evt.time %proc.name %fd.name" evt.type=read
- 字段说明:
%evt.time:事件时间戳%proc.name:进程名%fd.name:操作的文件/网络描述符
3.2.3 统计高频调用
sudo sysdig -c topscalls # 显示最频繁的系统调用
3.3 容器环境跟踪
3.3.1 监控特定容器
sudo sysdig -p container.name=my_container
3.3.2 监控容器网络流量
- 选项:
-p自动解析容器信息。
sudo sysdig -c topprocs_net container.name=容器名

3.3.3 跟踪目标容器的文件活动
sudo sysdig -c topfiles_bytes container.name=容器名

3.3.4 显示CPU使用率最高的容器
sudo sysdig -c bottlenecks
sudo sysdig -c topcontainers_cpu

- 对整体系统:优先用
bottlenecks。 - 对容器集群:先用
topcontainers_cpu筛选容器,再用bottlenecks细化。
3.3.5 跟踪容器内文件访问
sudo sysdig -p "container.id=abcd1234 and evt.type=open"
3.3.6 容器内进程CPU排名
sudo sysdig -c topprocs_cpu container.name=<容器名>
3.4 定位文件泄露
sudo sysdig "evt.type=open and proc.name!=lsof and fd.name contains /tmp"
- 作用:监控非
lsof进程对/tmp目录的异常文件访问。
3.5 分析慢SQL查询
sudo sysdig -c fileslower 1000 # 显示耗时>1秒的文件I/O
3.6 追踪网络连接问题
sudo sysdig "evt.type=connect and fd.port=3306 and proc.name=app"
- 用途:排查应用连接MySQL(3306端口)的失败请求。
3.7 自定义聚合分析--捕获延迟>1ms的读写
sudo sysdig -p"%proc.name %fd.name %evt.latency" "evt.type in (read,write) and evt.latency > 1000000"
3.8 离线分析与性能审计
3.8.1 捕获数据供深度分析
sudo sysdig -s 4096 -w cpu_high.scap # 保存完整调用数据
- 参数说明:
-s 4096:增大捕获缓冲区-w:保存为Sysdig专用格式
3.8.2 离线分析热点
sudo sysdig -r cpu_high.scap -c topscalls_time

sudo sysdig -r cpu_high.scap -c spectrogram # 生成CPU负载时间分布图

3.9 典型问题定位流程
案例:Nginx容器CPU飙升
- 定位问题容器:
sudo sysdig -pc -c topcontainers_cpu - 分析容器内进程:
sudo sysdig -pc -c topprocs_cpu container.name=nginx - 追踪具体调用:
sudo sysdig -pc "container.name=nginx and proc.name=worker" \ -p"%syscall.type %evt.latency %fd.name" - 发现瓶颈:
- 若输出显示
epoll_wait延迟高 → 网络连接数过多 - 若
write调用频繁 → 检查日志写入量
- 若输出显示
1199

被折叠的 条评论
为什么被折叠?



