Collectl: Et avanceret All-in-One Performance Monitoring Tool til Linux
Den vigtigste pligt for en Linux-systemadministrator er at sikre, at det system, han/hun administrerer, er i en meget god stand. Der er mange værktøjer til rådighed for et Linux-systemadministrator, der kan hjælpe med at overvåge og vise processer i et system såsom htop, men ingen af disse værktøjer kan konkurrere med collectl.
collectl er et meget flot funktionsrige kommandolinjeværktøj, der kan bruges til at indsamle ydeevnedata, der beskriver den aktuelle systemstatus. I modsætning til de fleste andre overvågningsværktøjer fokuserer collectl ikke på et begrænset antal systemmålinger, men kan i stedet samle information om mange forskellige typer systemressourcer såsom cpu, disk, hukommelse, netværk, sockets, tcp, inoder, infiniband, glans, hukommelse, nfs, processer, quadrics, plader og buddyinfo.
En meget god ting ved at bruge collectl er, at det også kan spille rollen som hjælpeprogrammer, der kun er designet med et specifikt formål såsom top, ps, iotop og mange andre. Hvad er nogle funktioner, der gør colleclt til et nyttigt værktøj?
Efter at have lavet en masse forskning har jeg samlet en liste med nogle af de vigtigste funktioner i collectl kommandolinjeværktøj til jer.
- Det kan køre interaktivt, som en dæmon eller begge dele.
- Det kan vise output i mange formater.
- Det har evnen til at overvåge næsten ethvert undersystem.
- Det kan spille rollen som mange andre hjælpeprogrammer såsom ps, top, iotop, vmstat.
- Det har evnen til at optage og afspille de optagne data.
- Det kan eksportere dataene i forskellige filformater. (dette er meget nyttigt, når du vil analysere dataene med eksterne værktøjer).
- Det kan køre som en tjeneste til overvågning af eksterne maskiner eller en hel serverklynge.
- Det kan vise dataene i terminalen, skrive til en fil eller et stik.
Sådan installeres collectl i Linux
Collectl-værktøjet kører på alle Linux-distributioner, det eneste det kræver at køre er perl, så sørg for at have Perl installeret i din maskine, før du installerer collectl i din maskine.
Følgende kommando kan bruges til at installere collectl-værktøjet i Debian-baserede maskiner som Ubuntu.
$ sudo apt-get install collectl
Hvis du bruger Red Hat-baseret distro, kan du nemt få fat i det fra repos med yum-kommandoen.
# yum install collectl
Nogle praktiske eksempler på samleværktøjet
Når installationen af collectl-værktøjet er afsluttet, kan du nemt køre det fra terminalen, selv uden nogen mulighed. Den følgende kommando viser oplysninger om cpu, disk og netværksstatistik i et meget kort og menneskeligt læsbart format.
# 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
Som jer kan se fra ovenstående output, der vises på terminalskærmen, er det meget let at arbejde med systemets metrics-værdier, der findes i kommandooutputtet, fordi det vises på en enkelt linje.
Når samleværktøjet udføres uden nogen mulighed, viser det oplysninger om følgende undersystemer:
- cpu
- diske
- netværk
Bemærk: I vores tilfælde er et undersystem enhver type systemressource, der kan måles.
Du kan også vise statistik for alle undersystemer undtagen plader ved at kombinere kommandoen med –all-indstillingen som vist nedenfor.
# 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
Men hvordan overvåger du CPU-brugen ved hjælp af hjælpeprogrammet? Indstillingen ‘-s’ skal bruges til at kontrollere, hvilke undersystemdata der skal indsamles eller afspilles.
For eksempel kan følgende kommando bruges til at overvåge resuméet af CPU-brugen.
# 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
Hvad sker der, når du kombinerer kommandoen med "scdn"? Den bedste måde at lære at bruge kommandolinjeværktøjer er at øve så meget som muligt, så kør følgende kommando i din terminal og se, hvad der skal ske.
# 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
Du kan let forstå, at standardindstillingen er “cdn”, den står for cpu, diske og netværksdata. Resultatet af kommandoen er det samme med output fra “collectl -scn”
Hvis du vil indsamle data om hukommelsen, skal du bruge følgende kommando.
# 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
Ovenstående output er meget nyttig, når du vil have nogle detaljerede oplysninger om din hukommelsesforbrug, ledig hukommelse og andre vigtige ting til dit systems ydeevne.
Hvad med nogle data på tcp? Brug følgende kommando til at gøre det.
# 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
Når du har fået nogle erfaringer, kan du nemt kombinere muligheder for at få de ønskede resultater. For eksempel kan du kombinere “t” for tcp og “c” for cpu. Den følgende kommando gør det.
# 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
Det er svært for os mennesker at huske alle de tilgængelige muligheder, så jeg sender en oversigtsliste over undersystemer, der understøttes af værktøjet.
- b - veninfo (hukommelsesfragmentering)
- c - CPU
- d - Disk
- f - NFS V3-data
- i - Inode- og filsystem
- j - afbryder
- l - glans
- m - Hukommelse
- n - Netværk
- s - stikkontakter
- t - TCP
- x - Interconnect
- y - plader (systemobjektcacher)
Et meget vigtigt stykke data for en systemadministrator eller en Linux-bruger er de data, der indsamles på diskbrug. Følgende kommando hjælper dig med at overvåge diskforbruget.
# 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
Du kan også bruge indstillingen “-sD” til at indsamle data på individuelle diske, men du skal vide, at oplysninger om samlede diske ikke rapporteres.
# 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
Du kan også bruge andre detaljerede undersystemer til at indsamle detaljerede data. Følgende er en liste over detaljerede undersystemer.
- C - CPU
- D - disk
- E - Miljødata (ventilator, strøm, temp) via ipmitool
- F - NFS-data
- J - afbryder
- L - Luster OST-detaljer ELLER klientfilsystemdetaljer
- N - netværk
- T - 65 TCP-tællere er kun tilgængelige i plotformat
- X - sammenkobling
- Y - plader (systemobjektcacher)
- Z - Processer
Der er mange tilgængelige muligheder i collectl-værktøjet, men der er ikke nok tid og plads til at dække dem alle i kun en artikel. Det er dog værd at nævne og lære, hvordan man bruger værktøjet som top og ps.
Det er meget let at få collectl til at fungere som det øverste værktøj, bare kør følgende kommando i din terminal, og du vil se den lignende output, som topværktøjet giver dig, når den udføres i dit Linux-system.
# 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
Og nu sidst men ikke mindst at bruge collectl-værktøjet, da ps-værktøjet kører følgende kommando i din terminal. Du får oplysninger om processer i dit system på samme måde som når du kører kommandoen "ps" i din 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
Jeg er meget sikker på, at mange Linux-systemadministratorer vil kunne lide dette værktøj og vil føle sin magt, når de bruger det fuldt ud. Hvis du gerne vil videreudvikle din viden om collectl til det næste niveau, se dens manualsider og fortsæt med at øve.
Skriv bare følgende kommando i din terminal og start læsningen.
# man collectl
Reference Links
collectl Hjemmeside