Log súbory - APACHE HTTP Server
K dosiahnutiu efektívnosti riadenia web servera je potrebné zaznamenávať informácie o aktivite a výkone web servera tak isto ako je potrebné zaznamenávať akékoľvek problémy ktoré pri behu môžu nastať. Apache HTTP web server (ďalej len Apache sever) poskytuje veľmi komplexnú a flexibilnú zaznamenávaciu (logovaciu) schopnosť. Druhy log súborov vytvárané Apache serverom môžeme rozdeliť do nasledujúcich skupín:
- Error Log
- Access Log
- Ostatné Log súbory
- PID súbor
- Script Log
- Rewrite Log
Error Log
Chybový záznam ktorého meno a umiestnenie je nastavené direktívou
ErrorLog je najdôležitejším log záznamom. Je to miesto kam Appache httpd posiela diagnostické informácie a záznamy hocijakej chyby ktorá sa vyskytne v požiadavkách na vykonávanie procesov. Je to prvé miesto kde sa je potrebné pozrieť pri problémoch s načítaním servera alebo s požadovanou operáciou servera, pretože práve tento log obsahuje často detaily o tom, kde nastala chyba a ako ju opraviť.
Error log je obvykle zapísaný do súboru (error_log v unix systémoch a error.log vo Windows a OS/2 systémoch). V unixových systémoch je možné aby server posielal záznamy o chybách do syslog-u alebo ich presmerovať do požadovaného programu.
Formát error log záznamu je relatívne nekonvenčný a popisný. Ale existujú informácie, ktoré sú obsiahnuté vo väčšine záznamov. Napríklad:
[Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1] client denied by server configuration: /export/home/live/ap/htdocs/test
Prvá položka v log zázname je dátum a čas správy. Druhá položka predstavuje vážnosť chyby ktorá je zaznamenaná. Typy vážností chýb ktoré sú zaznamenávané v error log kontroluje direktíva
LogLevel. Tretia položka zaznamenáva IP adresu klienta ktorý spôsobil danú chybu. Za ňou nasleduje samotná správa, ktorá v našom prípade indikuje, že server bol nakonfigurovaný tak, aby zakázal prístup danému klientovi. Server tiež zaznamenáva file-system cestu (na rozdiel od web cesty) k žiadanému dokumentu.
Existuje veľa druhov rôznych správ ktoré sa môžu nachádzať v error logu. Väčšina vyzerá podobne ako náš príklad. Error log taktiež obsahuje výstup pre ladenie z CGI skryptov. Každá informácia napísaná do stderr CGI skryptom bude skopírovaná priamo do error logu.
Nie je možné upravovať error log pridávaním, alebo odstraňovaním informácií. Akokoľvek záznamy v error logu týkajúce sa konkrétnych požiadaviek majú zodpovedajúci záznam v access logu. Napr. náš vyššie spomínaný príklad zodpovedá záznamu s kódom 403 v Access logu. Keďže Access log je možné upravovať, je možné získať viac informácií o stave chyby použitím práve tohto log súboru.
Počas testovania je veľmi užitočné nepretržité monitorovanie error logu pre akýkoľvek problém.
Access Log
Zaznamenáva všetky procesy o ktoré server požiada. Umiestnenie a obsah access logu sú kontrolované direktívou
CustomLog. Direktíva
LogFormat môže byť použitá na zjednodušenie selekcie z obsahu logu. Táto selekcia opisuje ako nakonfigurovať server na zaznamenávanie informácií v access logu.
Samozrejme, že zaznamenávanie informácií v access logu je iba začiatkom logovacieho manažmentu. Ďalším krokom je analýza informácií na vytvorenie užitočných štatistík. Tejto analýze a tak isto aplikáciám, ktoré ju umožňujú sa budeme ale venovať neskôr.
Formát access logu je veľmi flexibilný. Formát je špecifikovaný použitím
formátového reťazca ktorý vyzerá veľmi podobne ako reťazcový formát printf funkcie v jazyku C.
Rotácia log súborov
Aj na dokonca mierne rušnom servery, množstvo informácií uložené v log súboroch môže byť dosť veľké. Access log súbor typicky rastie 1MB alebo viac za 10000 požiadaviek. Z toho dôvodu by bolo neustále nutné periodicky rotovať log súbory presúvaním a mazaním exitujúcich. Toto nie je možné robiť ak server beží, pretože Apache pokračuje v zápise do starého log súboru pokiaľ je tento súbor otvorený pre zápis. Preto je potrebné server reštartovať po tom čo sú log súbory premiestnené alebo zmazané, takže server otvorí nové logovacie súbory.
Použitím graceful (elegantného) reštartu, server môže byť nastavený na otvorenie nových log súborov bez straty existujúcich alebo očakávaných spojení s klientmi. Akokoľvek na dosiahnutie tohto je potrebné aby server pokračoval v zápise do starých log súborov pokiaľ dokončí obsluhu starých požiadaviek. Preto je potrebné počkať istý čas po reštarte, predtým ako sa začne akékoľvek vykonávanie nad log súbormi. Typický scenár, ktorý jednoducho zrotuje log súbory a skomprimuje staré log súbory na ušetrenie miesta je:
mv access_log access_log.old
mv error_log error_log.old
apachectl graceful
sleep 600
gzip access_log.old error_log.old
Ďalším spôsobom ako vykonať rotovanie log súborov je použitie piped logs.
Piped Logs
Apache httpd je schopný písania error a access log súborov cez rúry do iných procesov, skôr ako priamo do súboru. Táto schopnosť dramaticky zvyšuje flexibilitu logovania bez pridávania kódu do hlavného servera. K tomu, aby boli logy písané do rúry, je jednoducho potrebné zapísať názov súboru so znakom rúry “|”, nasledovaným menom vykonateľného súboru, ktorý by mal akceptovať logy na svojom štandardnom vstupe. Apache začne piped-log proces hneď po svojom štarte a reštartuje ho ak by spadol počas behu servera. (nejedná sa celkom o spoľahlivé piped logging).
Piped log procesy sú potomkovia rodičovského procesu Apache httpd a dedia userid tohto procesu. To znamená, že piped log programy zvyčajne bežia ako root. Preto je veľmi dôležité aby boli tieto programy jednoduché a bezpečné.
Jedno významné plus piped logov je schopnosť rotovania log súborov bez nutnosti reštartu servra. Apache HTTP server obsahuje jednoduchý program nazvaný
rotatelogs pre tento účel. Napríklad pre rotovanie logov každých 24 hodín, je možné použiť:
CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/access_log 86400" common
Podobný, ale oveľa viac flexibilný program sa volá
cronolog.
Tak ako pri podmienenom logovaní , piped logovanie je veľmi dôležitý nástroj, ale nemal by byť používaný ak je možné jednoduchšie riešenie ako off-line post-processing.
Virtual Hosts
Ak je prevádzkovaný server s viacerými virtuálnymi hostami, je viacero možností ako sa vysporiadať s log súbormi. Po prvé je to použitie log súborov presne tým istým spôsobom ako pri jednohostových serveroch. Jednoduchým umiestnením logovacích direktív mimo
sekcie do kontextu hlavného servera je možné logovať všetky požiadavky v rovnakom access a error log súbore. Táto technika nie je veľmi vhodná ak chceme vytvárať štatistiky o individuálnych virtuálnych hostoch.
Pre access log je veľmi dobý kompromis. Pridaním informácie o virtuálnom hoste do formátovacieho reťazca je možné logovať všetky hosty do rovnakého súboru a neskôr ho rozdeliť na samostatné súbory pre jednotlivé hosty. Napríklad, použijúc nasledujúce direktívy:
LogFormat "%v %l %u %t \"%r\" %>s %b" comonvhost
CustomLog logs/access_log comonvhost
%v je použité na logovanie mena virtuálneho hostu ktorý obsluhuje požiadavku. Potom programom ako split-logfile môže byť spravený dodatočný post-processing v zmysle rozdelenia access logu na súbory pre jednotlivé virtuálne hosty.
Bohužiaľ, žiadan podobná technika neexistuje pre error log, čiže je potrebné si vybrať medzi zmixovaním všetkých virtuálnych hostov v rovnakom error logu alebo použitím jedného error logu pre každý virtuálny host.
Iné Logovacie súbory
PID Súbor
Na začiatku Apache httpd ukladá id rodičovského procesu do súboru logs/httpd.pid. Názov tohto súboru môže byť zmenená PidFile direktívou. Id procesu je pre použitie administrátora pri reštartovaní a ukončovaní deamona (program, ktorý beží na pozadí a zabezpečuje nejakú službu), poslaním signálu rodičovskému procesu, vo Windowse sa používa možnosť príkazového riadku -k.
Script Log
Pre pomoc pri odlaďovaní ScriptLog direktíva dovoľuje nahrávanie vstupu a výstupu z CGI skryptov. Používané iba pre testing; nie pre bežiace servre.
Rewrite Log
Tento log súbor produkuje detailnú analýzu ako sú transformované požiadavky transformačným zariadením (prepisovačom).
-- MatusTaraba - 21 May 2007