Testowane na: [OpenBSD]

MRTG

MRTG (Multi Router Traffic Grapher) jest narzędziem służącym do monitorowania i wizualizacji niemalże dowolnych wielkości związanych z działaniem systemu komputerowego, począwszy od ruchu sieciowego (do analizy którego został zaprojektowany i którym się zajmiemy), poprzez obciążenie procesora, pamięci, zajętość dysku i wiele, wiele innych. Istnieje możliwość dostarczenie dowolnych wielkości, o ile je tylko dostarczymy w zjadliwym przez MRTG formacie. MRTG generuje stronę HTML zawierającą wykresy w formacie .png, które dostarczają na żywo graficzne wykresy ruchu jaki odbywa się na naszych interfejsach. Używa on w dużej mierze przenośnej implementacji SNMP napisanej w całości w Perlu, dlatego też potrzebujemy jakiejkolwiek zewnętrznej paczki SNMP."

Pozwoliłem sobie zacytować fragment artykułu autorstwa Artura Kulda, który znajduje się TU.

W artykule opiszę proces instalacji i konfiguracji SNMPD, oraz MRTG (na przykładzie miernika sieci oraz obciążenia procesora). Przy pisaniu artykułu korzystałem z:



SNMPD

Najpierw zainstalujmy pakiet net-SNMP (Simple Network Managment Protocol).
Przechodzimy więc do portu Net-SNMP i go instalujemy:

> cd /usr/ports/net/net-snmp/ && make install clean

W zależności od mocy naszej maszyny, instalacja może trochę potrwać :). Pod udanej instalacji otrzymujemy poradę od autorów, co należy wpisać w /etc/rc.local, aby monitor SNMP uruchamiał się razem z systemem:

To have snmpd start at boot time, you must edit /etc/snmp/snmpd.conf
and uncomment the following in /etc/rc.local.

#if [ -x /usr/local/sbin/snmpd ]; then
# echo -n ' snmpd'; /usr/local/sbin/snmpd
#fi

This will start snmpd and use /etc/snmp/snmpd.conf for the configuration.
The snmpconf tool can be used to help edit your configuration files. See
snmpconf(1), snmpd(8), and snmpd.conf(5) for more options.

Chyba nie muszę tłumaczyć tego dla użytkowników OpenBSD :).
Gdy już wyedytujemy rc.local, czas na konfigurację samego SNMP. W tym celu posłużymy się skryptem przygotowanym przez autorów.

> /usr/local/bin/snmpconf -i -g basic_setup

Pomoże nam to utworzyć standardową konfigurację SNMPd. A więc do rzeczy. Odpalamy snmpconf:

The following installed configuration files were found:

1: /etc/snmp/snmpd.conf

Would you like me to read them in? Their content will be merged with the
output files created by this session.

Valid answer examples: "all", "none","3","1,2,5"

Read in which (default = all): all, lub po prostu sam [ENTER]

Skrypt pyta nas, który plik z konfigiem chcemy edytować (wybieramy ten podstawowy). Teraz dostajemy pytanie, czy chcemy utworzyć podstawowe informacje o systemie. Domyślnie jest 'y' (chcemy). Wciskamy więc ENTER i je podajemy.

>
The location of the system: Serwerownia
The contact information: Admin@serwera.pl

Teraz skrypt pyta nas, czy chcemy ustawić wartość identyfikatora sysServices.0. Tak, chcemy... Wklepujemy więc ENTER przy pytaniu:

Do you want to properly set the value of the sysServices.0 OID (if you don't
know, just say no)? (default = y):

Następnie podajemy za pomoc? 0 i 1 dalsze dane. (0 - oznacza n, czyli NO, 1 - y,czyli YES). Wybieramy 0 przy pytaniach:

does this host offer physical services (eg, like a repeater) [answer 0 or
1]: 0
does this host offer datalink/subnetwork services (eg, like a bridge):
0

Chyba, że serwer z uruchomionym SNMPd robi za jaki? mostek lub 'repeater'. Nastepnie podajemy wartość 1 przy pytaniach:

does this host offer internet services (eg, supports IP): 1
does this host offer end-to-end services (eg, supports TCP): 1
does this host offer application services (eg, supports SMTP): 1

Teraz będziemy ustawiać ważny aspekt konfiguracji, jakim jest dostęp i co za tym idzie bezpieczeństwo serwera. SNMPd może odbierać zapytania (i na nie odpowiadać) z różnych adresów sieciowych. Nam zależy tylko, aby demon komunikował się tylko z nami na 'localhoście'. W zabezpieczaniu dużą rolę odgrywa 'społeczność'. Jest to swoisty login dostępowy do zapytań SNMPd. Domyślne wartości 'private' i 'public' s? znane szerokiej rzeszy doświadczonych użytkowników systemów, a co za tym idzie, każdy taki osobnik będzie mógł potem "odpytywać" nasz serwer. Nazwa społeczności powinna być unikalna i trudna do odgadnięcia przez potencjalnego "użyszkodnika". Ja, na potrzeby artykułu wymyśliłem nazwę społeczności: MisieWCiapki. Z pomocą tej społeczności będziemy później odpytywać SNMPd, i ustawimy MRTG. Skonfigurujemy również nasze SNMPd, aby pracowało w trybie "tylko odczyt".

Do you want to configure the agent's access control? (default = y):[ENTER]

Na powyższe pytanie odpowiadamy więc twierdząco. Następnie jesteśmy pytani o sposób dostępu do protokołu SNMPv3. Nie jest on nam potrzebny, jak i protokół SNMPv1/v2c w trybie odczyt/zapis. Odpowiadamy więc przecząco na poniższe pytania:

Do you want to allow SNMPv3 read-write user based access (default = y): n
Do you want to allow SNMPv3 read-only user based access (default = y): n
Do you want to allow SNMPv1/v2c read-write community access (default = y): n

Następnie jesteśmy pytani czy chcemy aby SNMPv1/2c pracowało w trybie 'tylko odczyt'. Odpowiadamy twierdząco, a następnie ustawiamy społeczność i host:

Do you want to allow SNMPv1/v2c read-only community access (default = y): y

Configuring: rocommunity
Description:
a SNMPv1/SNMPv2c read-only access community name
arguments: community [default|hostname|network/bits] [oid]

The community name to add read-only access for: MisieWCiapki
The hostname or network address to accept this community name from [RETURN for all]:
localhost
The OID that this community should be restricted to [RETURN for no-restriction]: [ENTER]

Finished Output: rocommunity MisieWCiapki localhost

Jeżeli nie mamy zamiaru dodawać innej społeczności to w poniższym pytaniu odpowiadamy przecząco.

Do another rocommunity line? (default = y):n

Następnie jesteśmy pytani, czy chcemy używać "pułapki". Służy ona do wysyłania danych do innego komputera, w przypadku gdy pozycje MIB zostaną wyzerowane. Nie jest to nam potrzebne, więc odpowiadamy przecząco:

Do you want to configure where and if the agent will send traps? (default = y):n

Dobrnęliśmy już do sekcji, która opisuje co mamy monitorować. Chcemy monitorować np wolne miejsce na dysku, odpowiadamy więc twierdząco na poniższe pytanie:

Do you want to configure the agent's ability to monitor various aspects of
your system? (default = y):y

Nie chcemy jednak (póki co) monitorować procesów, więc odpowiadamy 'n' na pytanie:

Do you want to configure the agents ability to monitor processes? (default = y): n

Teraz dostajemy pytanie, czy chcemy monitorować dyski. Tak, chcemy:

Do you want to configure the agents ability to monitor disk space? (default = y):y

Przechodzimy do sekcji dodawania informacji o dyskach (partycjach). Ja dla przykładu dodam tylko /home, ale Wy możecie dodać wszystkie. Opcja MIN oznacza, ile może być minimalnie wolnego miejsca, zanim użytkownik zostanie ostrzeżony.

Configuring: disk
Description:
Check for disk space usage of a partition.
The agent can check the amount of available disk space, and make
sure it is above a set limit.

disk PATH [MIN=100000]

PATH: mount path to the disk in question.
MIN: Disks with space below this value will have the Mib's errorFlag set.
Can be a raw byte value or a percentage followed by the %
symbol. Default value = 100000.

The results are reported in the dskTable section of the UCD-SNMP-MIB tree

Enter the mount point for the disk partion to be checked on: /home
Enter the minimum amount of space that should be available on /home: 5%

Finished Output: disk /home 5%
Do another disk line? (default = y): n

Na koniec jesteśmy pytani, czy chcemy monitorować średnie obciążenie i rozmiar plików. Na początek się obejdziemy bez tego:

Do you want to configure the agents ability to monitor load average?
(default = y): n
Do you want to configure the agents ability to monitor file sizes? (default
= y): n

I to by było tyle na początek naszej przygody z SNMP. Otrzymujemy informację:

The following files were created:

snmpd.conf installed in /usr/local/share/snmp

Następnie kopiujemy sobie ten konfig na miejsce domyślnego (pamiętając o zrobieniu kopii).

> cp /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.bak
> cp /usr/local/share/snmp/snmpd.conf /etc/snmp/snmpd.conf

Jeżeli mamy już uruchomiony SNMPD, przeładowujemy go, lub uruchamiamy od nowa. Najwygodniej jest podczas uruchamiania SNMPD wskazywać na plik z konfiguracją:

> /usr/local/sbin/snmpd -c /etc/snmp/snmpd.conf

(Jeżeli wybierzesz ten sposób, to pamiętaj o dodaniu ścieżki do konfiga w rc.local). Czas na testy. Gdy upewnimy sie, że SNMPD działa, wydajemy polecenie:

> snmpwalk -v 1 -c MisieWCiapki localhost \ .1.3.6.1.4.1.2021.11.9.0UCD-SNMP-MIB::ssCpuUser.0 = INTEGER: 0

Powinniśmy otrzymać wartość (w procentach) czasu, jaki zużywa nasz CPU na wykonywanie programów użytkownika. Listę wszystkich wartości można otrzymać, kierując wynik snmpwalk do jakiegoś pliku:

> snmpwalk -v 1 -c MisieWCiapki localhost > wynik.txt

Przydatnym programem jest też snmptranslate, który wyświetla wiele przydatnych informacji dotyczących poszczególnych pozycji MIB (dla wnikliwych polecam dokumentację). Instalację i konfigurację SNMPD możemy uznać za zakończoną. Teraz zajmiemy się..

MRTG

Przechodzimy do portu z MRTG i go instalujemy:

> cd /usr/ports/net/mrtg && make install clean

Następnie, gdy już mamy MRTG na pokładzie, tworzymy plik konfiguracyjny. Pamiętajmy, by zmienić nazwę domyślnemu plikowi w /etc:

> cp /etc/mrtg.cfg /etc/mrtg.cfg.bak
> cfgmaker MisieWCiapki@localhost > /etc/mrtg.cfg

Edytujemy teraz nasz plik konfiguracyjny /etc/mrtg.cfg

# Podajemy ścieżkę do pliku, w którym będziemy zapisywać info

WorkDir: /home/karol/public_html/mrtg

#Poniżej mamy trochę informacji o naszym systemie
#Domyślnie mamy konfiguracje interfejsów sieciowych
#Odhashujmy te, które chcemy monitorować
#Ja podałem tylko przykład dla głownego interfejsu
#Pamiętajcie, aby w konfigu podać własne IP i własny interfejs sieciówki
#

### Interface 2 >> Descr: 'rl0' | Name: '' | Ip: '212.33.82.196' | Eth:
'00-0c-xx-xx-xx-xx' ###
### The following interface is commented out because:
### * has a speed of 0 which makes no sense

Target[siec]: 2:MisieWCiapki@localhost:
SetEnv[siec]: MRTG_INT_IP="212.33.82.196" MRTG_INT_DESCR="rl0"
MaxBytes[siec]: 1250000
Title[siec]: SatanBSD.org (inet)
PageTop[siec]: <h1>SatanBSD.org (inet)</h1>
<table>
<tr><td>System:</td> <td>SatanBSD.org (inet)</td></tr>
<tr><td>Description:</td><td>rl0 </td></tr>
<tr><td>Max Speed:</td> <td>100.0 Mbits/s</td></tr>
<tr><td>Ip:</td> <td>212.33.82.196 (SatanBSD.org)</td></tr>
</table>

#
#A to przykładowy konfig wyświetlający info o zużyciu CPU
#

Title[cpu]: SatanBSD.org - Zużycie CPU
YLegend[cpu]: Zużycie CPU
WithPeak[cpu]:wmy
MaxBytes[cpu]:100
Target[cpu]:.1.3.6.1.4.1.2021.11.9.0&.1.3.6.1.4.1.2021.11.10.0:MisieWCiapki@localhost
ShortLegend[cpu]:CPU
LegendI[cpu]: CPU użytkowników
LegendO[cpu]: CPU systemowe
Legend1[cpu]: Zużycie procesora (użytkownicy)
Legend2[cpu]: Zużycie procesora (system)
Legend3[cpu]: Max. 5 min. zużycie procesora (użytkownicy)
Legend4[cpu]: Max. 5 min. Zużycie procesora (system)
Options[cpu]: growright, gauge
PageTop[cpu]: <h1>Zużycie CPU na SatanBSD.org>/h1>

Zapisujemy plik i sprawdzamy efekt naszej pracy:

> /usr/local/bin/mrtg /etc/mrtg.cfg

Na początku możemy dostać komunikat w stylu:

Rateup WARNING: /usr/local/bin/rateup could not read the primary log file for cpu

Po prostu nie było jeszcze żadnych zapisanych wyników. Po parokrotnym wywołaniu mrtg, ostrzeżenia powinny zniknąć.
Możemy również wygenerować stronę indeksów naszych statystyk:

> /usr/local/bin/indexmaker /etc/mrtg.cfg > /home/karol/public_html/mrtg/index.html

Potem wystarczy wejść na stronę WWW i zobaczyć wynik.
Na samym końcu dodajemy wpis do crona, który uruchomi MRTG co 5 min:

*/5 * * * * /usr/local/bin/mrtg /etc/mrtg.cfg

I to by było chyba na tyle...
Dodatek: Stąd można pobrać skrypt, który wypisze nam w postaci listy wszystkie pozycje MIB do pliku *.html (lub innego po modyfikacji), oraz je opiszę. (Opis użycia w środku skryptu).

Przydatne linki:


Oryginalny artykuł znajduje się w serwisie BSD4U.
Autor: Karol 'lofix' Gogiel.
Powrót na górę strony...