指令安裝
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