sysdig 简介
官方介绍:Open Source Universal System Visibility With Native Container Support.
sysdig 定位为系统监控、分析和排障工具。在 Linux 平台上,已有 strace、tcpdump、htop、iftop、lsof、netstat 等工具分析系统运行情况,但 sysdig 具有整合、强大、灵活的优势。
整合
Linux 系统分析工具通常负责特定功能且使用方式差异大,数据无法共享。sysdig 一个工具即可实现上述所有工具的功能,并提供统一的使用语法。
强大
sysdig 能获取实时系统数据,也能保存信息到文件供后续分析。捕获的数据包含系统各个方面:
- 全方面系统参数:CPU、memory、Disk IO、网络 IO
- 支持各种 IO 活动:进程、文件、网络连接等
除了捕获信息,sysdig 还预置有用工具分析数据。例如:
- 按 CPU 使用率对进程排序
- 按发送网络数据报文多少对进程排序
- 找到打开最多文件描述符的进程
- 查看哪些进程修改了指定文件
- 打印出某个进程的 HTTP 请求报文
- 找到用时最久的系统调用
- 查看系统中所有用户执行的命令
灵活
sysdig 拥有类似 tcpdump 的过滤语法,用户可随意组合过滤逻辑。此外,用户还可以编写 Lua 脚本自定义分析逻辑。
工作原理
sysdig 通过在内核驱动模块注册系统调用的 hook,当系统调用发生和完成时,将信息拷贝到特定 buffer,用户模块组件处理(解压、解析、过滤等),最终通过命令行与用户交互。
除 sysdig 命令外,还有基于终端的 UI 命令 csysdig,类似于 top 命令,定时刷新系统情况并允许交互。本文主要介绍 sysdig。
安装
sysdig 安装有详细说明,需注意其对内核版本有一定要求,请保证内核不要太旧。
如果使用容器方式安装,需要把主机的很多系统目录 mount 到容器中:
docker run -i -t --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 sysdig/sysdig
sysdig 基本用法
基本格式
直接在终端输入 sysdig 就能开始捕获系统信息,该命令需要系统管理员权限,执行后终端会有持续不断的输出流。
$ sudo sysdig
系统每时每刻都有大量系统调用产生,难以看清分析,可使用 CTRL + C 退出。
输出格式默认如下:
%evt.num %evt.outputtime %evt.cpu %proc.name (%thread.tid) %evt.dir %evt.type %evt.info
各字段含义:
evt.num:递增的事件号evt.time:事件发生的时间evt.cpu:事件被捕获时所在的 CPUproc.name:生成事件的进程名字thread.tid:线程的 id,单线程程序下也是进程 pidevt.dir:事件方向, 代表进入事件, 代表退出事件


