目录
Sysdig介绍:
sysdig工作流程
安装Sysdig
sysdig常用参数:
sysdig过滤:
sysdig之Chisels(工具箱):
其他常用命令
Sysdig介绍:
Sysdig是一个非常强大的系统监控分析和故障排查工具。汇聚strace+tcpdump+iftop+lsof工具功能为一身。
sysdig除了能获取系统资源利用率、进程、网络连接、系统调等信息,还具备了很强的分析能力,例如:
1.按照CPU使用率对进程排序
2.按照数据包对进程排序
3.打开最多文件描述符进程
4.查看进程打开了哪些文件
5.查看进程HTTP请求报文
6.查看机器上容器列表及资源使用情况
项目地址:https://github.com/draios/sysdig
文档:https://github.com/draios/sysdig/wiki
sysdig工作流程
sysdig通过内核的驱动模块注册系统调用hook,这样当有系统调用发生和完成的时候,它会把系统调用信息拷贝到特定的bugger,然后用户态组件对数据信息处理(解压、解析、过滤等,)并最终通过sysdig命令行和用户进行交互
在内核中加入了模块,通过该模块获取了系统调用的信息,该模块类似与拦截器,当有系统调用时,就会把系统调用所涉及的信息捕捉,用户层面的模块会对该数据就行解析过滤。
安装Sysdig
先升级下内核
【】yum -y install kernel-3.10.0-1160.el7.x86_64
【】yum -y install kernel-devel-3.10.0-1160.el7.x86_64
【】awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
【】grub2-set-default 0
自动安装
curl -s https://download.sysdig.com/stable/install-sysdig | sudo bash
上面是一个shell 脚本,会识别常用的linux发行版本,并根据对应的版本配置源,最后是安装sysdig包。在redhat/centos上首先会配置的是epel 源 ,配置该源的目的是安装dkms包;然后会配置draios源,通过该源可以安装sysdig包。最后在装sysdig包之前还会先安装kernel-devel包。
手动安装
默认源里少个依赖需要repo源
【】rpm --import https://download.sysdig.com/DRAIOS-GPG-KEY.public
【】curl -s -o /etc/yum.repos.d/draios.repo https://download.sysdig.com/stable/rpm/draios.repo
【】yum install epel-release -y
【】yum install sysdig -y
【】yum -y install kernel-devel-$(uname -r)
【】/usr/bin/sysdig-probe-loader # 加载驱动模块
执行sysdig命令,实时输出大量系统调用。
示例: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: 事件的参数。如果是系统调用,这些对应着系统调用的参数
自定义格式输出:sysdig -p "user:%user.name time:%evt.time proc_name:%proc.name"
sysdig -l列出支持字段
sysdig常用参数:
sysdig命令直接执行后显示的是个进程对linux的系统调用
• -l, --list:列出可用于过滤和输出的字段
• -M <num_seconds> :多少秒后停止收集
• -p <output_format>, --print=<output_format> :指定打印事件时使用的格式
• 使用-pc或-pcontainer 容器友好的格式
• 使用-pk或-pkubernetes k8s友好的格式
• -c <chiselname> <chiselargs>:指定内置工具,可直接完成具体的数据聚合、分析工作
• -w <filename>:保存到文件中
• -r <filename>:从文件中读取
sysdig过滤:
• fd:根据文件描述符过滤,比如 fd 标号(fd.num)、fd 名字(fd.name)
• process:根据进程信息过滤,比如进程 id(proc.id)、进程名(proc.name)
• evt:根据事件信息过滤,比如事件编号、事件名
• user:根据用户信息过滤,比如用户 id、用户名、用户 home 目录
• syslog:根据系统日志过滤,比如日志的严重程度、日志的内容
• container:根据容器信息过滤,比如容器ID、容器名称、容器镜像
示列:
1、查看一个进程的系统调用
【】sysdig proc.name=kubelet
2、查看建立TCP连接的事件
【】sysdig evt.type=accept
3、查看/etc目录下打开的文件描述符
【】sysdig fd.name contains /etc
4、查看容器的系统调用
【】docker run -d --name=web --image=nginx
【】sysdig -M 10 container.name=web
注:还支持运算操作符,=、!=、>=、>、<、<=、contains、in 、exists、and、or、not
被黑后可用观察资源占用大的节点,通过sysdig对容器逐个分析
sysdig之Chisels(工具箱):
Chisels:实用的工具箱,一组预定义的功能集合,用来分析特定的场景。
sysdig –cl 列出所有Chisels,以下是一些常用的:
• topprocs_cpu:输出按照 CPU 使用率排序的进程列表,例如sysdig -c
• topprocs_net:输出进程使用网络TOP
• topprocs_file:进程读写磁盘文件TOP
• topfiles_bytes:读写磁盘文件TOP
• netstat:列出网络的连接情况
网络 | # 查看使用网络的进程TOP sysdig -c topprocs_net # 查看建立连接的端口10秒内 sysdig -c fdcount_by fd.sport "evt.type=accept" -M 10 # 查看建立连接的端口10秒内 sysdig -c fdbytes_by fd.sport # 查看建立连接的IP10秒内 sysdig -c fdcount_by fd.cip "evt.type=accept" -M 10 # 查看建立连接的IP sysdig -c fdbytes_by fd.cip |
硬盘 | # 查看进程磁盘I/O读写 sysdig -c topprocs_file # 查看进程打开的文件描述符数量 sysdig -c fdcount_by proc.name "fd.type=file" -M 10 # 查看读写磁盘文件 sysdig -c topfiles_bytes sysdig -c topfiles_bytes proc.name=etcd # 查看/tmp目录读写磁盘活动文件 sysdig -c fdbytes_by fd.filename "fd.directory=/tmp/" |
CPU | # 查看CPU使用率TOP sysdig -c topprocs_cpu # 查看容器CPU使用率TOP sysdig -pc -c topprocs_cpu container.name=web sysdig -pc -c topprocs_cpu container.id=web |
容器 | # 查看机器上容器列表及资源使用情况 csysdig –vcontainers # 查看容器资源使用TOP CPU net file sysdig -c topcontainers_cpu/topcontainers_net/topcontainers_file |
其他常用命令
csysdig #图形化所有进程
sysdig -c netstat #查看所有网络连接
sysdig -c ps #类似于os命令
sysdif -c lsof #查看所有打开的文件