NetBSD performance log

Ten tekst opisuje prosty sposób podglądania "intymnego życia" systemu.
Podziękowania dla Dawida Szymańskiego za wskazówki i inspirację.
Monitorowaniem systemu warto zainteresować się w co najmniej trzech przypadkach:
  • z czystej ciekawości - jeśli chcemy wiedzieć więcej;
  • jeśli musimy wiedzieć więcej, by dostroić działający system;
  • jeśli z niejasnych przyczyn nie działa poprawnie, wiesza się lub restartuje.

<DawS> widzisz, każdy normalny admin ma na swojej maszynie coś, co możemy nazwać 'performance logami' 

"Jak trwoga, to do loga"

W razie problemów odruchową i jak najbardziej uprawnioną reakcją jest przejrzenie zawartości logów systemowych i aplikacyjnych, ich monitorowanie (tail -f <plik.logu>), korzystanie z aplikacji w rodzaju top, testowanie sprzętu odpowiednimi programami diagnostycznymi itd. W wielu sytuacjach będzie to jednak niewystarczające. Dodatkowo, duża ilość krytycznych parametrów systemu, powiązania między nimi i ich dynamiczny charakter nie ułatwiają zadania.

Skorzystamy z programu vmstat jako monitora/źródła danych, z których następnie gnuplot wygeneruje wykres. Na osi poziomej wykresu odkłada się czas. Osie pionowe natomiast mają różne skale (dlaczego? obejrzyj zawartość vmstat.log). To, która oś dotyczy danego parametru wskazane jest na legendzie odpowiednim skierowaniem nawiasu trójkątnego. Znaczenie nazw zmiennych - jak w man vmstat.

Zanim zaczniemy

To, czy mamy zainstalowany gnuplot możemy sprawdzić wydając polecenie:
gnuplot --version
Jeśli zobaczymy komunikat w rodzaju...
gnuplot 4.0 patchlevel 0
...w porządku. Jeśli nie, program możemy zainstalować np. z pkgsrc:
cd /usr/pkgsrc/graphics/gnuplot
make
make install

Przykładowe rozwiązanie

Rozwiązanie oparte jest o dwa skrypty shellowe. Pierwszy monitoruje system, drugi przedstawia zebrane dane w formie wykresu.
Pierwszy skrypt
perflog.sh działa bez przerwy w tle, logując opatrzone timestampem informacje zwracane przez vmstat (do pliku /var/log/vmstat.log) i przez ps (do /var/log/ps.log), oraz zapewnia minimalną "rotację" tych logów (szczególnie plik ps.log może w krótkim czasie zając dużo miejsca). W prezentowanym rozwiązaniu pliki zapisywane są do katalogu /var/log, zatem pierwszy skrypt wymaga uruchomienia z prawami roota. vmstat można jednak uruchamiać także z konta zwykłego użytkownia - należy wtedy zmienić skrypty tak, by zapisywały i wczytywały informację do/z plików znajdujących się np. w katalogu domowym.
Skrypt ten wywołujemy poleceniem
nohup ./perflog.sh &
lub dopisujemy do /etc/rc.local, by startował przy każdym uruchomieniu systemu.
Pierwsza kolumna pliku vmstat.log zawierać będzie timestamp (co ok. sekundę nowa linia wyników). Tym samym timestampem opatrzone będzie sąsiadujące w czasie, zapisane do ps.log wywołanie ps. Dzięki temu w razie zauważenia nieprawidłowości na syntetycznym wykresie można będzie łatwo znaleźć odpowiednie wpisy w innych logach.

<kocio> mam top odpalony cały czas, ale nic szczególnego nie widać
<DawS> bo widać dopiero jak na postawie perf logów namalujesz wykres z kilku godzin przed freeze
<DawS> wtedy widzisz jakie parametry jak się zmieniają
<DawS> jak maszyna zamarza, to po reboocie patrzysz do logów i widzisz jaki był load systemu, zużycie pamięci, context switche, jakie były procesy i ile jadły pamięci - wtedy możesz coś wywnioskować...

Drugi skrypt
Skrypt ten wczytuje dane z vmstat.log i po ich zgrubnym oczyszczeniu i ewentualnym odfiltrowaniu generuje wykres. Może być bez poprawek uruchamiany z konta zwykłego użytkownika. Poniżej przedstawione są dwie wersje tego skryptu, oraz wskazane różnice między nimi.

plot_vmstat.png.sh generuje wykres zapisywany następnie do pliku ~/public_html/vmstat.png, który z kolei można obejrzeć w przeglądarce www. Skrypt odfiltrowuje i przetwarza mniej-więcej co piątą linię z vmstat.log, dzięki czemu mniej obciąża system i może być uruchamiany np. z crona. Sposób wywołania:
./plot_vmstat.png.sh > ./public_html/vmstat.png

plot_vmstat.x11.sh generuje wykres z ostatnich 8 godzin i wyświetla go bezpośrednio w oknie X-Window. Skrypt ten wywołujemy z linii poleceń:
./plot_vmstat.x11.sh

<DawS> output z perf logów + gnuplot + analiza + mózg
<DawS> kocio: od dzisiaj Ty tłumaczysz co to są perf logi ;)

Co dalej?

W praktyce wskazane będzie dopasowanie parametrów skryptów do konkretnych potrzeb i upodobań. Warto zmienić skrypt generujący wykres tak, by wywoływany był jako CGI i zwracał dane bezpośrednio do przeglądarki. Można też spróbować generować wykres w X-Window w czasie rzeczywistym.
Miłośników interfejsu tekstowego zainteresuje zapewne program systat.
Oprócz stron man dotyczących wykorzystanych poleceń warto zwrócić uwagę na rozdział Guide "Tuning NetBSD". Oczywiście pełne zrozumienie i interpretacja wyników wymaga znajomości systemu operacyjnego. Polecaną lekturą jest "The Design and Implementation of the 4.4BSD System" (AFAIK pozycja niedostępna w całości w formie elektronicznej).

 
kocio.sdf-eu.org