Sysdig是一款分源的、在Linux上實施系統監控和排除故障的工具,本文我們來討論一下Sysdig安裝及如何使用.
Sysdig 在操作系統層面進行監聽,并將系統調用及系統事 件等系統活動捕獲下來,這使得它看起來極像面向系統的 tcpdump 或 Wireshark,如果你打算對系統中的異常故障進行排查,那么 Sysdig 將成為你解決問題得心應手的利器.
在 Linux 上,可使用以下命令來安裝 Sysdig:
curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | sudo bash
這將把 Sysdig 安裝到 rpm 或 deb 系的 Linux 系統.
捕獲系統活動,實時捕獲,結果打印到標準輸出:sysdig
將捕獲結果保存到文件 system.scap,方便稍后分析:sysdig -w system.scap
捕獲指定的事件數 200 并保存到文件:sysdig -n 200 -w system.scap
讀取已捕獲的文件:sysdig -r system.scap
捕獲結果解釋
- (1) (2) (3) (4) (5) (6) (7) (8)
- 1 10:54:50.462463956 0 sysdig (29043) > sysdigevent event_type=1 event_data=0
- 2 10:54:50.462603110 0 sysdig (29043) > sysdigevent event_type=1 event_data=0
- 3 10:54:50.462729565 0 sysdig (29043) > sysdigevent event_type=1 event_data=0
- 4 10:54:50.462859521 0 sysdig (29043) > sysdigevent event_type=1 event_data=0
- 5 10:54:50.463206317 0 sysdig (29043) > switch next=0 pgft_maj=0 pgft_min=1790 vm_size=35748 vm_rss=7164 vm_swap=0
- 6 10:54:50.464246835 0 <NA> (0) > switch next=7 pgft_maj=0 pgft_min=0 vm_size=0 vm_rss=0 vm_swap=0
- 7 10:54:50.464249707 2 <NA> (0) > switch next=8374 pgft_maj=0 pgft_min=0 vm_size=0 vm_rss=0 vm_swap=0
- 8 10:54:50.464255940 0 <NA> (7) > switch next=0 pgft_maj=0 pgft_min=0 vm_size=0 vm_rss=0 vm_swap=0
- 9 10:54:50.464264256 2 <NA> (8374) > switch next=0 pgft_maj=0 pgft_min=0 vm_size=0 vm_rss=0 vm_swap=0
- 10 10:54:50.464358113 2 <NA> (0) > switch next=854(mlnet) pgft_maj=0 pgft_min=0 vm_size=0 vm_rss=0 vm_swap=0
- 11 10:54:50.464370099 2 mlnet (854) < poll res=0 fds=
- 12 10:54:50.464378193 2 mlnet (854) > poll fds= timeout=5
- 13 10:54:50.464385400 2 mlnet (854) > switch next=0 pgft_maj=216 pgft_min=3386 vm_size=162608 vm_rss=12196 vm_swap=2716
- 14 10:54:50.464950541 0 <NA> (0) > switch next=1105(memcached) pgft_maj=0 pgft_min=0 vm_size=0 vm_rss=0 vm_swap=0
- 15 10:54:50.464954692 0 memcached (1105) < epoll_wait res=0
- 16 10:54:50.464976007 0 memcached (1105) > epoll_wait maxevents=32 --Vevb.com
- 17 10:54:50.464984030 0 memcached (1105) > switch next=0 pgft_maj=3 pgft_min=247 vm_size=327412 vm_rss=1860 vm_swap=468
- 18 10:54:50.465256687 2 <NA> (0) > switch next=2181(plugin-containe) pgft_maj=0 pgft_min=0 vm_size=0 vm_rss=0 vm_swap=0
- 19 10:54:50.465261465 2 plugin-containe (2181) < poll res=0 fds=
- 20 10:54:50.465297692 2 plugin-containe (2181) > getrlimit resource=3(RLIMIT_STACK)
通過 Sysdig 捕獲的結果如上所示,每列的意思分別為:
- 事件編號
- 時間戳
- CPU 編號
- 進程名
- 線程 ID
- 事件方向,> 為進入事件,< 為退出事件
- 事件類型,比如 open、read 等
- 事件參數列表
過濾捕獲結果
在默認情況下,Sysdig 捕獲的信息非常多,要從中找到我們感興趣的信息,這就需要類似 grep 的過濾功能.
按字段類別進行過濾:sysdig -r system.scap proc.name=sysdig
這條命令過濾出進程名為 sysdig 的系統事件,結果為:
- 1 10:54:50.462463956 0 sysdig (29043) > sysdigevent event_type=1 event_data=0
- 2 10:54:50.462603110 0 sysdig (29043) > sysdigevent event_type=1 event_data=0
- 3 10:54:50.462729565 0 sysdig (29043) > sysdigevent event_type=1 event_data=0
- 4 10:54:50.462859521 0 sysdig (29043) > sysdigevent event_type=1 event_data=0
- 5 10:54:50.463206317 0 sysdig (29043) > switch next=0 pgft_maj=0 pgft_min=1790 vm_size=35748 vm_rss=7164 vm_swap=0
Sysdig 提供包括 fd、process、evt、user、group、syslog 等字段類別,可通過 sysdig -l 查詢.
除 = 外,Sysdig 的過濾表達式還支持 !=、<、<=、>、>= 及 contains 等比較操作符.
同時,也可以使用 and、or、not 等布爾操作符,例如:
- sysdig -r system.scap proc.name=sysdig and evt.type=switch
- Chisels
在 Sysdig 中,chisels 是通過 Lua 編寫的腳本,可以用來擴展 Sysdig 的過濾功能,比如我們想看讀寫磁盤文件最頻繁的進程,可以使用 topprocs_file 這個 chisels:
sysdig -c topprocs_file
結果為:
- Bytes Process
- ------------------------------
- 448.36KB mozStorage
- 220.38KB perl
- 1.69KB tmux
- 1.62KB sh
- 1.59KB Xorg
- 1.30KB urxvtd
更多 chisels,可通過 sysdig -cl 了解,當然,如果你熟悉 Lua,那么也可以編寫自己的 chisels.
新聞熱點
疑難解答