天天看點

Linux之Sysdig 最常用指令(備忘查詢)

作者:區塊軟體開發
Linux之Sysdig 最常用指令(備忘查詢)

指令安裝

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
sudo yum -y install sysdig
           

常用參數

參數 說明
-C 5 每個檔案不超過5M
-W 10 保留不超過10個檔案
-G 60 每個檔案隻保留一分鐘内的系統活動
-w dump.pcap 儲存到檔案
-e 1000 每個檔案隻有1000個事件
-z 參數對儲存的内容進行壓縮
-A --print-ascii 把buffer中資料按照ASCII格式列印,友善閱讀
-x --print-hex 把buffer中資料按照十六進制列印
-X --printhex-ascii 把buffer中資料同時按照ASCII格式和十六進制列印
-s 1024 捕獲buffer的資料大小,預設為80,設定過大,檔案會很大
-N 不用把端口号轉成可讀名字
-r 從檔案讀取

輸出含義

事件 說明
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工具類型
           

捕獲每個系統事件并将其寫入标準輸出

$ sysdig
           

自定義輸出

$ sysdig -p"user:%user.name dir:%evt.arg.path" evt.type=chdir
user:ubuntu dir:/root
user:ubuntu dir:/root/tmp
user:ubuntu dir:/root/Download
           

字段必須用 % 作為字首,所有 sysdig -l 列出來的字段都可以使用 如果某個字段在時間中不存在,預設這個事件會過濾掉,在這個字元串最前面加上 * 符号,會列印所有事件,不存在的字段會變成 <NA>

$ sysdig -p"*%evt.type %evt.dir %evt.arg.name" evt.type=open
open > <NA>
open < /proc/1285/task/1399/stat
open > <NA>
open < /proc/1285/task/1400/io
open > <NA>
open < /proc/1285/task/1400/statm
open > <NA>
           

抓取kubernetes pod用戶端ip的udp請求

# 列出容器監聽端口
$ sudo sysdig -pc -A -c netstat container.name=aaa

# 抓取kubernetes pod 的用戶端ip為172.119.100.16,3000端口的的請求内容
$ sudo sysdig -A -c echo_fds  k8s.pod.name contains datacenter-web-dev  and fd.port=3000 and evt.type=read and fd.cip=172.119.100.16 fd.proto=UDP

# 按照建立連接配接數量對程序排序 并儲存到sysdig.pcap檔案中
$ sysdig  -c fdcount_by fd.sport "evt.type=accept"  -w sysdig.pcap
           

抓取 kubernetes pod 用戶端 ip 為 172.119.100.16 的 udp 請求

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"
           

檢視打開檔案失敗

$ 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
           

檢視使用硬碟帶寬最多的程序

$ sysdig -c topprocs_file
           

列出大量使用檔案描述符的程序

$ sysdig -c fdcount_by proc.name "fd.type=file"
           

檢視讀寫bytes最多的檔案

$ sysdig -c topfiles_bytes
           

列印httpd程序已經讀取中和寫入中的檔案

$ sysdig -c topfiles_bytes proc.name=httpd
           

基本 opensnoop:snoop 檔案在發生時打開

$ sysdig -p "%12user.name %6proc.pid %12proc.name %3fd.num %fd.typechar %fd.name" evt.type=open
           

檢視活躍中的讀和寫最多的目錄

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.100.17,3000 端口的的請求内容

$ sudo sysdig -A -c echo_fds  k8s.pod.name contains datacenter-web-dev  and fd.port=3000 and evt.type=read and fd.cip=172.119.100.17 fd.proto=UDP
           

檢視占用網絡帶寬最多的程序

$ sysdig -c topprocs_net
#顯示主機192.168.0.1的網絡傳輸資料
#作為二進制:
$ sysdig -s2000 -X -c echo_fds fd.cip=192.168.0.1
#作為 ASCII:
$ sysdig -s2000 -A -c echo_fds fd.cip=192.168.0.1
           

檢視連接配接最多的伺服器端口

#在已建立的連接配接方面:
$ sysdig -c fdcount_by fd.sport "evt.type=accept"
#就總位元組數而言:
$ sysdig -c fdbytes_by fd.sport
           

檢視用戶端連接配接最多的ip

#在已建立的聯系方面
$ sysdig -c fdcount_by fd.cip "evt.type=accept"
#就總位元組數而言
$ 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
           

基本用法

将事件捕獲到跟蹤檔案以供以後分析

$ sysdig –w myfile.scap
           

從跟蹤檔案中讀取事件

$ sysdig –r myfile.scap
           

根據特定字段過濾事件

$ sysdig proc.name=httpd and evt.type!=open
           

運作鑿子以獲得進階功能

$ sysdig -c topprocs_cpu
           

列出所有可用字段

$ sysdig -l
           

列出所有可用的鑿子

$ sysdig -cl
           

容器

檢視具有容器上下文的程序清單

$ sysdig -pc
           

檢視 wordpress1 容器中運作的程序的CPU使用率

$ sysdig -pc -c topprocs_cpu container.name=wordpress1
           

檢視對基于 Kubernetes 的 mySQL 服務發出的熱門 HTTP 請求

$ sysdig -k http://127.0.0.1:8080 -c httptop k8s.svc.name=mysql
           

檔案系統

列出使用最多檔案數的程序

$ sysdig -c fdcount_by proc.name "fd.type=file"
           

觀察名為“passwd”的所有檔案的 I/O 活動

$ sysdig -A -c echo_fds "fd.filename=passwd"
           

安全

顯示 root 通路的目錄

$ sysdig -p "%evt.arg.path" "evt.type=chdir and user.name=root"
           

觀察 ssh 活動

$ sysdig -A -c echo_fds fd.name=/dev/ptmx and proc.name=sshd
           

日志

顯示來自 python 的所有系統日志消息

$ sysdig -c spy_syslog proc.name=python
           

超尾系統中的所有日志檔案

$ sysdig -c spy_logs
           

CSysdig

$ csysdig -m http://127.0.0.1:8080
           

使用 Mesos 中繼資料運作 Csysdig,Sysdig 基于 curses 的 UI

官網 sysdig.com