运维:系统性能占用检查sysdig命令(Linux系统铁锹)

目录

sysdig

命令安装

常用参数

输出含义

chisels常用工具

命令帮助

常用查看IO占用命令

常用查看网络占用命令

常用查看进程占用命令

常用总结

采集分析

采集系统调用事件

自定义过滤条件采集数据,对系统调用的事件编号和cpu进行采集1秒

实例

查看某进程系统调用事件

查看kubelet进程的系统调用

查看nginx进程的系统调用

查看建立TCP连接事件

查看某目录下打开的文件描述符

查看/etc/当前目录下打开的文件描述符

查看/etc/目录下所有目录打开的文件描述符

Chisels工具

网络类

硬盘类

cpu类

容器类

实例

1.查看当前系统cpu使用占比最高的进程

2. 查看网络

3.查看哪些进程在磁盘读写

4.查看哪些文件在磁盘读写

5.查看端口被链接的数量


sysdig

命令安装

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

事件的参数。如果为系统调用,则对应系统调用的参数

chisels常用工具

事件

说明

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占用命令

#查看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链接。

自定义过滤条件采集数据,对系统调用的事件编号和cpu进行采集1秒

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

查看某进程系统调用事件

查看kubelet进程的系统调用
sysdig proc.name=kubelet
查看nginx进程的系统调用
sysdig proc.name=nginx

查看建立TCP连接事件

tcp三次握手时,有个标识是accept

sysdig evt.type=accept

查看某目录下打开的文件描述符

查看/etc/当前目录下打开的文件描述符
sysdig fd.name=/etc

查看/etc/目录下所有目录打开的文件描述符
sysdig fd.name contains /etc

Chisels工具

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目录读写磁盘活动文件
cpu类
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨痕诉清风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值