Rysujemy wykresy, czyli długofalowy monitoring serwerów

Administracja serwerami to nie tylko reakcje na wszelkie awarie, nieprzewidziane zdarzenia w systemie, czy restarty aplikacji. Administracja to przede wszystkim monitorowanie pracy serwerów zarówno podczas normalnych warunków (stałe obciążenie) jak i awarii (bardzo duże obciążenie, problemy z serwerem). Często o problemie dowiadujemy się gdy już wystąpi, a zdecydowanie lepiej byłoby gdybyśmy mogli w jakiś sposób przewidzieć, że w najbliższym okresie czasu coś może się stać, a w szczególności, żebyśmy byli w stanie zapobiegać tym najgłupszym awariom, związanych z brakiem zasobów, czy to miejsca na dysku, czy pamięci.

Możemy z łatwością monitorować parametry serwera i zapisywać wyniki do plików, ale nikt tego nie będzie analizował... dużej ilości danych zapisanych w postaci tekstowej nie potrafimy przetworzyć w sposób niezbędny do przewidzenia problemów, do tego doskonale nadają się wszelkie narzędzia potrafiące generować wykresy (munin, cacti, graphviz).

Generując wykresy z zebranych danych otrzymujemy możliwość analizy w czasie zmian w charakterystyce pracy naszego serwera, w godzinach dużego ruchu zobaczymy większe zużycie pamięci, powoli ubywające wolne miejsce z dysków, lub wykorzystanie pamięci zbliżające się do limitów. Dzięki temu będziemy w stanie przewidywać, co się stanie jeśli ruch zwiększy się 2x, albo czy możemy jeszcze uruchomić kolejny serwer gry Counter Strike.

Wraz z upływem czasu, zbierając kolejne informacje, będziemy w stanie ocenić obecną sytuację z tą sprzed miesiąca i na podstawie wykresu będzie na łatwo ocenić, czy przy normalnej pracy potrzebujemy rozbudowywać storage, pamięć, czy przenosić się na nowy mocniejszy serwer. Powiedziałbym nawet, że nie da się skutecznie administrować serwerami bez łatwego podglądu zmian parametrów pracy serwera. Codzienna obserwacja łatwych w analizie wykresów pozwoli nam reagować jeszcze przed wystąpieniem problemu, bo przyznacie sami, że zatrzymanie się serwera httpd z powodu braku wolnego miejsca na dysku jest idiotyczną awarią.

Po krótce chcę Wam przedstawić narzędzie bardzo szybkie do wdrożenia, konfiguracja zajmuje < 10 minut, a po uruchomieniu będziemy mieli świetne statystyki... Przed Wami - Munin. ;-)

Instalacja Munin’a w Ubuntu
root@iDev:/home/jamzed# apt-get install munin

Munin składa się z dwóch podstawowych aplikacji, munin-node i munin:

  • munin-node - jest to daemon który wystawia dane dla podpiętych usług
  • munin - jest aplikacją która pobiera dane z node'ów
  • munin-cron - proces zbierający dane co 5 minut (dopisany do crontaba /etc/cron.d/munin)

Możemy mieć jeden centralny serwer z muninem i wiele munin-node'ów, z których będziemy pobierać dane. Po uruchomieniu daemon'a już następuje zbieranie danych, to co jest monitorowane określamy poprzez umieszczenie linku symbolicznego lub bezpośrednio skryptu/programu w katalogu /etc/munin/plugins/, standardowo znajdują się już podpięte usługi takie jak pamięć, cpu, interfejsy sieciowe, dyski. Munin dostarcza od razu po instalacji wiele gotowych skryptów, wszystkie znajdują się w katalogu /usr/share/munin/plugins/.

Konfigurujemy praktycznie jedynie htmldir (/var/www/munin), jest to katalog w którym będzie generowana strona z naszymi statystykami, jest to DocumentRoot który podajemy w konfiguracji serwera WWW, poniżej mamy listę podpiętych node'ów z których zbieramy statystyki. Prosta budowa munina pozwala na dopisywania różnych wtyczek samemu, wystarczy po prostu zwracać dane w takiej postaci:

root@iDev:/etc/munin/plugins# ./test
testowa.value 20

Przykładowy kod wtyczki może wyglądać następująco:

Więcej szczegółów dot. pisania własnych pluginów znajdziecie tutaj: http://munin.projects.linpro.no/wiki/HowToWritePlugins.

Aby monitować nowe elementy należy podpiąć taki skrypt (np. ln -s /usr/share/munin/plugins/test /etc/munin/plugins/test), wykonać restart munin-node'a i wykresy powinny już automatycznie rysować się dla naszej nowej usługi. Możemy sprawdzić czy nowa wtyczka zwraca poprawnie dane:

root@iDev:/etc/munin/plugins# telnet 127.0.0.1 4949
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
# munin node at serwer_monitorowany
list
open_inodes test if_err_eth0 irqstats entropy mysql_slowqueries if_eth0 processes mysql_threads df interrupts swap mysql_bytes load cpu df_inode mysql_queries iostat open_files forks memory vmstat
fetch test
testowa.value 32

  • list - zwraca wszystkie podpięte wtyczki
  • fetch $nazwa_wtyczki - pobiera aktualne dane dla niej

Inny sposób to po prostu wykonanie polecenia munin-run:

root@iDev:/etc/munin/plugins# munin-run test
testowa.value 57

Wynik na wykresie prezentuje się następująco:

Możliwości tego co i jak monitorujemy są nieograniczone, a dane prezentowane na wykresach są bardzo łatwe w analizie, więc zachęcam Was wszystkich do korzystania z gotowych narzędzi i monitorowania wszystkiego co się tylko da. ;-)

[poll id="5"]

Zapraszam do dopisywania w komentarzach innych narzędzi których używacie do monitorowania oraz generowania wykresów.