Dobry administrator powinien mieć komplet informacji nie tylko o swoim serwerze, ale też o otaczającej go sieci. Monitorowanie ruchu wchodzącego i wychodzącego z naszego serwera pozwala określać i zapobiegać kłopotom związanym z nadmiernym obciążeniem łącz, optymalizować wielkość łącza w stosunku do potrzeb oraz określać nasze potrzeby na przyszłość. Możemy też weryfikować informacje naszego dostawcy internetu o generowanym przez nas obciążeniu.
Właśnie do tego celu może być użyty protokół SNMP (Simple Network Management Protocol). Doskonale sprawdza się on nie tylko w przypadku zarządzania wielkimi sieciami, ale i do zbierania informacji statystycznych w małych sieciach (lub nawet na pojedynczych interfejsach sieciowych). Istnieje wiele darmowych narzędzi umożliwiających nam korzystanie z dobrodziejstw SNMP.
Dlatego też niniejszy referat ma na celu opisanie sposobu monitorowania obciążenia sieci za pomocą oprogramowania Open Source bazującego na protokole SNMP. Przedstawia on nie tylko sam protokół, ale też aplikacje na nim bazujące, ich instalację i konfigurację. Wszelkie aplikacje opisywane poniżej testowane były dla Linuxa Slackware 7.1 z jądrem 2.2.18 oraz RedHat 7.0.
SNMP (Simple Network Management Protocol) jest obecnie najczęściej stosowanym protokołem komunikacyjnym używanym do zarządzania sieciami komputerowymi. Powstał on w 1989 r. z inicjatywy organizacji Internet Activities Board, a jego protoplastą był prosty protokół SGMP.
Dzięki wielu zaletom (takim jak: łatwość implementacji, dostępność wielu aplikacji opartych na tym protokole i niewielkie wymagania odnośnie sprzętu i przepustowości łączy sprzęgających zarządzane węzły sieci) protpkół zyskał szerokie poparcie, zdecydowanie wygrywając rywalizację z protokołem CMIP (Common Management Information Protocol). Nie ma on obecnie na rynku poważnego rywala.
SNMP używa do przesyłania pakietów w sieci Internet dwóch protokołów komunikacyjnych wchodzących w skład TCP/IP: protokołu IP (Internet Protocol; warstwa sieci w modelu OSI) oraz UDP (User Datagram Protocol); warstwa transportu w modelu OSI). Szczegółowy opis protokołu SNMP zawarty jest w RFC 1157.
Integralną częścią systemu zarządzania opartego na protokole SNMP jest zawsze menedżer zarządzania (aplikacja zarządzająca siecią, rezydująca w pamięci komputera pełniącego rolę zarządcy) oraz bazy danych MIB i agenci instalowani w poszczególnych węzłach sieci.
Rys. 1. Architektura SNMP.
Zarówno stacja zarządzająca jak i zarządzane węzły sieci są wyposażone w interfejsy SNMP. Mówiąc najprościej, interfejs jest zbiorem poleceń wysyłanych do zarządzanej stacji (celem uzyskania przez stację zarządzającą interesujących ją informacji). Stacja zarządzana z kolei wysyła w pewien uporządkowany sposób te informacje do stacji zarządzającej. Czyli jest to swego rodzaju prosty język, za pomocą którego zainstalowane w sieci węzły i urządzenia porozumiewają się z pakietem SNMP.
Rys. 2. Przesyłanie poleceń SNMP.
W praktyce cały interfejs SNMP ogranicza się do prostego zestawu poleceń, które monitorują pracę urządzeń w sieci. Urządzenia wysyłają do konsoli zarządzania dane (zwane też obiektami bazy danych MIB), pozwalające administratorowi systemu sprawować kontrolę nad stacją. W bazie danych MIB (Management Information Base) rezydującej u boku agenta każdej stacji znajdują się informacje o pracy tego urządzenia. Są to dane statystyczne, identyfikatory urządzeń, tablice marszrut i szereg innych zmiennych, które są okresowo aktualizowane przez agenta i wysyłane do stacji zarządzającej. Informacje te pozwalają stacji zarządzającej sprawdzać stan węzła, śledzić poziom obciążenia sieci pakietami czy wykrywać awarie poszczególnych odcinków sieci. Budowa standardowej bazy danych MIB jest opisana w RFC 1213.
Zalety SNMP:
Takie serwisy jak freshmeat.net oferują nam do wyboru wiele różnych aplikacji. Ja zdecydowałem się na użycie CMU-SNMP. Jest to przyjazny w instalacji i konfiguracji demon SNMP, posiadający wersję przeznaczoną dla systemu operacyjnego Linux. Produkt nie jest udostępniany na licencji GPL, ale jego licencja kwalifikuje go do grupy programów Open Source (free for use, copy, modify and distribute).
Strona domowa projektu: http://www.gaertner.de/snmp/
kod źródłowy do pobrania: ftp://ftp.ibr.cs.tu-bs.de/pub/local/linux-cmu-snmp/
tar xvzf ./cmu-snmp-linux-3.7-src.tar.gzcd cmu-snmp-linux-3.7
./configure; make
make install
cd ./etc ./installconf -mini <password> /usr/sbin/snmpd -f ; echo 'started snmpd'
Ostatnią linię polecam umieścić w skryptach startowych serwera. Jeszcze tylko ewentualna edycja pliku /etc/snmpd.conf i już mamy działającego demona SNMP.
MRTG (Multi Router Traffic Grapher) jest to całkowicie napisany w perlu zestaw narzędzi do monitorowania sieci. Program generuje raport w postaci stron HTML zawierających grafiki GIF/PNG.
Strona domowa projektu: http://ee-staff.ethz.ch/~oetiker/webtools/mrtg/
kod źródłowy do pobrania: http://ee-staff.ethz.ch/~oetiker/webtools/mrtg/pub/mrtg-2.9.10.tar.gz
licencja: GNU General Public License (GPL)
Aby poprawnie skompilować MRTG potrzebujemy następujących bibliotek:
Libpng potrzebuje działającej biblioteki zlib, ale w większości dystrybucji jest ona standardowo instalowana (lub doinstalowywana przy instalacji pakietu openssh).
tar xvzf ./libpng-1.0.10.tar.gzcd libpng-1.0.10
cp scripts/makefile.linux makefile
./configure; make
make install
tar xvzf ./gd-1.8.4.tar.gzcd gd-1.8.4
make
make install
tar xvzf ./mrtg-2.9.10.tar.gzcd mrtg-2.9.10
./configure --prefix=/usr/local/mrtg-2 \
--with-gd=/usr/local/src/gd \
--with-z=/usr/local/src/zlib \
--with-png=/usr/local/src/libpng
make
make install
Przechodzimy do miejsca, gdzie jest zainstalowane MRTG cd /usr/local/mrtg-2. W katalogu bin mamy plik mrtg uruchamiający analizę oraz plik cfgmaker do tworzenia plików konfiguracyjnych.
Uruchamiamy cfgmaker:
cfgmaker --global 'WorkDir: /sciezka/do/katalogu/wynikowego' \
--global 'Options[_]: bits,growright' \
--output /home/mrtg/cfg/mrtg_nasz_host.cfg \
--ifref=ip xxx.xxx.xxx.xxx
gdzie xxx.xxx.xxx.xxx to ip naszego hosta (z działającym snmpd), a WorkDir to ścieżka do katalogu wynikowego (najlepiej gdzieś w drzewie katalogów demona httpd, abyśmy mogli od razu oglądać wynik za pomocą przeglądarki).
Kolejny krok to edycja pliku wynikowego (tu: mrtg_nasz_host.cfg). Zmienną language proponuję ustawić na polish (tak - MRTG jest w polskiej wersji !). Należy też uwzględnić, że MRTG podaje wynik w kilobajtach, a nie w kilobitach. Dlatego też maksymalną przepustowość sieci musimy podać w kilobajtach (np. jeśli mamy sieć 2 Mbps to dzielimy przepustowość przez 8, jako MaxBytes podajemy więc wartość 250000.
Jeśli chcemy monitorowac więcej niż jeden interfejs to dla każdego tworzymy oddzielny plik konfiguracyjny. Analizę uruchamiamy poleceniem /usr/local/mrtg-2/bin/mrtg /usr/local/mrtg-2/gdziechcemy/plik_konfiguracyjny.cfg.
Proponuję umieszczenie tego polecenia w crontabie. Jeśli monitorujemy wiele interfejsów to polecam utworzenie skryptu shelowego uruchamiającego mrtg dla poszczególnych plików konfiguracyjnych i dopiero jego wpisać do crontab. Warto też utworzyć plik index.html zawierający linki do poszczególnych podstron.
Przykładowy wynik działania MRTG znajduje się w załączniku 1
Mam nadzieję że udało mi się zachęcić Państwa do skorzystania z dobrodziejstw protokołu SNMP. Oczywiście nie musimy ograniczać się do monitorowania naszego serwera pocztowego. Jeśli jesteśmy połączeni do sieci poprzez ruter, np. CISCO to wystarczy dodać do jego konfiguracji linię:
snmp-server host [IP] [klucz] snmp
i już możemy włączyć go do obsługiwanych przez MRTG urządzeń.
A wszystkie osoby programujące w Perl'u zainteresuje na pewno moduł SNMP.pm, pozwalający w prosty sposób tworzyć skomplikowane programy bazujące na protokole SNMP.
Możliwości wykorzystania SNMP jest wiele - dlatego zachęcam gorąco do eksperymentowania na własną rękę.