[ Pobierz całość w formacie PDF ]
Modified naglówka, należy użyć zmiennej:
%{Last-Modified}o
3.19. Rejestracja aktywnéÅ›ci serwera w bazie danych MySQL 73
›naliza
Odpowiedz HTTP wysylana przez serwer Apache może mieć bardzo zlożoną postać
zależy to od konfiguracji serwera. Rozbudowane skrypty lub serwery aplikacji mogą
dodawać do naglówków odpowiedzi serwera niestandardowe pola, a znajomość
umieszczanych w nich wartości może być bardzo przydatna podczas śledzenia proble-
mów ze skryptem bądz aplikacją.
Poza faktem, że rejestrowane są zawartości pól, które serwer wysyła, a nie odbiera, re-
ceptura ta jest taka sama jak receptura 3.17 i tam należy szukać więcej szczególów. Jedy-
na różnica w skladni dyrektyw formatu rejestracji jest taka, że pola odpowiedzi są reje-
strowane za pomocą dyrektywy o, a pola żądań za pomocą dyrektywy i.
Zobacz również
" Receptura 3.17.
3.19. Rejestracja aktywnéÅ›ci serwera
w bazie danych MySQL
Problem
Zamiast zapisywać zdarzenia związane z dostępem do serwera WWW w plaskich pli-
kach tekstowych, informacje te powinny trafiać wprost do bazy danych. Ulatwi to ich
pózniejszą analizę.
RozwiÄ…zanie
Ze strony http://www.grubbybaby.com/mod_log_sql/ należy pobrać oraz zainstalować (po-
slugując się wskazówkami z receptury 2.1) najnowszą wersję modulu mod_log_sql. Na-
stępnie należy wydać polecenia:
# mysqladmin create apache_log
# mysql apache_log
# mysql apache_log
mysql> grant insert,create on apache_log.* to webserver@localhost identified
by 'wwwpw';
Do pliku httpd.conf należy dodać następujące wiersze:
MySQLLoginInfo localhost webserver wwwpw
MySQLDatabase apache_log
MySQLTransferLogTable access_log
MySQLTransferLogFormat huSUsbTvRA
74 RézdziaÅ‚ 3. Rejestracja zdarzeÅ„
›naliza
Warto zauważyć, że nazwy strony WWW, pliku archiwum tar oraz modulu różnią się.
Plik modulu oraz jego katalog zawierajÄ… nazwÄ™ mysql , ale katalog strony WWW oraz
nazwa pliku archiwum tar zawierają już bardziej ogólną nazwę sql .
Zobacz również
" http://www.grubbybaby.com/mod_log_sql/.
3.20. Rejestracja zdarzeń
w dzienniku systeméwym
Problem
™nformacje o zdarzeniach majÄ… trafiać do dziennika systemowego (syslog) systemu ope-
racyjnego.
RozwiÄ…zanie
%7łeby do dziennika systemowego trafialy komunikaty o blędach, należy użyć dyrektywy:
ErrorLog syslog:user
W niektórych Å›r¿d¿wiskach zamiast klasy rejestracji user bardziej wlaÅ›ciwa m¿Å¼e
¿kazać siÄ™ klasa local7.
%7łeby do dziennika systemowego trafialy komunikaty związane z dostępem do serwera
WWW, trzeba wykonać odrobinę więcej pracy. W tym celu w pliku konfiguracyjnym
należy umieścić wiersz:
CustomLog |/usr/local/apache/bin/apache_syslog combined
w którym apache_syslog jest nazwą na przyklad takiego programu:
#!/usr/bin/perl
use Sys::Syslog qw( :DEFAULT setlogsock );
setlogsock('unix');
openlog('apache', 'cons', 'pid', 'user');
while ($log = ) {
syslog('notice', $log);
}
closelog;
3.20. Rejestracja zdarzeÅ„ w dzienniku systeméwym 75
(Należy zauważyć, że skrypt ten jest tylko szablonem programu, który w wersji nadają-
cej się do użycia powinien zawierać kontrolę blędów i tym podobne funkcje).
›naliza
™stniejÄ… dwa powody rejestrowania zdarzeÅ„ w dzienniku systemowym (syslog) systemu
operacyjnego. Pierwszym z nich jest możliwość rejestracji zdarzeń wielu serwerów
w centralnym systemie rejestracji zdarzeń. Drugi wynika z dużej liczby istniejących na-
rzędzi slużących do monitorowania dziennika systemowego i potrafiących wysylać po-
wiadomienia o pewnych zdarzeniach. Użycie tego rodzaju narzędzi przynosi calej in-
stalacji serwera WWW wylącznie korzyści.
Komunikaty o blędach serwer Apache domyślnie kieruje do dziennika systemowego.
Jest to zdecydowanie najlepsze dla nich miejsce, gdyż przeważnie trafiają tam informacje
o blędach, a rzadziej zwykle komunikaty informacyjne.
Skladnia dyrektywy ErrorLog umożliwia użycie jako jej parametru dziennika systemo-
wego (syslog) oraz wyszczególnienie jego klasy. W poprzednim przykladzie poslużono
się klasą user. W pliku /etc/syslog.conf należy zdefiniować, gdzie w przypadku danej kla-
sy powinny być kierowane zapisy dziennika do pliku czy do zdalnego serwera prze-
chowującego centralne dzienniki zdarzeń.
Ponieważ serwer Apache nie rejestruje domyślnie w dzienniku systemowym informacji
związanych z dostępem do serwera, należy do tego celu użyć dyrektywy wykorzystują-
cej potok. Zastosowany do tego celu prosty, napisany w języku Perl program korzysta
z modulu Sys::Syslog będącego standardowym modulem instalacji języka Perl. Ponieważ
używany w potoku program obslugi pliku dziennika zdarzeń uruchamiany jest wraz
z serwerem i oczekuje danych jedynie na wejÅ›ciu STD™N, użycie jÄ™zyka Perl nie ma
wplywu na wydajność pracy serwera.
Mając kilka serwerów WWW i chcąc, by wszystkie one kierowaly komunikaty o zdarze-
niach do centralnego dziennika zdarzeń, należy skonfigurować je tak, by kierowaly ko-
munikaty o zdarzeniach do dziennika systemowego, a następnie skierować użytą w tym
celu klasę do centralnego serwera. Należy pamiętać, że w takim przypadku pozycje
w centralnym dzienniku zdarzeń mogą nie pojawiać się w poprawnej kolejności, co nie
jest aż wcale takie ważne, ale początkowo wygląda dość dziwnie. Skutki tego efektu
można zmniejszyć, synchronizując zegary serwerów za pomocą protokolu NTP.
Więcej szczególów na temat konfiguracji sieciowego serwera syslog można znalezć
w dokumentacji programu syslogd.
Zobacz również
" Strony dokumentacji man programu syslogd oraz pliku syslog.conf.
76 RézdziaÅ‚ 3. Rejestracja zdarzeÅ„
3.21. Rejestracja katalégów użytkéwników
Problem
Każda witryna WWW katalogu użytkownika (czyli witryna dostępna pod adresem
http://nazwa_serwera/~nazwa_użytkownika) ma posiadać swój dziennik zdarzeń.
RozwiÄ…zanie
W pliku httpd.conf należy umieścić dyrektywę:
CustomLog "|/usr/local/apache/bin/userdir_log" combined
Następnie w pliku /usr/local/apache/bin/userdir_log należy umieścić następujący kod:
#!/usr/bin/perl
my $L = '/usr/local/apache/logs'; # Katalog dzienników zdarzeń
my %is_open = ( ); # Zapamiętanie uchwytu pliku
$|=1;
open(F, ">>$L/access_log"); # Domyślny dziennik błędów
while (my $log = ) {
if ($log =~ m!\s/~(.*?)/!) {
my $u = $1;
unless ($is_open{$u}) {
my $fh;
open $fh, '>>' . $L . '/'. $u;
$is_open{$u} = $fh;
}
select ($is_open{$u});
$|=1;
print $log;
}
else {
select F;
$|=1;
print F $log;
}
}
close F;
foreach my $h (keys %is_open) {
close $h;
}
(Należy zauważyć, że skrypt ten jest tylko szablonem programu, który w wersji nadają-
cej się do użycia powinien zawierać kontrolę blędów i tym podobne funkcje).
3.21. Rejestracja katalégów użytkéwników 77
›naliza
Zwykle żądania kierowane do witryn WWW użytkowników rejestrowane są w glów-
[ Pobierz całość w formacie PDF ]