Terminal pogryzł człowieka: dstat

Niekiedy potrzebujemy dowiedzieć się nieco dokładniej co w komputerze (serwerze) piszczy. Dlatego trzymamy do tego celu pod ręką kilka różnych narzędzi – np. iostat, vmstat, netstat oraz ifstat. Sprytniejsi natomiast używają dstat, który udostępnia podobne dane jak programy wymienione wcześniej.

dstat i dane
Krótki rzut oka na listę parametrów tego programu rodzi momentalnie pytanie „czy jest coś, czego tego program nie pokazuje”? A zatem:

  • Łączy w sobie informacje z vmstat, iostat, ifstat, netstat i innych,
  • Pokazuje statystyki w dokładnie tych samych ramach czasowych,
  • Włączanie/układanie liczników w sposób najbardziej korzystny dla analizy,
  • Modułowa konstrukcja (tak, wtyczki),
  • Napisany w Pythonie – łatwa rozbudowa,
  • Zawiera wiele zewnętrznych wtyczek,
  • Możliwość pokazywania przerwań urządzeń,
  • Bardzo dokładne wskazania czasowe, bez błędów/przesunięć nawet na obciążonym systemie,
  • Pokazuje dokładnie jednostki i ogranicza błędy konwersji,
  • Uwypukla różne jednostki za pomocą kolorów,
  • Pozwala na eksport wyjścia do CSV, a następnie importowanie przez np. Gnumeric lub Excel.

Wygląda zachęcająco, ale nadal nie wiemy, co możemy monitorować. Jest na to sposób:

~$ dstat --list
internal:
        aio, cpu, cpu24, disk, disk24, disk24old, epoch, fs, int, int24, io, ipc, load, lock, mem, net, page, page24, proc, raw, socket, swap, swapold, sys, tcp, time, udp, unix, vm
/usr/share/dstat:
        battery, battery-remain, cpufreq, dbus, disk-tps, disk-util, dstat, dstat-cpu, dstat-ctxt, dstat-mem, fan, freespace, gpfs, gpfs-ops, helloworld, innodb-buffer, innodb-io, innodb-ops, lustre, memcache-hits, mysql-io, mysql-keys, mysql5-cmds, mysql5-io, mysql5-keys, net-packets, nfs3, nfs3-ops, nfsd3, nfsd3-ops, ntp, postfix, power, proc-count, qmail, rpc, rpcd, sendmail, snooze, squid, test, thermal, top-bio, top-bio-adv, top-childwait, top-cpu, top-cpu-adv, top-cputime, top-cputime-avg, top-int, top-io, top-io-adv, top-latency, top-latency-avg, top-mem, top-oom, utmp, vm-memctl, vmk-hba, vmk-int, vmk-nic, vz-cpu, vz-io, vz-ubc, wifi

Powyższa lista to efekt wtyczek, które obsługuje program. Mamy zatem moduły „wbudowane” (internal) oraz te umieszczone w /usr/share/dstat. Aby wyświetlić cokolwiek, wystarczy:

~$ dstat --cpu
----total-cpu-usage----                                                                                                                                                        
usr sys idl wai hiq siq                                                                                                                                                        
  4   1  95   0   0   0                                                                                                                                                        
  2   0  98   0   0   0
  1   0  98   0   0   0
  1   0  99   0   0   0
  1   0  99   0   0   0
  1   0  99   0   0   0

Ale to nie wszystko. Najciekawsza przypadłość dstat pozwala nam na dokładne skorelowanie różnych obciążeń i ich wpływu na poszczególne elementy systemu. Np. obciążenie dysku a liczba zapytań SQL. Obciążenie procesora, a aktywność sieciowa. I tak dalej. Wystarczy uruchomić program z listą modułów z których chcemy otrzymać wyniki na ekranie:

~$ dstat --cpu --disk --net --page --sys
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw 
  4   1  95   0   0   0|  33k   44k|   0     0 |   0     0 | 260   995 
  6   0  93   1   0   0|   0    48k|   0     0 |   0     0 | 732  6075 
  5   1  95   0   0   0|   0     0 | 161B  271B|   0     0 | 585  4696 
  4   1  96   0   0   0|   0     0 | 407B  390B|   0     0 |2886  5165 
  2   0  98   0   0   0|   0     0 |   0     0 |   0     0 | 477   920 
  2   0  98   0   0   0|   0     0 |   0     0 |   0     0 | 447  2118 
  1   0  99   0   0   0|   0     0 |   0     0 |   0     0 | 296   893 
  1   0  99   0   0   0|   0    44k|   0     0 |   0     0 | 316   596 
  1   0  99   0   0   0|   0     0 |   0     0 |   0     0 | 266   592

Czyż to nie fantastyczne? W jednym momencie w każdej z linii otrzymujemy dane dotyczące CPU, operacji dyskowych i sieciowych, pamięci podręcznej i informacje o przerwaniach i context switches. Na dodatek ładnie pokolorowane (patrz zrzut ekranu). Równie banalnie uzyskamy listę procesów najbardziej obciążających CPU i pamięć w danym momencie:

~$ dstat --cpu --top-cpu --top-mem
----total-cpu-usage---- -most-expensive- --most-expensive-
usr sys idl wai hiq siq|  cpu process   |  memory process 
  4   1  95   0   0   0|firefox      0.2|firefox      877M
  2   0  98   0   0   0|firefox      1.0|firefox      879M
  1   0  98   1   0   0|firefox      0.6|firefox      880M
  1   0  98   0   0   0|firefox      1.1|firefox      882M
  2   0  98   0   0   0|firefox      1.5|firefox      883M
  1   0  98   0   0   0|firefox      1.0|firefox      884M
  1   0  99   0   0   0|firefox      1.1|firefox      884M

Program niestety wymaga przyjrzenia się i zrozumienia danych jakimi nas częstuje (np. CPU – usr sys idl wai hiq siq). Niemniej wszystko znajdziemy w manualu, który przy takiej ogromnej ilości różnorodności parametrów warto co najmniej przejrzeć.

Kolejną cechą za którą można polubić dstat to jego obecność w głównych repozytoriach większości dystrybucji.