MRTG
(→Przykład) |
(→Opis) |
||
Linia 12: | Linia 12: | ||
** zmodyfikowac skrypty aby działało jako pliki '''.bat''' a nie bash - w sumie kosmetyczna zmiana | ** zmodyfikowac skrypty aby działało jako pliki '''.bat''' a nie bash - w sumie kosmetyczna zmiana | ||
** zamiast [[cron]]a uzyć harmonogramu windows albo komendy '''at'''. | ** zamiast [[cron]]a uzyć harmonogramu windows albo komendy '''at'''. | ||
− | |||
=Wymagania= | =Wymagania= |
Wersja z 22:16, 6 wrz 2006
Spis treści |
Opis
Poniżej podany jest przykład konfiguracji MRTG tak aby tworzył wykresy z ilości graczy na serwerze albo serwerach. Dzięki temu możemy zobaczyć ile jest graczy na serwerze, nie musimy statystyk tworzyć na serwerze na którym działa serwer. Prawdę mówiąc, dzieki temu możemy sprawdzać status dowolnego serwera.
- Artykuł przeznaczony na serwery Linux.
- Na Windows tez się da, ale jes to bardziej żmudne:
Wymagania
- MRTG - powinen być dostępny na wiekszości serwerów Linux
- PERL i możliwośc wykonywania skryptów perl
- QStat - wyagana bdzie możliwość kompilacji ze żródeł, ale można sobie załatwić juz skompilowane wersje.
- WWW na kórej będa obrazki - przeważnie ten sam serwer na którym wszstko się dzieje - czyli mrtg, perl, qstat.
- cron - do wykonywania co pewien czas skryptów.
Instalacja
Katalogi
Zakładamy takie oto katalogi
- /var/www/html/mrtg/serwer/ - tu będą trzymane logi MRTG oraz obrazki i strona WWW
- /var/www/html/mrtg/serwer/bin/ - to jest katalog gdzie mieści się QStat oraz pliki perl
Oczywiście wartodostosować katalogi do własnych potrzeb - wszstko zalezy od dystrybucji, oraz jak chcemy ustawic sobie skrypty.
QStat
Nie będę się tutał rozpisywał na temat QStata - przeczytajcie po prostu tutaj jak go zainstalować.
PERL
Notka: Właścwie, to całość mozna wykonać bez PERLa - wykorzystując odpowiednio zmodyfikowany skrypt w bash'u. i Tworzymy katalogu /var/www/html/mrtg/serwer/bin/ plik np s1.pl i wpisujemy w nim poniższy kod:
#!/usr/bin/perl $myserver = "156.17.41.139:27015"; $ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/; if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $in, $ENV{'CONTENT_LENGTH'}); print "URL Input: $in <br><br> \n"; } else { $in = $ENV{'QUERY_STRING'}; # print "URL Input: $in <br><br> \n"; } (my $setting, my $value) = split(/=/, $in); $setting =~ tr/+/ /; $setting =~ s/%(..)/pack("C", hex($1))/eg; $value =~ tr/+/ /; $value =~ s/%(..)/pack("C", hex($1))/eg; if ($setting eq "server") { $myserver = $value; } open (QSTAT, "/var/www/html/mrtg/serwer/bin/qstat -raw '*' -a2s $myserver |"); print ; while (<QSTAT>) { ($type,$ip,$servername,$map,$maxplayers,$curplayers,$ping,$timeout) = split(/\*/); if($ip) { print "$curplayers \n"; print "$curplayers \n"; } }
- w linii
$myserver = "156.17.41.139:27015";
trzbea podac numer ip serwera oraz port, jaki chcemy sprawdzać.
- w linii
open (QSTAT, "/var/www/html/mrtg/serwer/bin/qstat -raw '*' -a2s $myserver |");
trzeba wpisac ścieżke do pliku qstat. Oznaczenie -a2s oznacza, że qstat ma sprawdzać status serwera Half-Life Steam (czyli wszystkie bazujące na Half-Life 1 po 1 czerwca 2006 roku oraz serwerów Source).
Warto przetestować skrypt - w tym celu w konsoli wpisujemy
perl s1.pl
W efekcie powinniśmy uzyskać 2 linie zawierające ilość graczy na serwerze.
[kaszpir@bagno mrtg]$ perl s1.pl 12 12 [kaszpir@bagno mrtg]$
Jak nie ma na serwerze nikogo to oczywiście będą zera.
MRTG konfig
Teraz czas zrobić plik konfiguracyjny dla MRTG aby po wczytaniu go wykonywał.
W tym celu tworzymy plik w katalogu /var/www/html/mrtg/serwer/ o nazwie serwer_gry.cfg i wpisujemy do niego poniższe dane:
WorkDir: /var/www/html/mrtg/serwer/ Options[_]: growright, gauge, nopercent, integer, avgpeak, noborder, pngdate MaxBytes[_]: 32 Target[dod13]: `/var/www/html/mrtg/serwer/bin/s1.pl` #MaxBytes[dod13]: 32 #Options[dod13]: gauge, nopercent, growright ShortLegend[dod13]: users YLegend[dod13]: users connected LegendI[dod13]: Users Connected: LegendO[dod13]: Legend1[dod13]: Users Connected Legend2[dod13]: Title[dod13]: Ilosc graczy na Festung-Breslau.pl DOD 1.3 PageTop[dod13]: <H1>Ilosc graczy na Festung-Breslau.pl DOD 1.3</H1>
WorkDir: /var/www/html/mrtg/serwer/
Definuje w jakim katalogu maja się znajdowac logi i wyniki pracy MRTG
Target[dod13]: `/var/www/html/mrtg/serwer/bin/s1.pl`
Oznacza jaki skrypt chcemy wykonac do zliczania danych, tutaj jest nasz perlowy skrypt na stats serwera. Linii Options oraz MaxBytes radze nie zmieniać - albo zajrzyjcie do instruckji MRTG. Reszte mozna spolszczyć.
Pamiętajcie aby zmienić prawa do pliku serwer_gry.sh na wyonywalne ( chmod +x serwer_gry.sh ).
Bash
Skrypt będzie potrzebny do uruchamiania w cronie. Najlepiej umieścić go w katalogu /var/www/html/mrtg/serwer/ i nazwać serwer_gry.sh
#!/bin/bash LANG=C mrtg /var/www/html/mrtg/serwer/serwer_gry.cfg --logging /var/www/html/mrtg/serwer/serwer_gry.log --debug="cfg,dir,base,tarp,snpo,fork,time,log" indexmaker /var/www/html/mrtg/serwer/serwer_gry.cfg --output=/var/www/html/mrtg/serwer/index.html
Skrypt wykonuje dwie rzeczy:
- wywołanie mrtg aby wczytał plik konfiguracyjny i przetworzenia go (w tym wywołanie skryptu perl, który z kolei odpala qstat'a) do obrazka ze statusu serwera.
- wykonanie programu indexmaker, który przetwarzając plik konfiguracyjny wygeneruje plik index.html dla serwera WWW
Testowanie
Aby srpawdzić czy działa to poprawnie warto uruchomić go wpisując (będą c w katalogu /var/www/html/mrtg/serwer/)
./serwer_gry.sh
i popatrzec na pojawiające się komunikaty (szczególnie w /var/www/html/mrtg/serwer/serwer_gry.log). Za pierwszymi 3 wywołaniami MRTG powinen zwrócić informacje że brakuje kilku plików log, ale juz za czwartym wywołaniem powinen nie zgłaszać błędów -tak więc jest to normalne. Jeśli za dziesiątym wywołaniem masz błędy to zanczy ze coś zwaliłeś.
Patrz także na plik /var/www/html/mrtg/serwer/index.html oraz czy w katalogu /var/www/html/mrtg/serwer/ sa obrazki png. Warto więc nakierowac naszą przeglądarkę na ten serwer/index.html i zobaczyc czy sa obrazki (konfiguracja katalogów zależy od serwera WWW)
Crontab
No to jak skrypt działa to należy go dodać do crontaba aby się wykonywał raz na pięc minut. W tym celu wpisujemy w konsoli
crontab -e
i dopisujemy poniższą linię:
*/5 * * * * /var/www/html/mrtg/serwer/serwer_gry.sh > /var/www/html/mrtg/serwer/serwer_gry_cron.log 2>&1
Zapisujemy konfigurację i powinno generować obrazki - dla jednego serwera.
Rozszerzenie na kilka serwerów
Cały pic polega na tym, że tworzymy oddzielne pliki PERL dla każdego serwera - np poprzez skopiowanie pliku s1.pl na s2.cfg i ustawienie tam innego numeru ip oraz portu i rodzaju serwera (zmiana -a2s na inny, zobacz QStat)
Nastepnie poszerzamy plik serwer.cfg jaki przetwarza mrtg i indexmaker. Przykład dla kilku serwerów:
WorkDir: /var/www/html/mrtg/serwer/ Options[_]: growright, gauge, nopercent, integer, avgpeak, noborder, pngdate MaxBytes[_]: 32 ShortLegend[_]: Graczy YLegend[_]: Graczy LegendI[_]: Graczy: LegendO[_]: Legend1[_]: Graczy Legend2[_]: Target[fbro]: `/var/www/html/mrtg/serwer/bin/s1.pl` Title[fbro]: Ilosc graczy na Festung-Breslau.pl & Red.Orchestra.pl & Aster.pl PageTop[fbro]: <H1>Ilosc graczy na Festung-Breslau.pl & Red.Orchestra.pl & Aster.pl</H1> Target[dod13]: `/var/www/html/mrtg/serwer/bin/s2.pl` Title[dod13]: Ilosc graczy na Festung-Breslau.pl DOD 1.3 PageTop[dod13]: <H1>Ilosc graczy na Festung-Breslau.pl DOD 1.3</H1> Target[dods]: `/var/www/html/mrtg/serwer/bin/s3.pl` Title[dods]: Ilosc graczy na Festung-Breslau.pl DOD:S PageTop[dods]: <H1>Ilosc graczy na Festung-Breslau.pl DOD:S</H1> Target[dodsa]: `/var/www/html/mrtg/serwer/bin/s4.pl` Title[dodsa]: Ilosc graczy na Festung-Breslau.pl & Aster.pl DOD:S PageTop[dodsa]: <H1>Ilosc graczy na Festung-Breslau.pl & Aster.pl DOD:S</H1> Target[cs]: `/var/www/html/mrtg/serwer/bin/s5.pl` Title[cs]: Ilosc graczy na CS War3 @ Akron.Net.Pl PageTop[cs]: <H1>Ilosc graczy na CS War3 @ Akron.Net.Pl</H1>
Po zapisaniu zmian, crontab zrobi swoje poprzez wykonanie skryptu shella i sam wygeneruje stronę z obrazakmi dla każdego serwera.
Przykład
Dla kilku serwerów Festung-Breslau.PL oraz Red Orchestra PL