目錄
Sysdig介紹:
sysdig工作流程
安裝Sysdig
sysdig常用參數(shù):
sysdig過濾:
sysdig之Chisels(工具箱):
其他常用命令
Sysdig介紹:
?????? Sysdig是一個(gè)非常強(qiáng)大的系統(tǒng)監(jiān)控分析和故障排查工具。匯聚strace+tcpdump+iftop+lsof工具功能為一身。
?????? sysdig除了能獲取系統(tǒng)資源利用率、進(jìn)程、網(wǎng)絡(luò)連接、系統(tǒng)調(diào)等信息,還具備了很強(qiáng)的分析能力,例如:
?????? 1.按照CPU使用率對(duì)進(jìn)程排序
?????? 2.按照數(shù)據(jù)包對(duì)進(jìn)程排序
?????? 3.打開最多文件描述符進(jìn)程
?????? 4.查看進(jìn)程打開了哪些文件
?????? 5.查看進(jìn)程HTTP請求報(bào)文
?????? 6.查看機(jī)器上容器列表及資源使用情況
項(xiàng)目地址:https://github.com/draios/sysdig
文檔:https://github.com/draios/sysdig/wiki
sysdig工作流程
sysdig通過內(nèi)核的驅(qū)動(dòng)模塊注冊系統(tǒng)調(diào)用hook,這樣當(dāng)有系統(tǒng)調(diào)用發(fā)生和完成的時(shí)候,它會(huì)把系統(tǒng)調(diào)用信息拷貝到特定的bugger,然后用戶態(tài)組件對(duì)數(shù)據(jù)信息處理(解壓、解析、過濾等,)并最終通過sysdig命令行和用戶進(jìn)行交互
在內(nèi)核中加入了模塊,通過該模塊獲取了系統(tǒng)調(diào)用的信息,該模塊類似與攔截器,當(dāng)有系統(tǒng)調(diào)用時(shí),就會(huì)把系統(tǒng)調(diào)用所涉及的信息捕捉,用戶層面的模塊會(huì)對(duì)該數(shù)據(jù)就行解析過濾。
安裝Sysdig
先升級(jí)下內(nèi)核
【】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
自動(dòng)安裝
curl -s https://download.sysdig.com/stable/install-sysdig | sudo bash
上面是一個(gè)shell 腳本,會(huì)識(shí)別常用的linux發(fā)行版本,并根據(jù)對(duì)應(yīng)的版本配置源,最后是安裝sysdig包。在redhat/centos上首先會(huì)配置的是epel 源 ,配置該源的目的是安裝dkms包;然后會(huì)配置draios源,通過該源可以安裝sysdig包。最后在裝sysdig包之前還會(huì)先安裝kernel-devel包。
手動(dòng)安裝
默認(rèn)源里少個(gè)依賴需要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 # 加載驅(qū)動(dòng)模塊
?
執(zhí)行sysdig命令,實(shí)時(shí)輸出大量系統(tǒng)調(diào)用。
示例: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: 遞增的事件號(hào)
? evt.time: 事件發(fā)生的時(shí)間
? evt.cpu: 事件被捕獲時(shí)所在的 CPU,也就是系統(tǒng)調(diào)用是在哪個(gè) CPU 執(zhí)行的
? proc.name: 生成事件的進(jìn)程名字
? thread.tid: 線程的 id,如果是單線程的程序,這也是進(jìn)程的 pid
? evt.dir: 事件的方向(direction),> 代表進(jìn)入事件,< 代表退出事件
? evt.type: 事件的名稱,比如 open、stat等,一般是系統(tǒng)調(diào)用
? evt.args: 事件的參數(shù)。如果是系統(tǒng)調(diào)用,這些對(duì)應(yīng)著系統(tǒng)調(diào)用的參數(shù)
自定義格式輸出:sysdig -p "user:%user.name time:%evt.time proc_name:%proc.name"
sysdig -l列出支持字段
sysdig常用參數(shù):
sysdig命令直接執(zhí)行后顯示的是個(gè)進(jìn)程對(duì)linux的系統(tǒng)調(diào)用
? -l, --list:列出可用于過濾和輸出的字段
? -M <num_seconds> :多少秒后停止收集
? -p <output_format>, --print=<output_format> :指定打印事件時(shí)使用的格式
??? ? 使用-pc或-pcontainer 容器友好的格式
??? ? 使用-pk或-pkubernetes k8s友好的格式
? -c <chiselname> <chiselargs>:指定內(nèi)置工具,可直接完成具體的數(shù)據(jù)聚合、分析工作
? -w <filename>:保存到文件中
? -r <filename>:從文件中讀取
sysdig過濾:
? fd:根據(jù)文件描述符過濾,比如 fd 標(biāo)號(hào)(fd.num)、fd 名字(fd.name)
? process:根據(jù)進(jìn)程信息過濾,比如進(jìn)程 id(proc.id)、進(jìn)程名(proc.name)
? evt:根據(jù)事件信息過濾,比如事件編號(hào)、事件名
? user:根據(jù)用戶信息過濾,比如用戶 id、用戶名、用戶 home 目錄
? syslog:根據(jù)系統(tǒng)日志過濾,比如日志的嚴(yán)重程度、日志的內(nèi)容
? container:根據(jù)容器信息過濾,比如容器ID、容器名稱、容器鏡像
示列:
1、查看一個(gè)進(jìn)程的系統(tǒng)調(diào)用
【】sysdig proc.name=kubelet
2、查看建立TCP連接的事件
【】sysdig evt.type=accept
3、查看/etc目錄下打開的文件描述符
【】sysdig fd.name contains /etc
4、查看容器的系統(tǒng)調(diào)用
【】docker run -d --name=web --image=nginx
【】sysdig -M 10 container.name=web
注:還支持運(yùn)算操作符,=、!=、>=、>、<、<=、contains、in 、exists、and、or、not
被黑后可用觀察資源占用大的節(jié)點(diǎn),通過sysdig對(duì)容器逐個(gè)分析
sysdig之Chisels(工具箱):
Chisels:實(shí)用的工具箱,一組預(yù)定義的功能集合,用來分析特定的場景。
sysdig –cl 列出所有Chisels,以下是一些常用的:
? topprocs_cpu:輸出按照 CPU 使用率排序的進(jìn)程列表,例如sysdig -c
? topprocs_net:輸出進(jìn)程使用網(wǎng)絡(luò)TOP
? topprocs_file:進(jìn)程讀寫磁盤文件TOP
? topfiles_bytes:讀寫磁盤文件TOP
? netstat:列出網(wǎng)絡(luò)的連接情況
網(wǎng)絡(luò) |
# 查看使用網(wǎng)絡(luò)的進(jìn)程TOP sysdig -c topprocs_net # 查看建立連接的端口10秒內(nèi) sysdig -c fdcount_by fd.sport "evt.type=accept" -M 10 # 查看建立連接的端口10秒內(nèi) sysdig -c fdbytes_by fd.sport # 查看建立連接的IP10秒內(nèi) sysdig -c fdcount_by fd.cip "evt.type=accept" -M 10 # 查看建立連接的IP sysdig -c fdbytes_by fd.cip |
硬盤 |
# 查看進(jìn)程磁盤I/O讀寫 sysdig -c topprocs_file # 查看進(jìn)程打開的文件描述符數(shù)量 sysdig -c fdcount_by proc.name "fd.type=file" -M 10 # 查看讀寫磁盤文件 sysdig -c topfiles_bytes sysdig -c topfiles_bytes proc.name=etcd # 查看/tmp目錄讀寫磁盤活動(dòng)文件 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 |
容器 |
# 查看機(jī)器上容器列表及資源使用情況 csysdig –vcontainers # 查看容器資源使用TOP? CPU? net? file sysdig -c topcontainers_cpu/topcontainers_net/topcontainers_file |
其他常用命令
csysdig #圖形化所有進(jìn)程
sysdig -c netstat? #查看所有網(wǎng)絡(luò)連接
sysdig -c ps??? #類似于os命令文章來源:http://www.zghlxwxcb.cn/news/detail-452973.html
sysdif -c lsof???? #查看所有打開的文件文章來源地址http://www.zghlxwxcb.cn/news/detail-452973.html
到了這里,關(guān)于kubernetes--分析容器系統(tǒng)調(diào)用:Sysdig的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!