Linux系統監控神器--Collectl

爲使系統良好運轉,Linux系統管理員常常須要監測cpu,內存,磁盤,網絡等系統信息。Linux上已有iotop,top,free,htop,sar等豐富的常規工具來實現監測功能。今天讓咱們走進Collectl來了解這個集測試/監控/分析系統性能爲一體的Linux工具。node

Collectl做爲一個輕量級的監控工具,在同類工具中是功能最全的。用戶可監測不一樣的複雜系統矩陣值,並可保留數據以作以後的分析。不一樣於其餘只用來監測特定系統參數的工具,Collectl能夠同時監測不一樣的變量,並以合適的方式記錄它們。linux

摘自Collectl官網 ...ios

不一樣於或聚焦於一小組統計數據、採用惟一輸出方式,或採用迭代、做爲守護進程運行的大部分監測工具,collectl能夠同時所有實現。用戶可選擇各類子系統中的任一系統來監測包括內存,CPU,磁盤,索引節點,無線帶寬,lustre,內存,網絡,網絡文件系統,進程,二次型,slabs,套接口及TCP等信息。nginx

深刻學習前讓咱們先看如下命令。chrome

  1. $ collectl服務器

  2. waiting for1 second sample...網絡

  3. #<--------CPU--------><----------Disks-----------><----------Network---------->app

  4. #cpu sys inter ctxsw KBRead Reads KBWrit Writes KBIn PktIn KBOut PktOutide

  5. 00864177200000100工具

  6. 521338273400820001

  7. 1012222647009230201

  8. 107631722008030102

CPU使用率,磁盤輸入輸出和網絡活動以每秒爲單位來加載。對能夠理解這些數據的人來講這些信息很容易讀懂。這項列表在給定的時間間隔裏會持續增長,並可直接造成一項文件跟蹤日誌。collectl工具提供了各類命令來對這些數據進行記錄,查找及作其餘處理。

安裝collectl工具

Ubuntu/Debian用戶來講Collectl是默認資源,因此使用apt命令即可獲取。

  1. $ sudo apt-get install collectl

Fedora/CentOS用戶使用yum命令即可獲取。

  1. $ yum install collectl

使用

必要的瞭解 - Collectl子系統

子系統是可檢測到的不一樣系統資源類型。像CPU,內存,帶寬等等均可構成一個子系統。只運行collectl命令將以批處理模式輸出CPU,磁盤和網絡子系統信息,咱們在上文已看到相關內容。

從操做說明能夠看到,Collectl能夠識別如下子系統。

  1. 總計子系統

  2. - buddy info (內存片斷)

  3. - CPU

  4. -Disk

  5. - NFS V3 Data

  6. -InodeandFileSystem

  7. -Interrupts

  8. -Lustre

  9. -Memory

  10. -Networks

  11. -Sockets

  12. - TCP

  13. -Interconnect

  14. -Slabs(system object caches)

  15. 細節子系統

  16. 這是一系列的詳細信息,大部分狀況下都會由相應的總計數據衍生出來。目前「環境變量」和「進程」2類沒有相應的總計數據。若是有3個磁盤,選擇-sd,將只會看到3個磁盤組合出的單一信息。若是選擇-sD,將會分別顯示各磁盤信息。

  17. - CPU

  18. -Disk

  19. -Environmental data (fan, power, temp), via ipmitool

  20. - NFS Data

  21. -Interrupts

  22. -Lustre OST detail OR client Filesystem detail

  23. -Memory node data, which is also known as numa data

  24. -Networks

  25. -65 TCP counters only available in plot format

  26. -Interconnect

  27. -Slabs(system object caches)

  28. -Processes

使用「-s」來監測特定的子系統並向其添加子系統的識別項。如今讓咱們舉幾個例子。

1. 監測cpu使用率

用「-sc」實現CPU總使用率的監測

  1. $ collectl -sc

  2. waiting for1 second sample...

  3. #<--------CPU-------->

  4. #cpu sys inter ctxsw

  5. 3018003729

  6. 3017673599

使用「-C」觀察各個單獨的CPU使用狀況。結果將會輸出多行,分別對應一個CPU。

  1. $ collectl -sC

  2. waiting for1 second sample...

  3. # SINGLE CPU STATISTICS

  4. # Cpu User Nice Sys Wait IRQ Soft Steal Idle

  5. 0300000096

  6. 1300000096

  7. 2200000097

  8. 3100000098

  9. 0200000097

  10. 1202000095

  11. 2100000098

  12. 3401000095

若是須要,能夠同時使用C和c來獲取單項CPU監測數據和彙總數據。

2. 內存監測

使用m子系統查看內存。

  1. $ collectl -sm

  2. waiting for1 second sample...

  3. #<-----------Memory----------->

  4. #Free Buff Cach Inac Slab Map

  5. 2G220M1G1G210M3G

  6. 2G220M1G1G210M3G

  7. 2G220M1G1G210M3G

不難解釋。 M用來查看更多內存的詳細信息。

  1. $ collectl -sM

  2. waiting for1 second sample...

  3. # MEMORY STATISTICS

  4. # Node Total Used Free Slab Mapped Anon Locked Inact Hit%

  5. 07975M5939M2036M215720K372184K06652K1434M0

  6. 07975M5939M2036M215720K372072K06652K1433M0

這相似於免費報告嗎?

3. 查看磁盤使用狀況

d和D能夠查看磁盤使用的概況和詳細狀況。

  1. $ collectl -sd

  2. waiting for1 second sample...

  3. #<----------Disks----------->

  4. #KBRead Reads KBWrit Writes

  5. 4113624

  6. 008013

  7. $ collectl -sD

  8. waiting for1 second sample...

  9. # DISK STATISTICS (/sec)

  10. # <---------reads---------><---------writes---------><--------averages--------> Pct

  11. #Name KBytes Merged IOs Size KBytes Merged IOs Size RWSize QLen Wait SvcTim Util

  12. sda 0000000000000

  13. sda 0000000000000

  14. sda 10211715322621

  15. sda 0000921151818112125

「--verbose」命令能夠用來查看附加信息。和D命令不一樣,它將概況擴展,包含了更多信息。

  1. $ collectl -sd --verbose

4. 同時報告多系統狀況

若是想要同時獲得CPU,內存和磁盤報告,那麼同時使用子命令組合來實現。

  1. $ collectl -scmd

  2. waiting for1 second sample...

  3. #<--------CPU--------><-----------Memory-----------><----------Disks----------->

  4. #cpu sys inter ctxsw Free Buff Cach Inac Slab Map KBRead Reads KBWrit Writes

  5. 40218743341G221M1G1G210M3G0000

  6. 30189640651G221M1G1G210M3G00205

5. 顯示統計時間

若要將每行的監測信息和時間一同顯示,使用T選項。經過在「-o」參數來指定。

  1. $ collectl -scmd -oT

  2. waiting for1 second sample...

  3. # <--------CPU--------><-----------Memory-----------><----------Disks----------->

  4. #Time cpu sys inter ctxsw Free Buff Cach Inac Slab Map KBRead Reads KBWrit Writes

  5. 12:03:0530196140131G225M1G1G212M3G0000

  6. 12:03:0630188438101G225M1G1G212M3G0000

  7. 12:03:0730201140601G225M1G1G212M3G0000

使用「-oTm」可將時間換成毫秒顯示。

6. 改變樣本計數

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

  1. $ collectl -c1 -sm

  2. waiting for1 second sample...

  3. #<-----------Memory----------->

  4. #Free Buff Cach Inac Slab Map

  5. 1G261M1G1G228M3G

使用i命令可改變動新時間間隔

  1. $ collectl -sm -i2

  2. waiting for2 second sample...

  3. #<-----------Memory----------->

  4. #Free Buff Cach Inac Slab Map

  5. 1G261M1G1G229M3G

上面的命令設定每2秒收集一次內存信息。

7. 像iotop同樣使用collectl

top命令將collectl像iostat/top工具同樣進行智能統計。列表會持續更新,且可使用不一樣字段實現排序。

  1. $ collectl --top iokb

輸出以下

  1. # TOP PROCESSES sorted by iokb (counters are /sec) 09:44:57

  2. # PID User PR PPID THRD S VSZ RSS CP SysT UsrT Pct AccuTime RKB WKB MajF MinF Command

  3. 3104 enlighte 2026833 S 938M33M00.000.00000:09.160400/usr/bin/ktorrent

  4. 1 root 2000 S 26M3M20.000.00000:01.300000/sbin/init

  5. 2 root 2000 S 0030.000.00000:00.000000 kthreadd

  6. 3 root 2020 S 0000.000.00000:00.020000 ksoftirqd/0

  7. 4 root 2020 S 0000.000.00000:00.000000 kworker/0:0

  8. 5 root 020 S 0000.000.00000:00.000000 kworker/0:0H

  9. 7 root RT 20 S 0000.000.00000:00.080000 migration/0

  10. 8 root 2020 S 0020.000.00000:00.000000 rcu_bh

  11. 9 root 2020 S 0000.000.00000:00.000000 rcuob/0

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

若只想顯示上面的5項進程,可用如下命令實現

  1. $ collectl --top iokb,5

若想學習上面的列表裏哪些字段能夠排序,使用以下命令

  1. $ collectl --showtopopts

  2. 下面是應用於進程或數據的最高排序類型列表。某些狀況下你可能會使用某一字段進行排序,但它並不是顯示的一部分。

  3. TOP PROCESS SORT FIELDS

  4. 進程排序字段

  5. Memory

  6. vsz virtual memory

  7. rss resident (physical) memory

  8. Time

  9. syst system time

  10. usrt user time

  11. time total time

  12. accum accumulated time

  13. I/O

  14. rkb KB read

  15. wkb KB written

  16. iokb total I/O KB

  17. rkbc KB read from pagecache

  18. wkbc KB written to pagecache

  19. iokbc total pagecacge I/O

  20. ioall total I/O KB (iokb+iokbc)

  21. rsys read system calls

  22. wsys write system calls

  23. iosys total system calls

  24. iocncl Cancelled write bytes

  25. PageFaults

  26. majf major page faults

  27. minf minor page faults

  28. flt total page faults

  29. ContextSwitches

  30. vctx volunary context switches

  31. nctx non-voluntary context switches

  32. Miscellaneous(best when used with--procfilt)

  33. cpu cpu number

  34. pid process pid

  35. thread total process threads (not counting main)

  36. TOP SLAB SORT FIELDS

  37. numobj total number of slab objects

  38. actobj active slab objects

  39. objsize sizes of slab objects

  40. numslab number of slabs

  41. objslab number of objects in a slab

  42. totsize total memory sizes taken by slabs

  43. totchg change in memory sizes

  44. totpct percent change in memory sizes

  45. name slab names

8. 像top同樣使用collectl

爲使collectl像top,咱們只需以CPU使用率排序輸出進程。

  1. $ collectl --top

輸出以下

  1. # TOP PROCESSES sorted by time (counters are /sec) 14:08:46

  2. # PID User PR PPID THRD S VSZ RSS CP SysT UsrT Pct AccuTime RKB WKB MajF MinF Command

  3. 9471 enlighte 2091020 R 63M22M30.030.101300:00.810003/usr/bin/perl

  4. 3076 enlighte 2026832 S 521M40M20.000.03300:55.140002/usr/bin/yakuake

  5. 3877 enlighte 20335641 S 1G218M10.000.03310:10.500000/opt/google/chrome/chrome

  6. 4625 enlighte 20289536 S 1G241M20.000.02208:24.3900012/usr/lib/firefox/firefox

  7. 5638 enlighte 2033563 S 1G265M10.000.02209:55.040002/opt/google/chrome/chrome

  8. 1186 root 2011524 S 502M76M00.000.01103:02.960000/usr/bin/X

  9. 1334 www-data 2013290 S 87M1M20.000.01100:00.850000 nginx:

上面的命令也可用於顯示子系統信息。

  1. $ collectl --top -scm

9. 像ps同樣列出進程

爲像ps命令同樣列出全部進程且沒有後續更新,用「c」命令讓其計數至1. $ collectl -c1 -sZ -i:1

上面的命令將會列出相似「ps -e」命令的全部進程。「procfilt」用於從全部進程中過濾出特定的進程信息。「procopts」用於指定另外一組微調進程列表顯示的命令。

10. 像vmstat同樣使用collectl

Collectl有內置命令來完成像vmstat同樣的功能。

  1. $ collectl --vmstat

  2. waiting for1 second sample...

  3. #procs ---------------memory (KB)--------------- --swaps-- -----io---- --system-- ----cpu-----

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

  5. 1001733M242M1922M1137M710M0001081982391820951

  6. 1001733M242M1922M1137M710M00001906388610980

  7. 1001733M242M1922M1137M710M00001739348030960

11. 子系統的詳細信息

下面的命令以一秒爲間隔,統計5次CPU信息並和時間一塊兒顯示出詳細信息(冗長)。

  1. $ collectl -sc -c5 -i1 --verbose -oT

  2. waiting for1 second sample...

  3. # CPU SUMMARY (INTR, CTXSW & PROC /sec)

  4. #Time User Nice Sys Wait IRQ Soft Steal Idle CPUs Intr Ctxsw Proc RunQ Run Avg1 Avg5 Avg15 RunT BlkT

  5. 14:22:101100000087413122691086610.780.860.7810

  6. 14:22:111500000084412832496086610.780.860.7810

  7. 14:22:121700000082413422658086600.780.860.7800

  8. 14:22:131500000084412412429086610.780.860.7810

  9. 14:22:141100000088412702488086600.800.870.7800

改變"-s"變量查看不一樣的子系統。

總結

本文的介紹不過是對collectl這個強大工具的一些淺見。本文本但願展現它有多靈活,其實經過以上的討論讓咱們瞭解了包括記錄及回尋捕獲的數據,以多種文件格式導出數據並將數據轉換爲可被普遍的工具分析的格式等等功能的實現。

collectl提供的另外一大功能即是像服務同樣運行,對遠程Linux機器或完整的服務器集羣提供遠程監控,其表現堪稱完美。

Collectl同另外一批可用於處理分析收集數據的名爲Collectl實用工具 (colmux, colgui, colplot)的功能相契合。若是有機會,咱們在以後的文章中會介紹它們。

爲更詳細的瞭解Collectl工具,請登陸它的主頁來學習更多的功能。筆者建議查看FAQs來快速瞭解collectl,讀取collectl文檔獲取深層次的例子。等價命令表也可定位至更多的像sar,iostat,netstat,top等和collectl功能部分等價的經常使用工具。

相關文章
相關標籤/搜索