當你需要追蹤某個程序産生和接收的系統調用時,首先浮現在你腦海中的是什麼?你可能會想到strace,那麼你是對的。你會使用什麼樣的指令行工具來監控原始網絡通信呢?如果你想到了tcpdump,你又作出了一個極佳的選擇。而如果你碰到必須追蹤打開的檔案(在unix意義上:一切皆檔案)的需求,可能你會使用lsof。
在本教程中,我們将探索sysdig的安裝及其基本用法,在linux上實施系統監控和排障。
<a target="_blank"></a>
對于本教程,由于為了簡便、縮短安裝流程以及版本的不可知,我們将選擇使用官方網站提供的自動化安裝過程。在自動化過程中,安裝腳本會自動檢測作業系統并安裝必需的依賴包。
以root身份運作以下指令來從官方apt/yum倉庫安裝sysdig:
# curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | bash
安裝完成後,我們可以通過以下方法調用sysdig來感受一下它:
# sysdig
我們的螢幕将馬上被系統上發生的所有事件填滿,對于這些資訊,不便于我們做更多操作。要進一步處理,我們可以運作:
# sysdig -cl | less
來檢視可用的鑿子清單。
預設有以下類目可用,各個類目中分布有多個内建的鑿子。
cpu usage:cpu使用量
errors:錯誤
i/o
logs:日志
misc:混雜
net:網絡
performance:性能
security:安全
system state:系統狀态
要顯示指定鑿子上的資訊(包括詳細的指令行用法),運作以下指令:
# sysdig -cl [鑿子名稱]
例如,我們可以檢查“網絡”類目下關于spy_port鑿子的資訊:
# sysdig -i spy_port
鑿子可以通過過濾器(可同時應用于實時資料和記錄檔案)組合,以擷取更多有用的輸出。
過濾器遵從“類.字段”結構。例如:
fd.cip:用戶端ip位址。
evt.dir:事件方向,可以是‘>’用于進入事件,或‘<’用于退出事件。
完整的過濾器清單可以通過以下指令顯示:
# sysdig -l
在本教程剩餘部分,我将示範幾個sysdig的使用案例。
假定你的伺服器發生了性能問題(如,沒有回應,或者重大的回應延遲)。你可以使用瓶頸鑿子來顯示目前10個最慢系統調用的清單。
使用以下指令在存活伺服器上進行實時檢查。“-c”辨別,後跟鑿子名稱告訴sysdig運作指定的鑿子。
# sysdig -c bottlenecks
或者,你可以離線對伺服器實施性能分析。在此種情況下,你可以儲存完整的sysdig記錄到檔案,然後像下面這樣針對記錄運作瓶頸鑿子。
首先,儲存sysdige記錄(使用ctrl+c來停止收集):
# sysdig -w trace.scap
收集完記錄後,你可以運作以下指令來檢查捕獲間隔中最慢的系統調用:
# sysdig -r trace.scap -c bottlenecks
你需要關注欄#2,#3和#4,這些分别表示執行時間、程序名和pid。
假定你作為系統管理者想要監控系統中互動的使用者活動(如,使用者在指令行輸入了什麼指令,以及使用者去了什麼目錄),這時spy_user鑿子就派上用場了。
讓我們首先通過一些額外選項來收集一個sysdig記錄。
# sysdig -s 4096 -z -w /mnt/sysdig/$(hostname).scap.gz
“-s 4096”告訴sysdig每個事件捕獲4096位元組。
“-z” (與“-w”一起使用)為記錄檔案啟用壓縮。
“-w ”儲存sysdig記錄到指定的檔案。
在上面的例子中,我們自定義了基于每個主機的壓縮的記錄檔案的名稱。記住,你可以在任何時候按下ctrl+c來打斷sysdig的執行。
在我們收集到了合理數量的資料後,我們可以通過運作以下指令來檢視每個使用者的互動活動:
# sysdig -r /mnt/sysdig/debian.scap.gz -c spy_users
上面輸出的第一欄表示與指定使用者的活動相關程序的pid。
如果你想要定位一個指定的使用者,以及隻監控該使用者的活動又怎麼樣呢?你可以通過使用者名對spy_users鑿子的結果進行過濾:
# sysdig -r /mnt/sysdig/debian.scap.gz -c spy_users "user.name=xmodulo"
我們可以使用“-p”辨別來自定義sysdig記錄的輸出格式,并指定雙引号括起來的想要的字段(如使用者名、程序名,以及檔案或套接口名稱)。在本例中,我們将建立一個記錄檔案,該檔案将隻包含在家目錄中的寫入事件(我們今後可以使用“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
作為伺服器排障的一部分,你可能想要監聽網絡通信,此工作通常由tcpdump做。對于sysdig,可以很容易進行通信嗅探,其風格更為對使用者友好。
例如,你可以檢查由特定ip位址,特定程序(如apache2)提供的資料(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
原文釋出時間:2014-11-30
本文來自雲栖合作夥伴“linux中國”