Collectl: una eina avançada de control del rendiment tot en un per a Linux


El deure més important d'un administrador de sistemes Linux és assegurar-se que el sistema que està administrant està en molt bones condicions. Hi ha moltes eines disponibles per als administradors del sistema Linux que poden ajudar a supervisar i mostrar processos en un sistema com htop, però cap d'aquestes eines pot competir amb collectl.

collectl és una utilitat de línia d'ordres molt rica en funcions que es pot utilitzar per recopilar dades de rendiment que descriuen l'estat actual del sistema. A diferència de la majoria de les altres eines de monitorització, collectl no se centra en un nombre limitat de mètriques del sistema, sinó que pot recopilar informació sobre molts tipus diferents de recursos del sistema com ara CPU, disc, memòria, xarxa, sòcols, tcp, inodes, infinitband, etc. lustre, memòria, nfs, processos, quàdriques, lloses i buddyinfo.

Una cosa molt bona d'utilitzar collectl és que també pot jugar el paper d'utilitats dissenyades només amb un propòsit específic, com ara top, ps, iotop i moltes altres. Quines són algunes de les característiques que fan que la col·lecció sigui una eina útil?

Després de fer moltes investigacions, he compilat una llista amb algunes de les característiques més importants de la utilitat de línia d'ordres collectl per a vosaltres.

  1. Pot executar-se de manera interactiva, com a dimoni o tots dos.
  2. Pot mostrar la sortida en molts formats.
  3. Té la capacitat de supervisar gairebé qualsevol subsistema.
  4. Pot jugar el paper de moltes altres utilitats com ps, top, iotop, vmstat.
  5. Pot gravar i reproduir les dades capturades.
  6. Pot exportar les dades en diversos formats de fitxer. (és molt útil quan es volen analitzar les dades amb eines externes).
  7. Pot executar-se com a servei per supervisar màquines remotes o un clúster de servidors sencer.
  8. Pot mostrar les dades al terminal, escriure en un fitxer o en un sòcol.

Com instal·lar collectl a Linux

La utilitat collectl s'executa a totes les distribucions de Linux, l'únic que necessita per executar-se és perl, així que assegureu-vos que teniu Perl instal·lat a la vostra màquina abans d'instal·lar collectl a la vostra màquina.

La següent comanda es pot utilitzar per instal·lar la utilitat collectl en màquines basades en Debian com Ubuntu.

$ sudo apt-get install collectl

Si utilitzeu la distribució basada en Red Hat, podeu agafar-la fàcilment dels repositoris amb l'ordre yum.

# yum install collectl

Alguns exemples pràctics de la utilitat collectl

Un cop finalitzada la instal·lació de l'eina collectl, podeu executar-la fàcilment des del terminal, fins i tot sense cap opció. La següent comanda mostrarà informació sobre les estadístiques de la CPU, el disc i la xarxa en un format molt breu i llegible per humans.

# collectl

waiting for 1 second sample...
#
#cpu sys inter  ctxsw KBRead  Reads KBWrit Writes   KBIn  PktIn  KBOut  PktOut 
  13   5   790   1322      0      0     92      7      4     13      0       5 
  10   2   719   1186      0      0      0      0      3      9      0       4 
  12   0   753   1188      0      0     52      3      2      5      0       6 
  13   2   733   1063      0      0      0      0      1      1      0       1 
  25   2   834   1375      0      0      0      0      1      1      0       1 
  28   2   870   1424      0      0     36      7      1      1      0       1 
  19   3   949   2271      0      0     44      3      1      1      0       1 
  17   2   809   1384      0      0      0      0      1      6      0       6 
  16   2   732   1348      0      0      0      0      1      1      0       1 
  22   4   993   1615      0      0     56      3      1      2      0       3

Com podeu veure a la sortida anterior que es mostra a la pantalla del terminal, és molt fàcil treballar amb els valors de mètriques del sistema presents a la sortida de l'ordre perquè apareix en una sola línia.

Quan la utilitat collectl s'executa sense cap opció, mostra informació sobre els subsistemes següents:

  1. cpu
  2. discos
  3. xarxa

Nota: En el nostre cas, un subsistema és tot tipus de recurs del sistema que es pot mesurar.

També podeu mostrar les estadístiques de tots els subsistemes excepte les lloses combinant l'ordre amb l'opció –all com es mostra a continuació.

# collectl --all

waiting for 1 second sample...
#
#cpu sys inter  ctxsw Cpu0 Cpu1 Free Buff Cach Inac Slab  Map   Fragments KBRead  Reads KBWrit Writes   KBIn  PktIn  KBOut  PktOut   IP  Tcp  Udp Icmp  Tcp  Udp  Raw Frag Handle Inodes  Reads Writes Meta Comm 
  16   3   817   1542  430  390   1G 175M   1G 683M 193M   1G nsslkjjebbk      0      0     24      3      1      1      0       1    0    0    0    0  623    0    0    0   8160 240829      0      0    0    0 
  11   1   745   1324  316  426   1G 175M   1G 683M 193M   1G nsslkjjebbk      0      0      0      0      0      3      0       2    0    0    0    0  622    0    0    0   8160 240828      0      0    0    0 
  15   2   793   1683  371  424   1G 175M   1G 683M 193M   1G ssslkjjebbk      0      0      0      0      1      1      0       1    0    0    0    0  622    0    0    0   8160 240829      0      0    0    0 
  16   2   872   1875  427  446   1G 175M   1G 683M 193M   1G ssslkjjebbk      0      0     24      3      1      1      0       1    0    0    0    0  622    0    0    0   8160 240828      0      0    0    0 
  24   2   842   1383  473  368   1G 175M   1G 683M 193M   1G ssslkjjebbk      0      0    168      6      1      1      0       1    0    0    0    0  622    0    0    0   8160 240828      0      0    0    0 
  27   3   844   1099  478  365   1G 175M   1G 683M 193M   1G nsslkjjebbk      0      0      0      0      1      6      1       9    0    0    0    0  622    0    0    0   8160 240828      0      0    0    0 
  26   5   823   1238  396  428   1G 175M   1G 683M 193M   1G ssslkjjebbk      0      0      0      0      2     11      3       9    0    0    0    0  622    0    0    0   8160 240828      0      0    0    0 
  15   1   753   1276  361  391   1G 175M   1G 683M 193M   1G ssslkjjebbk      0      0     40      3      1      2      0       3    0    0    0    0  623    0    0    0   8160 240829      0      0    0    0

Però, com controleu l'ús de la CPU amb l'ajuda de la utilitat? L'opció -s s'ha d'utilitzar per controlar quines dades del subsistema s'han de recollir o reproduir.

Per exemple, la següent comanda es pot utilitzar per supervisar el resum de l'ús de la CPU.

# collectl -sc

waiting for 1 second sample...
#
#cpu sys inter  ctxsw 
  15   2   749   1155 
  16   3   772   1445 
  14   2   793   1247 
  27   4   887   1292 
  24   1   796   1258 
  16   1   743   1113 
  15   1   743   1179 
  14   1   706   1078 
  15   1   764   1268

Què passa quan combineu l'ordre amb scdn? La millor manera d'aprendre a utilitzar les eines de línia d'ordres és practicar tant com sigui possible, així que executeu l'ordre següent al vostre terminal i vegeu què passarà.

# collectl -scdn

waiting for 1 second sample...
#
#cpu sys inter  ctxsw KBRead  Reads KBWrit Writes   KBIn  PktIn  KBOut  PktOut 
  25   4   943   3333      0      0      0      0      1      1      0       2 
  27   3   825   2910      0      0      0      0      1      1      0       1 
  27   5   886   2531      0      0      0      0      0      0      0       1 
  20   4   872   2406      0      0      0      0      1      1      0       1 
  26   1   854   2091      0      0     20      2      1      1      0       1 
  39   4  1004   3398      0      0      0      0      2      8      3       6 
  41   6   955   2464      0      0     40      3      1      2      0       3 
  25   7   890   1609      0      0      0      0      1      1      0       1 
  16   2   814   1165      0      0    796     43      2      2      0       2 
  14   1   779   1383      0      0     48      6      1      1      0       1 
  11   2   795   1285      0      0      0      0      2     14      1      14

Podeu entendre fàcilment que l'opció predeterminada és cdn, és a dir, cpu, discs i dades de xarxa. El resultat de l'ordre és el mateix amb la sortida de collectl -scn

Si voleu recollir dades sobre la memòria, utilitzeu l'ordre següent.

# collectl -sm

waiting for 1 second sample...
#
#Free Buff Cach Inac Slab  Map 
   1G 177M   1G 684M 193M   1G 
   1G 177M   1G 684M 193M   1G 
   1G 177M   1G 684M 193M   1G 
   1G 177M   1G 684M 193M   1G 
   1G 177M   1G 684M 193M   1G 
   1G 177M   1G 684M 193M   1G 
   1G 177M   1G 684M 193M   1G 
   1G 177M   1G 684M 193M   1G

La sortida anterior és molt útil quan voleu obtenir informació detallada sobre l'ús de la memòria, la memòria lliure i altres coses importants per al rendiment del vostre sistema.

Què tal algunes dades sobre tcp? Utilitzeu l'ordre següent per fer-ho.

# collectl -st

waiting for 1 second sample...
#
#  IP  Tcp  Udp Icmp 
    0    0    0    0 
    0    0    0    0 
    0    0    0    0 
    0    0    0    0 
    0    0    0    0 
    0    0    0    0 
    0    0    0    0 
    0    0    0    0 
    0    0    0    0 
    0    0    0    0 
    0    0    0    0

Després d'haver adquirit una mica d'experiència, podeu combinar fàcilment les opcions per obtenir els resultats que voleu. Per exemple, podeu combinar la t per a tcp i la c per a la CPU. La següent comanda ho fa.

# collectl -stc

waiting for 1 second sample...
#
#cpu sys inter  ctxsw   IP  Tcp  Udp Icmp 
  23   8   961   3136    0    0    0    0 
  24   5   916   3662    0    0    0    0 
  21   8   848   2408    0    0    0    0 
  30  10   916   2674    0    0    0    0 
  38   3   826   1752    0    0    0    0 
  31   3   820   1408    0    0    0    0 
  15   5   781   1335    0    0    0    0 
  17   3   802   1314    0    0    0    0 
  17   3   755   1218    0    0    0    0 
  14   2   788   1321    0    0    0    0

Ens costa als humans recordar totes les opcions disponibles, així que estic publicant la llista resum dels subsistemes compatibles amb l'eina.

  1. b: informació del company (fragmentació de la memòria)
  2. c – CPU
  3. d – Disc
  4. f – Dades NFS V3
  5. i – Inode i sistema de fitxers
  6. j – Interrupcions
  7. l – Lustre
  8. m – Memòria
  9. n – Xarxes
  10. s – Endolls
  11. t – TCP
  12. x – Interconnexió
  13. y – Slabs (cachés d'objectes del sistema)

Una dada molt important per a un administrador del sistema o un usuari de Linux són les dades recopilades sobre l'ús del disc. L'ordre següent us ajudarà a controlar l'ús del disc.

# collectl -sd

waiting for 1 second sample...
#
#KBRead  Reads KBWrit Writes 
      0      0      0      0 
      0      0      0      0 
      0      0     92      7 
      0      0      0      0 
      0      0     36      3 
      0      0      0      0 
      0      0      0      0 
      0      0    100      7 
      0      0      0      0

També podeu utilitzar l'opció -sD per recollir dades en discs individuals, però heu de saber que la informació sobre el total de discs no s'informarà.

# collectl -sD

waiting for 1 second sample...

# DISK STATISTICS (/sec)
#           Pct
#Name       KBytes Merged  IOs Size  KBytes Merged  IOs Size  RWSize  QLen  Wait SvcTim Util
sda              0      0    0    0      52     11    2   26      26     1     8      8    1
sda              0      0    0    0       0      0    0    0       0     0     0      0    0
sda              0      0    0    0      24      0    2   12      12     0     0      0    0
sda              0      0    0    0     152      0    4   38      38     0     0      0    0
sda              0      0    0    0     192     45    3   64      64     1    20     20    5
sda              0      0    0    0     204      0    2  102     102     0     0      0    0
sda              0      0    0    0       0      0    0    0       0     0     0      0    0
sda              0      0    0    0     116     26    3   39      38     1    16     16    4
sda              0      0    0    0       0      0    0    0       0     0     0      0    0
sda              0      0    0    0       0      0    0    0       0     0     0      0    0
sda              0      0    0    0      32      5    3   11      10     1    16     16    4
sda              0      0    0    0       0      0    0    0       0     0     0      0    0

També podeu utilitzar altres subsistemes de detall per recollir dades detallades. A continuació es mostra una llista dels subsistemes detallats.

  1. C – CPU
  2. D – Disc
  3. E: dades ambientals (ventilador, potència, temperatura), mitjançant ipmitool
  4. F – Dades NFS
  5. J – Interrupcions
  6. L: detall de lluent OST O detall del sistema de fitxers del client
  7. N – Xarxes
  8. T – 65 comptadors TCP només disponibles en format de trama
  9. X – Interconnexió
  10. Y – Slabs (cachés d'objectes del sistema)
  11. Z – Processos

Hi ha moltes opcions disponibles a la utilitat collectl, però no hi ha prou temps i espai per cobrir-les totes en un sol article. No obstant això, val la pena esmentar i ensenyar com utilitzar la utilitat com a superior i ps.

És molt fàcil fer que collectl funcioni com a utilitat principal, només cal que executeu l'ordre següent al vostre terminal i veureu la sortida similar que us ofereix l'eina superior quan s'executa al vostre sistema Linux.

# collectl --top

# TOP PROCESSES sorted by time (counters are /sec) 13:11:02
# PID  User     PR  PPID THRD S   VSZ   RSS CP  SysT  UsrT Pct  AccuTime  RKB  WKB MajF MinF Command
^COuch!tecmint  20     1   40 R    1G  626M  0  0.01  0.14  15  28:48.24    0    0    0  109 /usr/lib/firefox/firefox 
 3403  tecmint  20     1   40 R    1G  626M  1  0.00  0.20  20  28:48.44    0    0    0  600 /usr/lib/firefox/firefox 
 5851  tecmint  20  4666    0 R   17M   13M  0  0.02  0.06   8  00:01.28    0    0    0    0 /usr/bin/perl 
 1682  root     20  1666    2 R  211M   55M  1  0.02  0.01   3  03:10.24    0    0    0   95 /usr/bin/X 
 3454  tecmint  20  3403    8 S  216M   45M  1  0.01  0.02   3  01:23.32    0    0    0    0 /usr/lib/firefox/plugin-container 
 4658  tecmint  20  4657    3 S  207M   17M  1  0.00  0.02   2  00:08.23    0    0    0  142 gnome-terminal 
 2890  tecmint  20  2571    3 S  340M   68M  0  0.00  0.01   1  01:19.95    0    0    0    0 compiz 
 3521  tecmint  20     1   24 S  710M  148M  1  0.01  0.00   1  01:47.84    0    0    0    0 skype 
    1  root     20     0    0 S    3M    2M  0  0.00  0.00   0  00:02.57    0    0    0    0 /sbin/init 
    2  root     20     0    0 S     0     0  1  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.60    0    0    0    0 ksoftirqd/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      0     2    0 S     0     0  0  0.00  0.00   0  00:00.00    0    0    0    0 kworker/u:0H 
    8  root     RT     2    0 S     0     0  0  0.00  0.00   0  00:04.42    0    0    0    0 migration/0 
    9  root     20     2    0 S     0     0  0  0.00  0.00   0  00:00.00    0    0    0    0 rcu_bh 
   10  root     20     2    0 R     0     0  0  0.00  0.00   0  00:02.22    0    0    0    0 rcu_sched 
   11  root     RT     2    0 S     0     0  0  0.00  0.00   0  00:00.05    0    0    0    0 watchdog/0 
   12  root     RT     2    0 S     0     0  1  0.00  0.00   0  00:00.07    0    0    0    0 watchdog/1 
   13  root     20     2    0 S     0     0  1  0.00  0.00   0  00:00.73    0    0    0    0 ksoftirqd/1 
   14  root     RT     2    0 S     0     0  1  0.00  0.00   0  00:01.96    0    0    0    0 migration/1 
   16  root      0     2    0 S     0     0  1  0.00  0.00   0  00:00.00    0    0    0    0 kworker/1:0H 
   17  root      0     2    0 S     0     0  1  0.00  0.00   0  00:00.00    0    0    0    0 cpuset

I ara, per últim, però no menys important, per utilitzar la utilitat collectl com a eina ps, executeu l'ordre següent al vostre terminal. Obtindreu informació sobre els processos del vostre sistema de la mateixa manera que ho feu quan executeu l'ordre ps al vostre terminal.

# collectl -c1 -sZ -i:1

waiting for 1 second sample...

### RECORD    1 >>> tecmint-vgn-z13gn <<< (1397979716.001) (Sun Apr 20 13:11:56 2014) ###

# PROCESS SUMMARY (counters are /sec)
# PID  User     PR  PPID THRD S   VSZ   RSS CP  SysT  UsrT Pct  AccuTime  RKB  WKB MajF MinF Command
    1  root     20     0    0 S    3M    2M  0  0.00  0.00   0  00:02.57    0    0    0    0 /sbin/init 
    2  root     20     0    0 S     0     0  1  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.60    0    0    0    0 ksoftirqd/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      0     2    0 S     0     0  0  0.00  0.00   0  00:00.00    0    0    0    0 kworker/u:0H 
    8  root     RT     2    0 S     0     0  0  0.00  0.00   0  00:04.42    0    0    0    0 migration/0 
    9  root     20     2    0 S     0     0  0  0.00  0.00   0  00:00.00    0    0    0    0 rcu_bh 
   10  root     20     2    0 S     0     0  0  0.00  0.00   0  00:02.24    0    0    0    0 rcu_sched 
   11  root     RT     2    0 S     0     0  0  0.00  0.00   0  00:00.05    0    0    0    0 watchdog/0 
   12  root     RT     2    0 S     0     0  1  0.00  0.00   0  00:00.07    0    0    0    0 watchdog/1 
   13  root     20     2    0 S     0     0  1  0.00  0.00   0  00:00.73    0    0    0    0 ksoftirqd/1 
   14  root     RT     2    0 S     0     0  1  0.00  0.00   0  00:01.96    0    0    0    0 migration/1 
   16  root      0     2    0 S     0     0  1  0.00  0.00   0  00:00.00    0    0    0    0 kworker/1:0H 
   17  root      0     2    0 S     0     0  1  0.00  0.00   0  00:00.00    0    0    0    0 cpuset 
   18  root      0     2    0 S     0     0  1  0.00  0.00   0  00:00.00    0    0    0    0 khelper 
   19  root     20     2    0 S     0     0  0  0.00  0.00   0  00:00.00    0    0    0    0 kdevtmpfs 
   20  root      0     2    0 S     0     0  0  0.00  0.00   0  00:00.00    0    0    0    0 netns 
   21  root     20     2    0 S     0     0  0  0.00  0.00   0  00:00.00    0    0    0    0 bdi-default 
   22  root      0     2    0 S     0     0  0  0.00  0.00   0  00:00.00    0    0    0    0 kintegrityd

Estic molt segur que a molts administradors de sistemes Linux els agradarà aquesta eina i sentiran el seu poder quan l'utilitzin al màxim. Si voleu avançar els vostres coneixements sobre collectl al següent nivell, consulteu les seves pàgines de manual i seguiu practicant.

Només cal que escriviu la següent comanda al vostre terminal i comenceu a llegir.

# man collectl

Enllaços de referència

Col·lecció pàgina d'inici