Prawa ręka admina
Transkrypt
Prawa ręka admina
Monitorowanie sieci SYSADMIN Monitoring: Jak używać prostych narzędzi do wykrywania słabych punktów wydajności. Prawa ręka admina Kiedy serwer przestaje pracować, powinny cię o tym poinformować przede wszystkim odpowiednie narzędzia, a nie sami użytkownicy. Zestaw narzędzi opisany w tym artykule pomoże w monitorowaniu twoich serwerów i udostępnianych przez nie usług, generując dodatkowo wykresy z analizą obciążenia. CHARLY KÜHNAST A dministratorzy, gromadzący dane na temat sieci i stanu serwera oraz wizualizujący te dane, są w stanie szybko znaleźć wąskie gardła wydajności i źródła spadku wydajności, bez konieczności ręcznego przeszukiwania plików zdarzeń. Istnieje wiele pożytecznych narzędzi do monitorowania, które mogą wykonywać takie zadania, przykładami są Nagios czy Big Sister. Obydwa programy były opisywane w angielskojęzycznej wersji Linux Magazine [1], [2]. Jednak niniejszy artykuł nie będzie poświęcony ich używaniu – zamiast tego skupimy się na narzędziach zawartych standardowo w każdej dystrybucji Linuksa. Przygotujemy kilka prostych, ale efektywnych skryptów Bash, które pozwolą śledzić sytuację. Prawdziwą zaletą tych narzędzi w porównaniu z rozbudowanymi systemami zarządzania siecią jest to, że zawsze istnieje możliwość dokonywania takich modyfikacji, które pozwolą dostosować je do indywidualnych warunków twojej infrastruktury IT, oto przykładowe możliwości: możliwość generowania niestandardowych statystyk oprócz domyślnych komunikatów masz również dostęp do zebranych danych w przypadku konieczności szczegółowej analizy zdarzenia możliwość szybkiego opanowania skryptów przez administratora dla entuzjastów Linuksa/Uniksa używanie skryptów jest daleko bardziej atrak- cyjne niż programów binarnych. Oczywiście takie rozwiązanie ma również wady: potrzeba więcej czasu, żeby dostosować skrypty do wymagań środowiska produkcyjnego ma o wiele mniej funkcji istnieje trudność rozwoju skryptów wraz z systemem, zwłaszcza jeśli zajmuje się nim jeden programista. livecheck – czy serwer odpowiada? Zajmijmy się najpierw najważniejszym zadaniem: administratorzy muszą przede wszystkim wiedzieć, czy ich serwery działają i czy usługi są dostępne. Prosty skrypt powłoki Bash o nazwie simple_livecheck.sh będzie w tym bardzo pomocny, jednak do pracy będzie on potrzebował kilku dodatkowych plików i katalogów. Katalog roboczy skryptu to /usr/local/shellscripts/livecheck. Utwórz w nim podkatalog o nazwie etc i użyj edytora tekstowego w celu utworzenia plików konfiguracyjnych dla każdego z monitorowanych serwerów. Zawartość pliku musi być zgodna z następującą konwencją: adres_IP.SLD.TLD; np. 10.0.0.2_funghi.gondor.com. Następnie dodaj porty, które powinny być dostępne w trakcie normalnej pracy serwera: 25 80 110 Postępuj zgodnie z tym przykładem dla każdego serwera, który chcesz monitorować, inny serwer w naszym przykładzie – 10.0.0.12_inn.kuehnast.com, musi mieć monitorowany jedynie port 119. Nmap – użyteczne narzędzie Skrypt przechodzi przez listę plików, które sprawdzają, czy serwery w ogóle działają (odbywa się to poprzez proste wykonanie polecenia ping). Do sprawdzania dostępności poszczególnych portów skrypt używa programu nmap 3.00 [3]. Listing 1 pokazuje skrypt powłoki Bash (no cóż, zapewne Perl jest bardziej eleganckim rozwiązaniem – Michael Schilli – autor naszej kolumny o Perlu będzie załamywał ręce czytając ten artykuł). W naszym przykładzie serwer generuje następujące komunikaty: Server 10.0.0.2 (funghi.U kuehnast.com): ping OK 10.0.0.2: Port 25 is up 10.0.0.2: Port 80 is up 10.0.0.2: Port 110 is up Dla przeprowadzenia testu zatrzymałem ręcznie serwer Apache: Server 10.0.0.2 (funghi.U kuehnast.com): ping OK 10.0.0.2: Port 25 is up 10.0.0.2: Port 80 is down 10.0.0.2: Port 110 is up www.linux-magazine.pl Luty 2004 63 SYSADMIN Monitorowanie sieci Działa tak jak oczekiwaliśmy. Jednak dla wielu początkujących administratorów wyprowadzanie komunikatów na konsolę jest mało przydatne. Większy sens – oprócz wyprowadzania komunikatów na konsolę – miałoby zapisywanie komunikatów do pliku zdarzeń syslog-a. Ponadto skrypt nie będzie uruchamiany ręcznie i lepiej go uruchamiać jako zadanie cron-a. Dobrze byłoby pomyśleć o bardziej praktycznym przesyłaniu alarmów przez e-mail czy SMS [4]. Alternatywne sposoby alarmowania Sposób alarmowania zależy oczywiście od tego, jaką rolę pełni monitorowany serwer, przede wszystkim musimy uniknąć wysyłania alarmów co 5 minut. Nawet jeśli masz w swoim telefonie komórkowym ustawiony zabawny dzwonek, to nieustanne odbieranie SMS-ów z alarmami doprowadzi cię do szału. Skrypt wymaga zatem kilku modyfikacji – po uruchomieniu powinien zadziałać według następującego algorytmu: Jeśli host lub port nie działa, to sprawdź czy wyłączył się po wcześniejszym wykonaniu się skryptu? Jeśli wszystko było OK podczas ostatniego sprawdzenia, upewnij się czy niedziałający host albo port działa poprawnie? Rysunek 1: Wykres obciążenia serwera WWW wskazuje, że narzędzie do wykonywania kopii zapasowych zajmuje zbyt wiele zasobów serwera. Administrator powinien rozważyć to definiując wartości progowe dla alarmów. W przeciwnym wypadku po uruchomieniu nocnego backup-u, gdy wartość loadavg przekroczy 5.0, nieustannie będą generowane alarmy, które zaleją SMS-ami komórkę administratora. Pierwszym krokiem w rozbudowie skryptu alarm_livecheck.sh jest utworzenie podkatalogu deadhost w /usr/local/shellscripts/livecheck. Kiedy skrypt zidentyfikuje niedziałający host, po prostu tworzy plik zawierający adres IP w tym katalogu. W przypadku gdy usługa nie działa, skrypt wywołuje plik IP_Port. Jedynym przeznaczeniem tego pliku (może być pusty) jest informowanie skryptu, czy serwer działa, czy poprzednie uruchomienie skryptu zakończyło się powodzeniem oraz czy dana usługa albo serwer pracują. Listing 2 pokazuje gotowy do uruchomienia skrypt – w tym celu możesz użyć cron-a. Skrypt dostar- Listing 1. Skrypt simple_livecheck.sh 01 #! /bin/bash 02 03 # Skrypt sprawdzajacy czy serwer odpowiada i 04 # czy jest dostepny 05 06 WDIR=/usr/local/shellscripts/ lm-livecheck 07 08 for i in `ls $WDIR/etc/`; do 09 10 ## wyciagamy IP i FQDN z nazwy pliku 11 IP=`echo $i|cut -f1 -d'_'`; 12 NAME=`echo $i|cut -f2 -d'_'`; 13 14 ## pingujemy serwer sprawdzajac czy dziala 15 PING=$(/bin/ping -c2 -q -w2 $IP|grep transmitted|cut -f3 -d','|cut -f1 -d','|cut -f 1 -d'%') 16 if [ $PING -eq ' 0' ]; then 17 ## serwer dziala 64 Luty 2004 18 echo 'Server $IP ($NAME): ping OK'; 19 20 ## teraz sprawdzamy porty 21 for j in `cat $WDIR/etc/$i`; do 22 23 RET=`/usr/bin/nmap -r --host_timeout 2500 --initial _rtt_timeout 2000 -p $j $IP|grep $j/tcp|cut -f1 -d'/'`; 24 25 if [ -z $RET ]; then 26 echo '$IP: Port $j is down'; 27 ## Alarm: port nie odpowiada ## 28 else 29 echo '$IP: Port $j is up'; 30 fi 31 done 32 33 else 34 echo 'Server $IP ($NAME): no response'; 35 fi 36 done www.linux-magazine.pl cza codziennych informacji na temat dostępności serwerów oraz udostępnianych przez nie usług. Dzięki temu możesz określić stopień dostępności usług i słabe punkty wydajności w sposób automatyczny – bez potrzeby ręcznej analizy logów. Oczywiście jest wiele możliwości usprawnienia działania opisanych skryptów, a zwłaszcza dostosowania ich do lokalnych warunków i upodobań administratora. Obciążenie serwera Następną interesującą każdego administratora informacją jest to, jak ciężko pracują jego serwery. Można w tym celu wykorzystać kilka narzędzi, takich jak MRTG [5], RRDTool i Cacti. Wybrałem Cacti (w wersji 0.6.8) współpracujący z RRDTool 1.0.40. Cacti posiada elastyczną konfigurację i jest stosunkowo prosty, bliższy opis programu znajdziesz tutaj [6]. Cacti generuje zarówno statystyki dotyczące sieci, jak i obciążenia systemu (load average) – te dwa parametry są najbardziej interesujące przy tworzeniu statystyk dostępności systemu. Wykresy obciążenia pozwalają natychmiast wychwycić nienormalne zachowanie, takie jak np. nagłe skoki obciążenia. Ostatnio Cacti pomógł mi w dość nieoczekiwanej sytuacji. Otóż przygotowałem pewien skrypt i uruchomiłem go jako zadanie cron-a na serwerze WWW. Cacti odczytywał /proc/loadavg w pięciominutowych odstępach informując mnie, że obciążenie systemu (load average) w krótkim czasie wzrosło dramatycznie do 8.0. Wykres wygenerowany przez Cacti na Rysunku 1 ilustruje ten nagły skok obciążenia. Wykres pokazuje, że obciążenie interfejsu sieciowego jest w normie, a zatem coś musiało się wydarzyć na samym serwerze. Dzięki temu dość szybko znalazłem winowajcę – proces wykonywania kopii zapasowej. Monitorowanie sieci Zestawienia obciążenia sieci Narzędzie IPTraf Jedną z istotnych cech Cacti jest możliwość zbierania i wyliczania globalnego obciążenia dla jednego lub wielu interfejsów sieciowych. Czy jednak nie byłoby dobrze wiedzieć, jakie jest obciążenie w rozbiciu na poszczególne usługi? Ponownie użyjemy funghi.kuehnast.com jako serwera testowego. Działa na nim serwer WWW, SMTP oraz POP3. Załóżmy, że Cacti wskazuje nadmierne obciążenie na interfejsie sieciowym – pojawia się wówczas pytanie, która z usług jest źródłem problemów. Normalnie musiałbyś przekopywać się przez system, żeby znaleźć sprawcę problemów. Jednak lepszym wyjściem jest posiadanie narzędzia, które pokazuje obciążenie na każdym z portów. Moglibyśmy do tego celu użyć programu Cacti, jest jednak inne bardziej elastyczne narzędzie – IPTraf i właśnie jego użyjemy. Do zbierania danych wybrałem program IPTraf [7]. Jest to idealne narzędzie, ponieważ dostarcza szczegółowych informacji na temat interfejsów sieciowych – zarówno bieżącego obciążenia na każdy z interfejsów, jak i wielkości pakietów oraz statystyk w rozbiciu na poszczególne porty. Posłużymy się programem IPTraf w wersji 2.7.0. Większość administratorów wykorzystuje IPTraf w trybie interaktywnym do przeglądania bieżącego ruchu sieciowego. Na szczęście IPTraf może także działać jako demon – zapisuje wówczas rezultaty śledzenia w pliku (zazwyczaj /var/log/iptraf), który można później poddać przetwarzaniu. Dodaj do cron-a następujący wpis uruchamiający IPTraf: */5 * * * * /usr/sbin/iptraf -s U eth0 -t 5 -B -L /var/log/iptraf SYSADMIN Parametr -s nakazuje, aby IPTraf zbierał dane o ruchu i sortował je według portów. Opcja -t 5 oznacza, że IPTraf po pięciu minutach przerwie pracę i zapisze rezultaty obserwacji do pliku. Opcja -B oznacza, że IPTraf jest uruchamiany w trybie demona. IPTraf tworzy pliki w formacie podobnym do poniższego: TCP/25: 169107 packets, 90804448 bytes total; 96958 packets, 86978452 bytes incoming; 72149 packets, 3825996 bytes outgoing TCP/110: 20174 packets, 7575496 bytes total; 8251 packets, 360974 bytes incoming; 11923 packets, 7214522 bytes outgoing Listing 2. Skrypt alarm_livecheck.sh 01 #! /bin/bash 02 03 # Skrypt sprawdza czy serwer odpowiada 04 # w razie bledu uruchamia alarm 05 06 07 WDIR=/usr/local/shellscripts/ lm-livecheck 08 09 for i in `ls $WDIR/etc/`; do 10 11 ## wyciagamy adres IP i FQDN z nazwy pliku 12 IP=`echo $i|cut -f1 -d'_'`; 13 NAME=`echo $i|cut -f2 -d'_'`; 14 15 ## pingujemy serwer sprawdzajac czy dziala 16 PING=$(/bin/ping -c2 -q -w2 $IP|grep transmitted|cut -f3 -d','|cut -f1 -d','|cut -f 1 -d'%') 17 if [ $PING -eq ' 0' ]; then 18 ## serwer dziala 19 echo 'Server $IP ($NAME): ping OK'; 20 21 ## sprawdzamy tutaj czy host nie jest wylaczony 22 if [ -e $WDIR/deadhost/$IP ]; then 23 echo 'Server $IP ($NAME) 24 25 26 27 28 29 30 came back to life'; rm $WDIR/deadhost/$IP; fi ## tutaj sprawdzamy porty for j in `cat $WDIR/etc/$i`; do RET=`/usr/bin/nmap -r --host_timeout 2500 --initial _rtt_timeout 2000 -p $j $IP|grep $j/tcp|cut -f1 -d'/'`; 31 32 if [ -z $RET ]; then 33 echo '$IP: Port $j is down'; 34 35 ## sprawdzamy czy port byl wczesniej wylaczony 36 if [ -e $WDIR/deadports/$IP_$j ]; then 37 echo 'Port $j on server $IP ($NAME) is still dead'; 38 else 39 echo 'Port $j on server $IP ($NAME) has just died'; 40 touch $WDIR/deadports/$IP_$j; 41 ## umiesc tutaj polecenie wysylajace alarm ## 42 fi 43 else 44 echo '$IP: Port $j is up'; 45 ## sprawdzamy czy port byl wylaczony i czy uruchomil sie poprawnie ## 46 if [ -e $WDIR/deadports/$IP_$j ]; then 47 echo 'Port $j on server $IP ($NAME) came back to life'; 48 rm $WDIR/deadports/$IP_$j; 49 fi 50 fi 51 done 52 53 else 54 echo 'Server $IP ($NAME): no response'; 55 56 ## sprawdzamy czy serwer byl wczesniej wylaczony 57 if [ -e $WDIR/deadhost/$IP ]; then 58 echo 'Server $IP ($NAME) is still dead.'; 59 else 60 echo 'Server $IP ($NAME) has just died.'; 61 touch $WDIR/deadhost/$IP; 62 ## umiesc tutaj polecenie wysylajace ## 63 fi 64 65 fi 66 done www.linux-magazine.pl Luty 2004 65 SYSADMIN Monitorowanie sieci Szczególnie interesujące jest wartość bytes total i powinniśmy ją zachować do późniejszych analiz. Dlatego potrzebne jest zapisanie ich w RRD (Round Robin Database), żeby stanowiły podstawę do generowania histogramów. W tym celu musisz utworzyć podkatalog o nazwie data, będą w nim przechowywane pliki z danymi dotyczącymi poszczególnych usług. Nazwa usługi i data będą zapisywane bezpośrednio w nazwie pliku. Przykładowo plik smtp-history.20031115 będzie zawierał dane na temat ruchu SMTP zarejestrowane przez IPTraf 15 listopada 2003. Baza statystyk dla Cacti Zajmijmy się teraz RRD: najpierw utwórz podkatalog o nazwie rrdtool w katalogu /usr/local/shellscripts/iptraf. Będzie tutaj przechowywana baza danych dla naszego przykładowego serwera. Samo polecenie tworzące bazę jest nieco skomplikowane: 01 rrdtool create /usr/local/ shellscripts/iptraf/rrdtool/ mailserver.rrd \ 02 03 04 05 06 07 08 09 10 11 DS:smtp:ABSOLUTE:600:U:U \ DS:pop3:ABSOLUTE:600:U:U \ RRA:AVERAGE:0.5:1:600 \ RRA:AVERAGE:0.5:6:700 \ RRA:AVERAGE:0.5:24:775 \ RRA:AVERAGE:0.5:288:797 \ RRA:MAX:0.5:1:600 \ RRA:MAX:0.5:6:700 \ RRA:MAX:0.5:24:775 \ RRA:MAX:0.5:288:797 Krótka uwaga dla osób znających narzędzie RRDTool – w przeciwieństwie do danych zbieranych poprzez SNMP, źródło danych nie jest kwalifikowane jako COUNTER, lecz jako ABSOLUTE. Jest tak, ponieważ IPTraf zeruje swój licznik co pięć minut. Postępując analogicznie, możesz dodać RDD dla innych serwerów, pamiętając o zastąpieniu pliku mailserver.rrd i wpisów DS. Mimo, że powyższe długie polecenie tworzenia bazy wystarczy wykonać jeden raz, najlepiej jest je wpisać do skryptu, aby można było szybko włączyć monitorowanie dla kolejnego nowego serwera. Listing 3. Skrypt plot_mailserver.sh 01 #! /bin/bash 02 03 sleep 5 # dajemy czas IPTraf zeby zapisal wyniki do pliku 04 05 TRAFLOG=/var/log/iptraf 06 WDIR=/usr/local/shellscripts/ iptraf 07 TODAY=$(/bin/date +%s) 08 UDATE=$(/bin/date +%Y%m%d) 09 10 SMTP=$(grep 'TCP/25' $TRAFLOG|tail -n1|cut -f2 -d','|cut -f2 -d' ') 11 POP=$(grep 'TCP/110' $TRAFLOG|tail -n1|cut -f2 -d','|cut -f2 -d' ') 12 13 echo 'smtp: $SMTP' 14 echo 'pop3: $POP' 15 16 if [ -z $SMTP ]; then 17 SMTP='0'; 18 fi 19 20 if [ -z $POP ]; then 21 POP='0'; 22 fi 66 Luty 2004 23 24 # wyniki archiwizujemy 25 26 echo $SMTP > $WDIR/data/smtp-history.$UDATE 27 echo $POP > $WDIR/data/pop-history.$UDATE 28 29 rrdtool update $WDIR/rrdtool/ mailserver.rrd $TODAY:$SMTP: $POP3 30 31 # rysujemy wykres 32 33 rrdtool graph /usr/local/ httpd/htdocs/protostats/ mailserver.gif \ 34 --start -86400 \ 35 --vertical-label 'bytes per second' \ 36 -w 600 -h 200 \ 37 DEF:smtp=$WDIR/rrdtool/ mailserver.rrd:smtp:AVERAGE \ 38 DEF:pop3=$WDIR/rrdtool/ mailserver.rrd:pop3:AVERAGE \ 39 AREA:smtp#00ff00:'SMTP traffic' \ 40 LINE1:pop3#0000ff:'POP3 traffic' www.linux-magazine.pl Krótki skrypt o nazwie plot_mailserver.sh (patrz Listing 3) zajmuje się archiwizacją i rysowaniem wykresów. Rysunek 2 pokazuje wyniki jego działania. Podobne skrypty można łatwo napisać dla każdej innej usługi, którą chcesz obserwować, np. HTTP, FTP lub NNTP. Skrypty i narzędzia opisane powyżej dają administratorom solidną bazę wiedzy, która pozwoli rozwiązywać problemy z wydajnością i znajdywać słabe punkty infrastruktury. W moim przypadku nie musiałem długo czekać na okazję przetestowania przydatności tego rozwiązania. Nagła śmierć Zastanówmy się nad następującym, jakże częstym scenariuszem – serwer pocztowy zawiesza się od czasu do czasu (właśnie z czymś takim miałem do czynienia niedawno). Łańcuch wydarzeń jest zawsze taki sam: pierwszy alarm jest generowany przez skrypt alarm_livecheck.sh, ponieważ port SMTP nie jest dostępny, następnie przestaje działać port POP3, niebawem serwer odpowiada nieregularnie tylko na ping i wreszcie w ogóle przestaje odpowiadać. Wykres obciążenia sieci, wygenerowany przez Cacti, pokazuje wzmożoną aktywność interfejsu sieciowego na około 30 minut przed zawieszeniem serwera, ale nie było to coś, co mogło zawiesić Postfix-a. Wykres Loadavg dawał więcej do myślenia: pokazywał skoki obciążenia do 40 i nagły spadek do 0. Takie symptomy są typowe dla maszyn, które mają zbyt mało pamięci RAM i muszą od czasu do czasu intensywnie korzystać z powolnej pamięci wirtualnej. Rzeczywiście serwer pocztowy miał 64 MB pamięci RAM i 128 MB pamięci wirtualnej (swap). Z drugiej strony serwer Postfix nie jest zbyt łapczywy na zasoby serwera. To skierowało moją uwagę na kolejnego podejrzanego – program Spamassassin [8], który niedawno zainstalowałem. Żeby przeprowadzić ostateczny test, uruchomiłem program top i wysłałem setkę wiadomości do serwera pocztowego z innej maszyny. Niedługo potem Spamassassin zapchał pamięć serwera pocztowego do granicy pamięci wirtualnej. W tej sytuacji wymyśliłem dwa rozwiązania: sztuczne spowalnianie serwera Postfix w celu zredukowania częstotliwości przetwarzania wiadomości. Dałoby to czas programowi Spamassassin na zakończenie przetwarzania warunków antyspamowych i zwolnienie pamięci. Ta- Monitorowanie sieci ka konfiguracja byłaby łatwa do osiągnięcia poprzez odpowiednią konfigurację main.cf, chociaż jest to dość nieeleganckie rozwiązanie. zainstalowanie większej ilości pamięci RAM. Byłem zwolennikiem drugiego rozwiązania. Problem zniknął po dodaniu 512 MB pamięci RAM i 1 GB pamięci wirtualnej. Ten przykład pokazuje, że rozwiązywanie tego typu problemów jest łatwiejsze, jeśli monitorowane jest zużycie pamięci przez system. Monitorowanie użycia pamięci Trzymając się sprawdzonego wcześniej podejścia, postanowiłem napisać krótki skrypt, który odczytuje informacje o zajętości pamięci RAM i pamięci wirtualnej z /proc/meminfo, zapisuje wyniki do RRD i rysuje wykres na podstawie pobranych informacji. Oczywiście pierwszym krokiem będzie stworzenie RRD: 01 rrdtool create /usr/local/ shellscripts/iptraf/rrdtool/ mailmemory.rrd \ 02 DS:ram:GAUGE:600:U:U \ 03 DS:swap:GAUGE:600:U:U \ 04 RRA:AVERAGE:0.5:1:600 \ 05 RRA:AVERAGE:0.5:6:700 \ 06 RRA:AVERAGE:0.5:24:775 \ 07 RRA:AVERAGE:0.5:288:797 \ Rysunek 2: Wykres utworzony przez skrypt plot_mailserver.sh pokazujący obciążenie portów 25 i 110. Jak widać na tym drugim porcie brak aktywności. 08 09 10 11 RRA:MAX:0.5:1:600 \ RRA:MAX:0.5:6:700 \ RRA:MAX:0.5:24:775 \ RRA:MAX:0.5:288:797 Dla zachowania przejrzystości, baza będzie przechowywana wraz z wykresami obciążenia sieci w używanym już poprzednio katalogu rddtool. Zauważ, że źródło danych jest w tym przypadku zdefiniowane jako GAUGE. Jest tak, ponieważ w przeciwieństwie do danych programu IPTraf, licznik nie jest tym razem zerowany po każdym odczycie. Po utworzeniu bazy, skrypt meminfo.sh pokazany na Listingu 4, może zacząć zbierać dane i generować wykres. Patrząc w kryształową kulę Oczywiście funkcja archiwizacji skryptu IPTraf jest bardzo przydatna i zamierzam Listing 4. Skrypt meminfo.sh 01 #! /bin/bash 02 03 # Skrypt sprawdza ilosc wolnej pamieci (RAM i swap) i 04 # uzywajac RRDTool rysuje wykres 05 06 WDIR=/usr/local/shellscripts/ iptraf 07 TODAY=$(/bin/date +%s) 08 09 ## pobieramy informacje o pamieci z /proc/meminfo 10 11 RAM=`grep MemFree /proc/ meminfo|tr -s [:blank:]|cut -f2 -d' '` 12 SWAP=`grep SwapFree /proc/ meminfo|tr -s [:blank:]|cut -f2 -d' '` 13 SYSADMIN 14 ## zapisujemy dane do RRD 15 16 rrdtool update $WDIR/rrdtool/ mailmemory.rrd $TODAY:$RAM:$SWAP 17 18 ## rysujemy wykres 19 20 rrdtool graph /usr/local/httpd/htdocs/ protostats/mailmemory.gif \ 21 --start -86400 \ 22 --vertical-label 'kBytes free' \ 23 -w 600 -h 200 \ 24 DEF:ram=$WDIR/rrdtool /mailmemory.rrd:ram:AVERAGE \ 25 DEF:swap=$WDIR/rrdtool /mailmemory.rrd:swap:AVERAGE \ 26 AREA:ram#00ff00:'RAM' \ 27 LINE1:swap#0000ff:'Swap' jej użyć w przyszłości do generowania średnioterminowych prognoz obciążenia sieci. Rzut oka na wykres RRDTool pokazuje liniowy wzrost obciążenia sieci w określonym przedziale czasu. Pozwala to na przewidywanie przyszłych problemów z wydajnością. Pierwszym krokiem do tego jest generowanie linii trendu – hipotetycznej linii, która przebiegając przez cały wykres, odzwierciedla średnie wartości obciążenia. Drugim krokiem jest wyliczenie gradientu, przy założeniu, że przyszłe wyniki będą leżały w sąsiedztwie linii trendu. Ta metoda jest przydatna pod warunkiem, że twój system już teraz nie osiągnął granicy wydajności. Oczywiście sama sieć WAN także może przestać działać, jednak taka możliwość jest wprost proporcjonalna do wielkości twojego ISP, większe firmy zazwyczaj posiadają łącza zapasowe i routing dynamiczny. ■ INFO [1] D. Ruzicka, „Network Management with Nagios, Netsaint’s Sucessor”: Linux Magazine, numer 29, str. 62 [2] J. Fritsch and T. Aeby, „Always There: Introducing Network Monitoring with Big Sister”: Linux Magazine, numer 38, str. 55 [3] Nmap: http://www.insecure.org/nmap [4] C. Kühnast, „The Sysadmin’s Daily Grind: Yaps”: Linux Magazine, numer 30, str. 55 [5] W. Boeddinghaus, „Network Management with MRTG”: Linux Magazine, numer 24, str. 56 [6] A. Schrepfer, „Graphical Monitor: Cacti Web Front-end for RRDtool”: Linux Magazine, numer 35, str. 55 [7] IPTraf: http://iptraf.seul.org [8] Spamassassin: http://eu3.spamassassin.org www.linux-magazine.pl Luty 2004 67