如何用 sysdig 監控和排查 Linux 服務器

若是你須要跟蹤一個進程發出和接收的系統調用,第一個想到是的什麼?你極可能想到了 strace,你是對的。 從命令行監控原始網絡通訊你會用什麼工具?若是你想到了 tcpdump,你又作了明智的決定。若是你碰巧須要跟蹤打開的文件(換句 Unix 語言來說就是:一切皆文件),極可能你會用 lsof。html

strace、tcpdump 和 lsof 確實了不得的工具,應該是每一個系統管理員工具箱裏的一部分。這偏偏是你會喜歡 sysdig 的緣由,一個強大的系統級[探索]和調試工具,開源的,而且被創始人稱做「strace + tcpdump + lsof ,頂上澆了帶有 Lua 櫻桃的美妙醬汁」。好吧,先把幽默放一邊,sysdig 的一個很棒的特性在於,它不只可以分析Linux 系統的 「現場」狀態,還可以把系統狀態保存到一個轉儲文件以用於離線檢測。並且,你能夠用內置(或者本身編寫)的小腳本 —— 名爲「chisels(鑿子)」 —— 來定製 sysdig 的行爲甚至加強 sysdig 的能力。各類 chisels 都以各自不一樣的腳本特性來分析 sysdig 捕獲的事件流。linux

在本教程裏,咱們將研究 sysdig 在 Linux 上的安裝和基本的系統監控和調試用法。ios

安裝Sysdigapache

爲了簡單、明瞭和Linux發行版無關方面的考慮,本教程選擇官網描述的自動安裝流程,安裝腳本自動探查操做系統並安裝必要的依賴包。安全

以 root 身份運行以下指令,從官方 apt/yum 源安裝 sysdig。
curl -s http://s3.amazonaws.com/download.draios.com/stable/install-sysdig | bash
安裝完成後,咱們能夠像這樣運行 sysdig,來感覺一下。bash

Unable to load the driver
error opening device /dev/sysdig0. Make sure you have root credentials and that the sysdig-probe module is loaded.
sysdig運行報錯如上,解決方式: sysdig-probe-loader 再次執行便可成功。
sysdig
屏幕上馬上充斥這系統內發生的一切信息,咱們沒辦法利用這些信息,因此咱們應該運行:
sysdig -cl | less
來查看已有的 chisels 列表:服務器

to_see_a_list_of_available_chisels_15334678610_e5956a26e8_z網絡

下列類別是默承認用的,每一類都有多個內置的 chisels。
CPU
Usage CPU 使用狀況less

Errors
錯誤curl

I/O

輸入/輸出

Logs
日誌

Misc
雜項

Net
網絡

Performance
性能

Security
安全

System
State 系統狀態
顯示一個特定chisel的信息(含詳細的命令行用法),運行:
sysdig -cl [chisel_name]
好比,查看「Net」類別下的 spy_port chisel,能夠運行:
sysdig -i spy_port
sysdig_i_spy_port_15521424095_0365bf20c3_z

chisel 能夠跟過濾器結合以便得到更有用的輸出內容,過濾器能夠用於現場數據也能夠用於跟蹤文件。
過濾器遵循「類別.字段」的結構,好比:

fd.cip: 客戶端 IP 地址
evt.dir: 事件方向,能夠是 ‘>’,表明進入事件;或 ‘<’,表明退出事件。
下面的命令顯示全部的過濾器:
sysdig -l
在剩下的教程裏,我將演示一些 sysdig 的用例。

Sysdig 示例:服務器性能調試

假設你的服務器遇到性能問題(好比無反應或嚴重的反應延遲),你能夠用 bottlenecks chisel 來顯示此時最慢的 10 個系統調用。

下面的命令能夠在運行中的服務器上實時作檢測。「-c」 標記後面跟着 chisel名,是告訴 sysidg 運行指定的 chisel。
sysdig -c bottlenecks
或者,你能夠執行離線服務器性能分析。這種狀況下,你能夠把完整的 sysdig 跟蹤數據保存到一個文件裏,而後對跟蹤文件運行 bottlenecks chisel ,方法以下:

首先,保存 sysdig 跟蹤文件(用 Ctrl+c 終止數據收集):
sysdig -w trace.scap
收集完跟蹤數據,用以下命令就能夠檢查跟蹤期間最慢的系統調用:
sysdig -r trace.scap -c bottlenecks
sysdig_r_trace.scap_c_bottlenecks_15334678670_ebbe93265e_z

須要注意 #2 #3 和 #4 列,它們分別表明執行時間、進程名和 PID。

Sysdig 示例:監控用戶行爲

假設你做爲系統管理員想要監控系統的用戶行爲(好比,用戶在命令行敲了什麼指令、進入了哪些目錄),那麼 spy_user chisel 就派上用場了。

咱們首先用一些額外選項來收集 sysdig 跟蹤文件:

sysdig -s 4096 -z -w /mnt/sysdig/$(hostname).scap.gz

"-s 4096"

告訴sysdig 對每一個事件捕捉4096個字節。

"-z"

(跟 -w 一塊兒使用)壓縮跟蹤文件。

"-w

<trace-file>"
保存 sysdig 跟蹤數據到指定文件。
在上面的例子裏,咱們給壓縮的跟蹤文件按照主機名來命名。記住,你能夠在任什麼時候候敲Ctrl + c終止 sysdig 的運行。

咱們採集了足夠多的數據後,能夠用以下指令查看系統內每一個用戶的交互行爲:
sysdig -r /mnt/sysdig/debian.scap.gz -c spy_users
sysdig_r_mnt_sysdig_debian.scap.gz_c_spy_users_15518254291_5c9671ca41_z

上面的輸出裏,第一列表明與用戶活動相關的進程PID。

若是你想把目標指向一個特定用戶,並只監控該用戶的活動該怎麼辦呢?你能夠經過用戶名來過濾 spy_users chisel 的結果:
sysdig -r /mnt/sysdig/debian.scap.gz -c spy_users "user.name=xmodulo"
sysdig_r_mnt_sysdig_debian.scap.gz_c_spy_users_user.name=xmodulo_15498248556_66d15422b1_z

Sysdig 示例:監控文件I/O

咱們能夠用 「-p」 標記來定製 sysdig 跟蹤的輸出格式,在雙引號內包含所需的字段(好比: 用戶名、進程名以及文件或套接字名)。在下面的例子裏,咱們建立一個跟蹤文件,只包括對 home 目錄的寫入事件(事後咱們能夠用」sysdig -r writetrace.scap.gz」 來查看)。
sysdig -p "%user.name %proc.name %fd.name" "evt.type=write and fd.name contains /home/" -z -w writetrace.scap.gz
sysdig_p_15498248586_de5f5fc93d_z

Sysdig 示例:監控網絡I/O

做爲服務器調試的一部分,你可能須要窺探網絡流量,而這通常都是用 tcpdump。用 sysdig 呢,流量嗅探一樣很容易,並且方式更加用戶友好。

例如,你能夠查看服務器的某個特定進程(好比 apache2)與一個特定 IP 地址的數據交換(ASCII形式):
sysdig -s 4096 -A -c echo_fds fd.cip=192.168.0.100 -r /mnt/sysdig/debian.scap.gz proc.name=apache2
若是你想監控原始數據傳輸(二進制形式),把 「-A」 改成 「-X」。
sysdig -s 4096 -X -c echo_fds fd.cip=192.168.0.100 -r /mnt/sysdig/debian.scap.gz proc.name=apache2
想要更多的信息、示例和案例研究能夠登陸項目官網。相信我,sysdig 擁有無限的可能性。別光聽我說,如今就安裝 sysdig,開始挖掘吧!

參考官網
https://www.ibm.com/developerworks/cn/linux/1607_caoyq_sysdig/index.html

相關文章
相關標籤/搜索