天天看點

Linux系統監控神器--Collectl

Linux系統監控神器--Collectl

為使系統良好運轉,linux系統管理者經常需要監測cpu,記憶體,磁盤,網絡等系統資訊。linux上已有iotop,top,free,htop,sar等豐富的正常工具來實作監測功能。今天讓我們走進collectl來了解這個集測試/監控/分析系統性能為一體的linux工具。

collectl作為一個輕量級的監控工具,在同類工具中是功能最全的。使用者可監測不同的複雜系統矩陣值,并可保留資料以做之後的分析。不同于其他隻用來監測特定系統參數的工具,collectl可以同時監測不同的變量,并以合适的方式記錄它們。

不同于或聚焦于一小組統計資料、采用唯一輸出方式,或采用疊代、作為守護程序運作的大部分監測工具,collectl可以同時全部實作。使用者可選擇各種子系統中的任一系統來監測包括記憶體,cpu,磁盤,索引節點,無線帶寬,lustre,記憶體,網絡,網絡檔案系統,程序,二次型,slabs,套接口及tcp等資訊。

深入學習前讓我們先看以下指令。

$ collectl

waiting for 1 second sample...

#<--------cpu--------><----------disks-----------><----------network---------->

#cpu sys inter ctxsw kbread reads kbwrit writes kbin pktin kbout pktout

0 0 864 1772 0 0 0 0 0 1 0 0

5 2 1338 2734 0 0 8 2 0 0 0 1

1 0 1222 2647 0 0 92 3 0 2 0 1

1 0 763 1722 0 0 80 3 0 1 0 2

cpu使用率,磁盤輸入輸出和網絡活動以每秒為機關來加載。對可以了解這些資料的人來說這些資訊很容易讀懂。這項清單在給定的時間間隔裡會持續增加,并可直接形成一項檔案跟蹤日志。collectl工具提供了各種指令來對這些資料進行記錄,查找及做其他處理。

<a target="_blank"></a>

對ubuntu/debian使用者來說collectl是預設資源,是以使用apt指令便可擷取。

$ sudo apt-get install collectl

fedora/centos使用者使用yum指令便可擷取。

$ yum install collectl

子系統是可檢測到的不同系統資源類型。像cpu,記憶體,帶寬等等都可構成一個子系統。隻運作collectl指令将以批處理模式輸出cpu,磁盤和網絡子系統資訊,我們在上文已看到相關内容。

從操作說明可以看到,collectl可以識别以下子系統。

總計子系統

b - buddy info (記憶體片段)

c - cpu

d - disk

f - nfs v3 data

i - inode and file system

j - interrupts

l - lustre

m - memory

n - networks

s - sockets

t - tcp

x - interconnect

y - slabs (system object caches)

細節子系統

這是一系列的詳細資訊,大部分情況下都會由相應的總計資料衍生出來。目前“環境變量”和“程序”2類沒有相應的總計資料。如果有3個磁盤,選擇-sd,将隻會看到3個磁盤組合出的單一資訊。如果選擇-sd,将會分别顯示各磁盤資訊。

e - environmental data (fan, power, temp), via ipmitool

f - nfs data

l - lustre ost detail or client filesystem detail

m - memory node data, which is also known as numa data

t - 65 tcp counters only available in plot format

z - processes

使用“-s”來監測特定的子系統并向其添加子系統的識别項。現在讓我們舉幾個例子。

用“-sc”實作cpu總使用率的監測

$ collectl -sc

#&lt;--------cpu--------&gt;

#cpu sys inter ctxsw

3 0 1800 3729

3 0 1767 3599

使用“-c”觀察各個單獨的cpu使用情況。結果将會輸出多行,分别對應一個cpu。

# single cpu statistics

# cpu user nice sys wait irq soft steal idle

0 3 0 0 0 0 0 0 96

1 3 0 0 0 0 0 0 96

2 2 0 0 0 0 0 0 97

3 1 0 0 0 0 0 0 98

0 2 0 0 0 0 0 0 97

1 2 0 2 0 0 0 0 95

2 1 0 0 0 0 0 0 98

3 4 0 1 0 0 0 0 95

如果需要,可以同時使用c和c來擷取單項cpu監測資料和彙總資料。

使用m子系統檢視記憶體。

$ collectl -sm

#&lt;-----------memory-----------&gt;

#free buff cach inac slab map

2g 220m 1g 1g 210m 3g

不難解釋。 m用來檢視更多記憶體的詳細資訊。

# memory statistics

# node total used free slab mapped anon locked inact hit%

0 7975m 5939m 2036m 215720k 372184k 0 6652k 1434m 0

0 7975m 5939m 2036m 215720k 372072k 0 6652k 1433m 0

這類似于免費報告嗎?

d和d可以檢視磁盤使用的概況和詳細情況。

$ collectl -sd

#&lt;----------disks-----------&gt;

#kbread reads kbwrit writes

4 1 136 24

0 0 80 13

# disk statistics (/sec)

# &lt;---------reads---------&gt;&lt;---------writes---------&gt;&lt;--------averages--------&gt; pct

#name kbytes merged ios size kbytes merged ios size rwsize qlen wait svctim util

sda 0 0 0 0 0 0 0 0 0 0 0 0 0

sda 1 0 2 1 17 1 5 3 2 2 6 2 1

sda 0 0 0 0 92 11 5 18 18 1 12 12 5

“--verbose”指令可以用來檢視附加資訊。和d指令不同,它将概況擴充,包含了更多資訊。

$ collectl -sd --verbose

如果想要同時得到cpu,記憶體和磁盤報告,那麼同時使用子指令組合來實作。

$ collectl -scmd

#&lt;--------cpu--------&gt;&lt;-----------memory-----------&gt;&lt;----------disks-----------&gt;

#cpu sys inter ctxsw free buff cach inac slab map kbread reads kbwrit writes

4 0 2187 4334 1g 221m 1g 1g 210m 3g 0 0 0 0

3 0 1896 4065 1g 221m 1g 1g 210m 3g 0 0 20 5

若要将每行的監測資訊和時間一同顯示,使用t選項。通過在“-o”參數來指定。

$ collectl -scmd -ot

# &lt;--------cpu--------&gt;&lt;-----------memory-----------&gt;&lt;----------disks-----------&gt;

#time cpu sys inter ctxsw free buff cach inac slab map kbread reads kbwrit writes

12:03:05 3 0 1961 4013 1g 225m 1g 1g 212m 3g 0 0 0 0

12:03:06 3 0 1884 3810 1g 225m 1g 1g 212m 3g 0 0 0 0

12:03:07 3 0 2011 4060 1g 225m 1g 1g 212m 3g 0 0 0 0

使用“-otm”可将時間換成毫秒顯示。

collectl報告的每行都是一份快照或樣本,它通常設定定期間隔如1秒來取樣。i可用來設定時間間隔,c用來設定樣本計數。

$ collectl -c1 -sm

1g 261m 1g 1g 228m 3g

使用i指令可改變更新時間間隔。

$ collectl -sm -i2

waiting for 2 second sample...

1g 261m 1g 1g 229m 3g

上面的指令設定每2秒收集一次記憶體資訊。

top指令将collectl像iostat/top工具一樣進行智能統計。清單會持續更新,且可以使用不同字段實作排序。

$ collectl --top iokb

輸出如下

# top processes sorted by iokb (counters are /sec) 09:44:57

# pid user pr ppid thrd s vsz rss cp syst usrt pct accutime rkb wkb majf minf command

3104 enlighte 20 2683 3 s 938m 33m 0 0.00 0.00 0 00:09.16 0 4 0 0 /usr/bin/ktorrent

1 root 20 0 0 s 26m 3m 2 0.00 0.00 0 00:01.30 0 0 0 0 /sbin/init

2 root 20 0 0 s 0 0 3 0.00 0.00 0 00:00.00 0 0 0 0 kthreadd

3 root 20 2 0 s 0 0 0 0.00 0.00 0 00:00.02 0 0 0 0 ksoftirqd/0

4 root 20 2 0 s 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 kworker/0:0

5 root 0 2 0 s 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 kworker/0:0h

7 root rt 2 0 s 0 0 0 0.00 0.00 0 00:00.08 0 0 0 0 migration/0

8 root 20 2 0 s 0 0 2 0.00 0.00 0 00:00.00 0 0 0 0 rcu_bh

9 root 20 2 0 s 0 0 0 0.00 0.00 0 00:00.00 0 0 0 0 rcuob/0

上面的輸出很像top指令,并且它以磁盤數量降序排列程序。

若隻想顯示上面的5項程序,可用以下指令實作

$ collectl --top iokb,5

若想學習上面的清單裡哪些字段可以排序,使用如下指令

$ collectl --showtopopts

下面是應用于程序或資料的最高排序類型清單。某些情況下你可能會使用某一字段進行排序,但它并非顯示的一部分。

top process sort fields

程序排序字段

memory

vsz virtual memory

rss resident (physical) memory

time

syst system time

usrt user time

time total time

accum accumulated time

i/o

rkb kb read

wkb kb written

iokb total i/o kb

rkbc kb read from pagecache

wkbc kb written to pagecache

iokbc total pagecacge i/o

ioall total i/o kb (iokb+iokbc)

rsys read system calls

wsys write system calls

iosys total system calls

iocncl cancelled write bytes

page faults

majf major page faults

minf minor page faults

flt total page faults

context switches

vctx volunary context switches

nctx non-voluntary context switches

miscellaneous (best when used with --procfilt)

cpu cpu number

pid process pid

thread total process threads (not counting main)

top slab sort fields

numobj total number of slab objects

actobj active slab objects

objsize sizes of slab objects

numslab number of slabs

objslab number of objects in a slab

totsize total memory sizes taken by slabs

totchg change in memory sizes

totpct percent change in memory sizes

name slab names

為使collectl像top,我們隻需以cpu使用率排序輸出程序。

$ collectl --top

# top processes sorted by time (counters are /sec) 14:08:46

9471 enlighte 20 9102 0 r 63m 22m 3 0.03 0.10 13 00:00.81 0 0 0 3 /usr/bin/perl

3076 enlighte 20 2683 2 s 521m 40m 2 0.00 0.03 3 00:55.14 0 0 0 2 /usr/bin/yakuake

3877 enlighte 20 3356 41 s 1g 218m 1 0.00 0.03 3 10:10.50 0 0 0 0 /opt/google/chrome/chrome

4625 enlighte 20 2895 36 s 1g 241m 2 0.00 0.02 2 08:24.39 0 0 0 12 /usr/lib/firefox/firefox

5638 enlighte 20 3356 3 s 1g 265m 1 0.00 0.02 2 09:55.04 0 0 0 2 /opt/google/chrome/chrome

1186 root 20 1152 4 s 502m 76m 0 0.00 0.01 1 03:02.96 0 0 0 0 /usr/bin/x

1334 www-data 20 1329 0 s 87m 1m 2 0.00 0.01 1 00:00.85 0 0 0 0 nginx:

上面的指令也可用于顯示子系統資訊。

$ collectl --top -scm

為像ps指令一樣列出所有程序且沒有後續更新,用“c”指令讓其計數至1. $ collectl -c1 -sz -i:1

上面的指令将會列出類似“ps -e”指令的所有程序。“procfilt”用于從所有程序中過濾出特定的程序資訊。“procopts”用于指定另一組微調程序清單顯示的指令。

collectl有内置指令來完成像vmstat一樣的功能。

$ collectl --vmstat

#procs ---------------memory (kb)--------------- --swaps-- -----io---- --system-- ----cpu-----

# r b swpd free buff cache inact active si so bi bo in cs us sy id wa

1 0 0 1733m 242m 1922m 1137m 710m 0 0 0 108 1982 3918 2 0 95 1

1 0 0 1733m 242m 1922m 1137m 710m 0 0 0 0 1906 3886 1 0 98 0

1 0 0 1733m 242m 1922m 1137m 710m 0 0 0 0 1739 3480 3 0 96 0

下面的指令以一秒為間隔,統計5次cpu資訊并和時間一起顯示出詳細資訊(冗長)。

$ collectl -sc -c5 -i1 --verbose -ot

# cpu summary (intr, ctxsw &amp; proc /sec)

#time user nice sys wait irq soft steal idle cpus intr ctxsw proc runq run avg1 avg5 avg15 runt blkt

14:22:10 11 0 0 0 0 0 0 87 4 1312 2691 0 866 1 0.78 0.86 0.78 1 0

14:22:11 15 0 0 0 0 0 0 84 4 1283 2496 0 866 1 0.78 0.86 0.78 1 0

14:22:12 17 0 0 0 0 0 0 82 4 1342 2658 0 866 0 0.78 0.86 0.78 0 0

14:22:13 15 0 0 0 0 0 0 84 4 1241 2429 0 866 1 0.78 0.86 0.78 1 0

14:22:14 11 0 0 0 0 0 0 88 4 1270 2488 0 866 0 0.80 0.87 0.78 0 0

改變"-s"變量檢視不同的子系統。

本文的介紹不過是對collectl這個強大工具的一些淺見。本文本希望展示它有多靈活,其實通過以上的讨論讓我們了解了包括記錄及回尋捕獲的資料,以多種檔案格式導出資料并将資料轉換為可被廣泛的工具分析的格式等等功能的實作。

collectl提供的另一大功能便是像服務一樣運作,對遠端linux機器或完整的伺服器叢集提供遠端監控,其表現堪稱完美。

原文釋出時間為:2014-04-10

本文來自雲栖社群合作夥伴“linux中國”

繼續閱讀