六-r < filename >
-c < chiselname > < chiselargs >
指定打印事件时使用的格式。
-p < output_format>, --print=< output_format>,
使用-pc或-pcontainer 容器友好的格式,
使用-pk或-pkubernetes k8s友好的格式多少秒后停止收集。
-M < num_seconds >
列出可用于过滤和输出的字段。
-L, --list
抓取给定端口的数据交换
spy_port
抓取给定ip的数据交换
spy_ip
输出文件的读写数据,可以提供某个文件名作为参数
spy_file
列出网络连接情况
netsata
输出进程读写数据
echo_fds
fdcount_by 按照建立连接书对进程排序
fdcount_by 按照建立连接书对进程排序
按照网络使用情况对进程排序
topprocs_net
输出按照cpu使用率排序
topprocs_cpu
输出所有的http请求
httplog
说明
事件的参数。如果为系统调用,则对应系统调用的参数
evt.args
事件的名称,比如open、stat等,一般为系统调用
evt.type
evt.dir
thread.tid 线程id,单线程则为进程id
thread.tid 线程id,单线程则为进程id
生成事件的进程名字
proc.name
evt.num 递增的事件号
evt.cpu 事件被捕获时所在cpu
evt.cpu 事件被捕获时所在cpu
evt.time 事件发生的时间
evt.time 事件发生的时间
事件 说明
事件 说明
事件 说明
evt.num 递增的事件号
evt.num 递增的事件号
这个 SYSDIG 快速参考备忘清单显示了常用命令和配置使用清单,
注意事项:此命令需要依赖kernel-devel,且最好为系统自带的大版本,如:contso7 3.10.x,否则需要自己编译处理依赖。
1.导入官方yum源的key,下载官方draios源。
sudo rpm --import https://download.sysdig.com/DRAIOS-GPG-KEY.public
sudo curl -s -o /etc/yum.repos.d/draios.repo https://download.sysdig.com/stable/rpm/draios.repo
2.配置epel源的目的是需要安装dkms依赖包,后安装sysdig。
sudo yum install epel-release -y
sudo yum -y install sysdig
3.加载到内核中,加载成功可以查看到scap驱动模块。
sudo scap-driver-loader
参数 | 说明 |
---|---|
-L, --list | 列出可用于过滤和输出的字段。 |
-M < num_seconds > | 多少秒后停止收集。 |
-p < output_format>, --print=< output_format>, 使用-pc或-pcontainer 容器友好的格式, 使用-pk或-pkubernetes k8s友好的格式 | 指定打印事件时使用的格式。 |
-c < chiselname > < chiselargs > | 指定内置工具,可直接完成具体的数据聚合、分析工作。 |
-C 5 | 每个文件不超过5M |
-W 10 | 保留不超过10个文件 |
-G 60 | 每个文件只保留一分钟内的系统活动 |
-w dump.pcap || -w < filename > | 保存到文件 ,特定格式,要用sysdig打开。 |
-e 1000 | 每个文件只有1000个事件 |
-z | 参数对保存的内容进行压缩 |
-A --print-ascii | 把buffer中数据按照ASCII格式打印,方便阅读 |
-x --print-hex | 把buffer中数据按照十六进制打印 |
-X --printhex-ascii | 把buffer中数据同时按照ASCII格式和十六进制打印 |
-s 1024 | 捕获buffer的数据大小,默认为80,设置过大,文件会很大 |
-N | 不用把端口号转成可读名字 |
-r < filename > | 从文件读取 |
事件 | 说明 |
---|---|
evt.num | 递增的事件号 |
evt.time | 事件发生的时间 |
evt.cpu | 事件被捕获时所在cpu |
proc.name | 生成事件的进程名字 |
thread.tid | 线程id,单线程则为进程id |
evt.dir | 事件方向(direction), > 代表进入事件, < 代表退出事件 |
evt.type | 事件的名称,比如open、stat等,一般为系统调用 |
evt.args | 事件的参数。如果为系统调用,则对应系统调用的参数 |
事件 | 说明 |
---|---|
httplog | 输出所有的http请求 |
topprocs_cpu | 输出按照cpu使用率排序 |
topprocs_net | 按照网络使用情况对进程排序 |
fdcount_by | 按照建立连接书对进程排序 |
echo_fds | 输出进程读写数据 |
netsata | 列出网络连接情况 |
spy_file | 输出文件的读写数据,可以提供某个文件名作为参数 |
spy_ip | 抓取给定ip的数据交换 |
spy_port | 抓取给定端口的数据交换 |
sysdig -l #事件类型
sysdig -cl #chisels工具类型
#查看io错误最多的进程
$ sysdig -c topprocs_errors
查看io错误最多的文件
$ sysdig -c topfiles_errors
#查看磁盘io失败的调用
$ sysdig fd.type=file and evt.failed=true
#查看httpd打开失败的文件
$ sysdig "proc.name=httpd and evt.type=open and evt.failed=true"
#查看最花费时间的系统调用
sysdig -c topscalls_time
#查看系统调用失败返回最多的系统调用
sysdig -c topscalls "evt.failed=true"
#打印延迟大于1ms的文件I/O调用
sysdig -c fileslower 1
#查看使用硬盘带宽最多的进程
sysdig -c topprocs_file
#列出大量使用文件描述符的进程
sysdig -c fdcount_by proc.name "fd.type=file"
#查看读写bytes最多的文件
sysdig -c topfiles_bytes
#打印nginx进程已经读取中和写入中的文件
sysdig -c topfiles_bytes proc.name=nginx
#查看活跃中的读和写最多的目录
sysdig -c fdbytes_by fd.directory "fd.type=file"
#查看目录/tmp活跃中的读写最多的文件
sysdig -c fdbytes_by fd.filename "fd.directory=/tmp/"
#查看所有文件名为passwd的i/O活动
sysdig -A -c echo_fds "fd.filename=passwd"
#展示FD类型的活跃I/O
sysdig -c fdbytes_by fd.type
#抓取kubernetes pod 的客户端ip为172.119.110.17,3000端口的的请求内容
$ sudo sysdig -A -c echo_fds k8s.pod.name contains piller-datacenter-web-dev and fd.port=3000 and evt.type=read and fd.cip=172.119.110.17 fd.proto=UDP
#查看占用网络带宽最多的进程
sysdig -c topprocs_net
#显示主机192.168.0.1的网络传输数据
as binary:
sysdig -s2000 -X -c echo_fds fd.cip=192.168.0.1
as ASCII:
sysdig -s2000 -A -c echo_fds fd.cip=192.168.0.1
#查看连接最多的服务器端口
in terms of established connections:
sysdig -c fdcount_by fd.sport "evt.type=accept"
in terms of total bytes:
sysdig -c fdbytes_by fd.sport
#查看客户端连接最多的ip
in terms of established connections
sysdig -c fdcount_by fd.cip "evt.type=accept"
in terms of total bytes
sysdig -c fdbytes_by fd.cip
#列出所有不是访问apache服务的访问连接
sysdig -p"%proc.name %fd.name" "evt.type=accept and proc.name!=httpd"
#显示 wordpress1 容器在端口 80 上发送和接收的数据:
sysdig -A -cecho_fds container.name=wordpress1 and fd.port=80
#实时打印 mysql 容器接收的所有新连接
sysdig -p"%fd.name" container.name=mysql and evt.type=accept
#查看哪些文件花费时间做多
sysdig -c topfiles_time
#查看httpd进程哪些文件花费最多时间
sysdig -c topfiles_time proc.name=httpd
#查看io错误最多的进程
sysdig -c topprocs_errors
#查看io错误最多的文件
sysdig -c topfiles_errors
#查看磁盘io失败的调用
sysdig fd.type=file and evt.failed=true
#查看httpd打开失败的文件
sysdig "proc.name=httpd and evt.type=open and evt.failed=true"
#查看最花费时间的系统调用
sysdig -c topscalls_time
#查看系统调用失败返回最多的系统调用
sysdig -c topscalls "evt.failed=true"
#查看打开文件失败
sysdig -p "%12user.name %6proc.pid %12proc.name %3fd.num %fd.typechar %fd.name" evt.type=open and evt.failed=true
#打印延迟大于1ms的文件I/O调用
sysdig -c fileslower 1
采集数据示例:
59509 23:59:19.023099531 0 kubelet (1738) < epoll_ctl
采集数据格式:
%evt.num %evt.outputtime %evt.cpu %proc.name (%thread.tid) %evt.dir %evt.type %evt.info
字段说明:
evt.num: 递增的事件号。
evt.time: 事件发生的时间。
evt.cpu: 事件被捕获时所在的 CPU,也就是系统调用是在哪个 CPU 执行的。
proc.name: 生成事件的进程名字。
thread.tid: 线程的 id,如果是单线程的程序,这也是进程的 pid。
evt.dir: 事件的方向(direction),> 代表进入事件,< 代表退出事件。
evt.type: 事件的名称,比如 open、stat等,一般是系统调用。
evt.args: 事件的参数。如果是系统调用,这些对应着系统调用的参数
65611 05:29:20.772919597 1 sshd (22944.22944) > write fd=3(<4t>192.168.130.1:58986->192.168.130.147:22) size=4148
第一列(65611):事件编号,从1开始记录。
第二列(05:29:20.772919597):时间。
第三列(1):进程当前工作所在的cpu编号,从0开始。
第四列(sshd):进程名称。
第五列(22944.22944) :括号里是线程id,两个数值相同说明就一个线程。
第六列( > ): 进入事件,<代表退出事件。
第七列(write):事件名称。
第八列:事件信息,fd=3 是指打开的文件描述符是3,这里就是建立了一条TCP链接。
sysdig -M 1 -p "%evt.num,%evt.cpu"
sysdig常用过滤目标:
fd:根据文件描述符过滤,比如 fd 标号(fd.num)、fd 名字(fd.name)
process:根据进程信息过滤,比如进程 id(proc.id)、进程名(proc.name)
evt:根据事件信息过滤,比如事件编号、事件名
user:根据用户信息过滤,比如用户 id、用户名、用户 home 目录
syslog:根据系统日志过滤,比如日志的严重程度、日志的内容
container:根据容器信息过滤,比如容器ID、容器名称、容器镜像
支持运算操作符:
=、!=、>=、>、<、<=、contains、in 、exists、and、or、not
sysdig proc.name=kubelet
sysdig proc.name=nginx
tcp三次握手时,有个标识是accept。
sysdig evt.type=accept
sysdig fd.name=/etc
sysdig fd.name contains /etc
Chisels是个实用的工具箱,一组预定义的功能集合,用来分析特定的场景。
sysdig –cl 列出所有Chisels,常用的如下:
topprocs_cpu:输出按照 CPU 使用率排序的进程列表
topprocs_net:输出进程使用网络TOP
topprocs_file:进程读写磁盘文件TOP
topfiles_bytes:读写磁盘文件TOP
netstat:列出网络的连接情况
sysdig -c topprocs_net 查看使用网络的进程TOP
sysdig -c fdcount_by fd.sport “evt.type=accept” -M 10 查看建立连接的端口
sysdig -c fdbytes_by fd.sport 查看建立连接的端口
sysdig -c fdcount_by fd.cip “evt.type=accept” -M 10 查看建立连接的IP
sysdig -c fdbytes_by fd.cip 查看建立连接的IP
sysdig -c topprocs_file 查看进程磁盘I/O读写
sysdig -c fdcount_by proc.name “fd.type=file” -M 10 查看进程打开的文件描述符数量
sysdig -c topfiles_bytes||sysdig -c topfiles_bytes proc.name=etcd 查看读写磁盘文件
sysdig -c fdbytes_by fd.filename “fd.directory=/tmp/” 查看/tmp目录读写磁盘活动文件
sysdig -c topprocs_cpu 查看CPU使用率TOP
sysdig -pc -c topprocs_cpu container.name=web 查看容器CPU使用率TOP
sysdig -pc -c topprocs_cpu container.id=web 查看容器CPU使用率TOP
csysdig –vcontainers 查看机器上容器列表及资源使用情况
sysdig -c topcontainers_cpu/topcontainers_net/topcontainers_file 查看容器资源使用TOP
1.查看当前系统cpu使用占比最高的进程。
sysdig -c topprocs_cpu
2.查看网络。
sysdig -c topprocs_net
3.查看哪些进程在磁盘读写。
sysdig -c topprocs_file
4.查看哪些文件在磁盘读写。
sysdig -c topfiles_bytes
5.查看端口被链接的数量。
sysdig -c fdcount_by fd.sport
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。