sysdig 简介
官方介绍:Open Source Universal System Visibility With Native Container Support.
sysdig 定位为系统监控、分析和排障工具。在 Linux 平台上,已有 strace、tcpdump、htop、iftop、lsof、netstat 等工具分析系统运行情况,但 sysdig 具有整合、强大、灵活的优势。
sysdig 是一款开源系统可视化工具,支持原生容器,具备整合、强大、灵活特性。通过内核驱动注册系统调用钩子,捕获 CPU、内存、IO 等数据。安装需满足内核版本,容器模式需挂载主机目录。支持实时监控、事件过滤、自定义输出及文件保存分析。内置 Chisels 工具集处理 HTTP 日志、进程排序等场景,支持 Docker 和 Kubernetes 集成。csysdig 提供终端交互界面。适用于 Linux 系统性能分析与故障排查。

官方介绍:Open Source Universal System Visibility With Native Container Support.
sysdig 定位为系统监控、分析和排障工具。在 Linux 平台上,已有 strace、tcpdump、htop、iftop、lsof、netstat 等工具分析系统运行情况,但 sysdig 具有整合、强大、灵活的优势。
Linux 系统分析工具通常负责特定功能且使用方式差异大,数据无法共享。sysdig 一个工具即可实现上述所有工具的功能,并提供统一的使用语法。
sysdig 能获取实时系统数据,也能保存信息到文件供后续分析。捕获的数据包含系统各个方面:
除了捕获信息,sysdig 还预置有用工具分析数据。例如:
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 就能开始捕获系统信息,该命令需要系统管理员权限,执行后终端会有持续不断的输出流。
$ 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:事件方向,> 代表进入事件,< 代表退出事件evt.type:事件名称,如 open、stat 等,一般是系统调用evt.args:事件参数完整使用方法:
sysdig [option]... [filter]
sysdig 过滤器分成不同类别:
fd: 文件描述符过滤process: 进程信息过滤evt: 事件信息过滤user: 用户信息过滤syslog: 系统日志过滤fdlist: poll event 的文件描述符过滤完整过滤器列表可用 sysdig -l 查看。例如建立 TCP 连接的事件:
sudo sysdig evt.type=accept
过滤器支持 =、!=、>=、>、<、<=、contains、in 和 exists 等操作符。
$ sysdig fd.name contains /etc
$ sysdig "evt.type in ( 'select', 'poll' )"
$ sysdig proc.name exists
多个条件可通过 and、or 和 not 组合:
$ sysdig "not (fd.name contains /proc or fd.name contains /dev)"
标准输出已打印常用信息,sysdig 允许自定义打印内容,参数 -p 可加上类似 C 语言 printf 字符串。
$ sysdig -p"user:%user.name dir:%evt.arg.path" evt.type=chdir
字段必须用 % 作为前缀。如果某字段不存在,默认该事件会被过滤掉,在字符串最前面加上 * 符号会打印所有事件,不存在的字段变成 <NA>。
$ sysdig -p"*%evt.type %evt.dir %evt.arg.name" evt.type=open
直接终端查看事件流难以深入分析。sysdig 允许把捕获时间保存到本地文件,再读取分析。
保存到文件通过 -w 实现,从文件中读取需 -r 参数:
# 捕获事件,并保存到文件中
$ sudo sysdig -w sysdig-trace-file.scap
# 从文件中读取 sysdig 格式的事件进行分析
$ sudo sysdig -r sysdig-trace-file.scap
控制捕获文件大小可通过过滤器或参数:
sysdig -C 5 -W 10 -w dump.pcap:每个文件不超过 5M,只保存最近 10 个文件sysdig -G 60 -W 60 -w dump.pcap:每个文件只保存一分钟内的系统活动,只保存 60 个文件sysdig -e 1000 -W 5 -w dump.scap:保存 5 个文件,每个文件只有 1000 个事件使用 -w 保存文件时,还可使用 -z 参数压缩内容。
读取时也可使用过滤器:
$ sysdig -r sysdig-trace-nano.scap evt.type=write
-A --print-ascii:把 buffer 中数据按照 ASCII 格式打印-x --print-hex:把 buffer 中数据按照十六进制格式打印-X --print-hex-ascii:同时按照 ASCII 和十六进制格式打印-s 1024:捕获 buffer 的数据大小,默认为 80-N:不用把端口号转换成可读的名字,提高效率Chisels 是一组预定义的功能集合,通过 Lua 脚本实现,用来分析特定场景。
列出支持的 chisels:
sudo sysdig -cl
常用 chisels:
httplog:输出所有的 HTTP 请求topprocs_cpu:输出按照 CPU 使用率排序的进程列表echo_fds:输出进程读写的数据netstat:列出网络的连接情况spy_file:输出文件的读写数据了解具体使用说明可用 -i 参数:
$ sudo sysdig -i spy_file
示例:
sysdig -c topprocs_netsysdig -c fdcount_by fd.sport "evt.type=accept"sysdig -r sysdig.pcap -c spy_users在 Linux 机器上,这些 chisels 保存在 /usr/share/sysdig/chisels 文件夹中。
sysdig 对容器(docker 和 kubernetes)有良好支持。
使用 -pc 参数自动在打印的事件中添加容器信息:
$ sysdig -pc container.name=zen_knuth
集成 Kubernetes 系统监控的话,使用 -k http://master_ip:8080 参数,后面是 apiserver 的地址。如果需要认证,指定 -K filename 说明 apiserver CA 证书的文件地址。
sysdig 还提供了图形化工具 Csysdig,界面和 top/htop 命令相似,接受用户交互。
和 sysdig 一样,csysdig 可以实时捕获系统事件,也可以读取之前保存的文件。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online