不是所有的Linux工具都會(huì)讓人驚嘆,但這個(gè)絕對(duì)讓你叫絕
今天我要向大家介紹一款非常強(qiáng)大的系統(tǒng)診斷和監(jiān)控工具——sysdig。它能替代top、iftop、lsof和strace等工具,讓你的工作更加高效。下面讓我舉幾個(gè)應(yīng)用場(chǎng)景,讓你親眼見證它的強(qiáng)大!
什么是sysdig
sysdig是一款開源的系統(tǒng)診斷和監(jiān)控工具,Sysdig可以看做是 strace + tcpdump + lsof + htop + iftop 以及其他系統(tǒng)分析工具的合集 。能夠?qū)崟r(shí)捕獲系統(tǒng)的運(yùn)行狀態(tài)并以可視化的方式展示。通過(guò)sysdig,用戶可以深入了解系統(tǒng)的各項(xiàng)指標(biāo)、進(jìn)程活動(dòng)、網(wǎng)絡(luò)流量等情況,從而更好地進(jìn)行故障排查、性能優(yōu)化和安全監(jiān)控。
安裝sysdig
首先,我們需要安裝sysdig工具。sysdig提供了多種安裝方式,包括源代碼編譯安裝和各種包管理器安裝。在大多數(shù)Linux發(fā)行版上,您可以通過(guò)包管理器輕松安裝sysdig。例如,在Ubuntu系統(tǒng)上,可以使用以下命令安裝:
sudo apt-get -y install sysdig
安裝成功后,通過(guò)下面命令查看對(duì)應(yīng)的版本信息:
controlplane $ sysdig --version
sysdig version 0.26.4
使用場(chǎng)景
場(chǎng)景一:跟蹤進(jìn)程的系統(tǒng)調(diào)用
跟蹤進(jìn)程的系統(tǒng)調(diào)用是故障排查中常用的手段,可以幫助您了解應(yīng)用程序在執(zhí)行過(guò)程中的具體行為。舉例來(lái)說(shuō),假設(shè)一個(gè)應(yīng)用程序在處理某個(gè)請(qǐng)求時(shí)出現(xiàn)了失敗,通過(guò)跟蹤系統(tǒng)調(diào)用,您可以得知是在哪個(gè)環(huán)節(jié)出現(xiàn)了問(wèn)題,或者是因?yàn)槿鄙倭四膫€(gè)依賴庫(kù)。現(xiàn)在假設(shè)您有一臺(tái)運(yùn)行Nginx服務(wù)的服務(wù)器,想要查看該Nginx服務(wù)的系統(tǒng)調(diào)用,您可以使用以下命令:
sysdig proc.name=nginx
或
sysdig proc.pid = 進(jìn)程號(hào)
執(zhí)行完上述命令后,它會(huì)實(shí)時(shí)監(jiān)聽Nginx的進(jìn)程,如下圖:
監(jiān)聽Nginx
我們?cè)诹硗庖粋€(gè)終端向這個(gè)nginx發(fā)送一個(gè)HTTP請(qǐng)求,這時(shí),sysdig就會(huì)捕抓到請(qǐng)求Nginx的所有數(shù)據(jù)。如下圖:
監(jiān)聽Nginx的結(jié)果
場(chǎng)景二:系統(tǒng)性能分析
這也是sysdig的拿手好戲之一。比如,要查看CPU使用最高的進(jìn)程,您可以使用以下命令:
sysdig -c topprocs_cpu
執(zhí)行上述命令后,如下圖:
監(jiān)控CPU情況
這將列出使用CPU最高的進(jìn)程,可以清晰的看出當(dāng)前系統(tǒng)中哪些進(jìn)程占用CPU最高,一目了然,非常直觀。
查看網(wǎng)絡(luò)使用最高的進(jìn)程,您可以執(zhí)行以下命令:
sysdig -c topprocs_net
執(zhí)行完上述命令后,將列出使用網(wǎng)絡(luò)最高的進(jìn)程,可以看出哪些進(jìn)程使用網(wǎng)絡(luò)流量比較大。如下圖:
監(jiān)控網(wǎng)絡(luò)情況
要查看讀寫硬盤最高的進(jìn)程,您可以執(zhí)行以下命令:
sysdig -c topprocs_file
執(zhí)行上述命令后,如下圖:
監(jiān)控硬盤讀寫情況
這里會(huì)幫你列出讀寫硬盤最高的進(jìn)程,假設(shè)你的系統(tǒng)硬盤讀寫慢,你想知道是那個(gè)進(jìn)程,占用的磁盤IO比較大,就可以通過(guò)這個(gè)命令得出來(lái),哪個(gè)進(jìn)程現(xiàn)在占用大量的磁盤IO,從而造成硬盤的一個(gè)瓶頸。
查看網(wǎng)絡(luò)鏈接,您可以執(zhí)行以下命令:
sysdig -c netstat
執(zhí)行上述命令后,如下圖:
這里面列出的,與我們直接使用netstat命令列出的內(nèi)容類似,包括監(jiān)聽,網(wǎng)絡(luò)鏈接等等。
查看進(jìn)程列表,您可以執(zhí)行以下命令:
sysdig -c ps
執(zhí)行這個(gè)命令后,幫你列出當(dāng)前系統(tǒng)中所有的進(jìn)程,包括進(jìn)程ID以及它的文件描述符的限制,如下圖:
查看系統(tǒng)打開的文件描述,您可以執(zhí)行以下命令:
sysdig -c lsof
執(zhí)行完這個(gè)命令后,將列出系統(tǒng)中打開的所有文件描述符。包括進(jìn)程PID以及文件,都能看到。如下圖:
場(chǎng)景三:查看某個(gè)目錄被哪些進(jìn)程打開
想要了解某個(gè)目錄被哪些進(jìn)程打開,可以使用以下命令:
sysdig fd.name contains /etc
它將會(huì)過(guò)濾出打開文件描述符中,包含etc的路徑,etc目錄下的所有的打開文件都能在這里看到。如下圖:
寫到最后
sysdig是一款強(qiáng)大的系統(tǒng)診斷和監(jiān)控工具,結(jié)合系統(tǒng)調(diào)用跟蹤和抓包功能,能夠?qū)崟r(shí)捕獲系統(tǒng)運(yùn)行狀態(tài)并以可視化方式展示,提供了豐富的命令行工具和高級(jí)功能,可應(yīng)用于性能優(yōu)化、故障排查、安全監(jiān)控等多個(gè)場(chǎng)景,是系統(tǒng)管理員和運(yùn)維工程師的得力助手。