dziennik Apache rejestruje zdarzenia, które były obsługiwane przez serwer WWW Apache, w tym żądania z innych komputerów, odpowiedzi wysyłane przez Apache i działania wewnętrzne na serwerze Apache. Ta część przewodnika wyjaśnia podstawy logowania Apache, w tym typy dzienników generowanych przez Apache, gdzie są przechowywane i jak je interpretować. Omówimy również zaawansowane tematy, takie jak ustawianie niestandardowych formatów dzienników i konfigurowanie modułów w celu uzyskania bogatszych danych.,
rodzaje dzienników Apache
Apache generuje dwa rodzaje dzienników: dzienniki dostępu i dzienniki błędów.
Access Log
access log zawiera informacje o żądaniach napływających do serwera www. Informacje te mogą obejmować strony, które użytkownicy przeglądają, status pomyślnych żądań i czas odpowiedzi serwera. Oto przykład typowego wpisu dziennika dostępu:
Dziennik Błędów
dziennik błędów zawiera informacje o błędach napotkanych przez serwer WWW podczas przetwarzania żądań, takich jak brakujące pliki., Zawiera również informacje diagnostyczne o samym serwerze. Oto przykładowy dziennik błędów:
File does not exist: /var/www/favicon.ico
lokalizacje logów
domyślnie Apache przechowuje dzienniki dostępu i błędów w oddzielnych plikach na serwerze. Dokładna lokalizacja zależy od systemu operacyjnego., Możesz znaleźć lokalizację swojego systemu operacyjnego, klikając na następujące linki:
Debian/Ubuntu/Linux Mint
Konfiguracja Redhat/Fedora/CentOS
openSUSE
Konfigurowanie logów Apache
Apache posiada wysoce konfigurowalną strukturę logowania, która pozwala dostosować zachowanie logowania globalnie lub dla każdego hosta wirtualnego. Istnieje kilka dyrektyw, których można użyć do zmiany zachowania logowania. Niektóre z bardziej powszechnych dyrektyw to dyrektywy poziomu dziennika i formatu dziennika, które wyjaśnimy bardziej szczegółowo.,
Dyrektywa o poziomie logowania
dyrektywaLogLevel
określa minimalny poziom istotności zdarzeń rejestrowanych w określonym miejscu docelowym. Poziom dotkliwości reprezentuje jak ważne jest zdarzenie i może wahać się od „Emerg” do „Trace8”, przy czym „Emerg” reprezentuje zdarzenia, które mogą prowadzić do niestabilności, a „Trace8” reprezentuje komunikaty na poziomie śledzenia. Na przykład LogLevel crit
zezwala na logi o nasileniu „Crit”, „Alert” i „Emerg”, ale ignoruje wszystkie inne poziomy.,
format dziennika
dyrektywaLogFormat
kontroluje układ i formatowanie zdarzeń dziennika. Apache domyślnie używa Common Log Format (CLF), ale możesz określić swój własny format, aby zmienić pola zawarte w każdym dzienniku.
Możesz również użyć dyrektywyCustomLog
, aby zmienić lokalizację pliku dziennika. W Linuksie Apache Zwykle zapisuje logi do katalogów /var/log/apache2 lub /var/log/httpd w zależności od systemu operacyjnego i nadpisań hosta wirtualnego., Można również zdefiniować ciąg LogFormat po nazwie pliku, który będzie stosować ciąg formatowania tylko do tego pliku.
na przykład poniższa konfiguracja zapisuje logi do logs/access_log
używając standardowego „wspólnego” formatu. Podkatalog logs / jest względem katalogu określonego w dyrektywie ServerRoot:
LogFormat "%h %l %u %t \"%r\" %>s %b" commonCustomLog "logs/access_log" common
CustomLog „logs/access_log” common
pełna lista pól znajduje się w dokumentacji dziennika Apache., Zalecamy użycie co najmniej następujących pięciu pól, ponieważ są one ważne dla monitorowania stanu serwera i rozwiązywania problemów:
-
%>s
– kod statusu HTTP dla żądania. Wyświetla ostateczny status żądania po każdym wewnętrznym przekierowaniu; dla pierwotnego stanu użyj %s. -
%U
– żądana ścieżka URL, z wyłączeniem dodatkowych parametrów URL, takich jak ciąg zapytania. -
%a
– adres IP klienta składającego żądanie., Jest to przydatne do identyfikacji ruchu z określonego źródła. -
%T
– ile czasu zajęło przetworzenie żądania w sekundach. Jest to przydatne do pomiaru prędkości witryny. Użyj %D, aby wykonać ten sam pomiar w mikrosekundach. -
%{UNIQUE_ID}e
– znany również jako identyfikator żądania, rejestruje unikalny identyfikator każdego żądania. Jest to przydatne do śledzenia żądania od Apache do serwera aplikacji sieci web.,
Przypisywanie Nicknames
LogFormat
można przypisać Nicki, które można następnie użyć z dyrektywąCustomLog
do zapisu logów przy użyciu określonego formatu. Pozwala to na użycie tego samego formatu dziennika dla kilku plików dziennika bez konieczności ponownego definiowania formatu za każdym razem. Jest to szczególnie przydatne podczas używania różnych plików dziennika dla wielu wirtualnych hostów.
na przykład utwórzmy przykładowy format i nazwijmy go „vhost_combined.,”Następnie utworzymy dyrektywę CustomLog
zapisującą logi do pliku przy użyciu formatu vhost_combined.
LogFormat "%v:%p %h %l %u %t "%r" %>s %O "%{Referer}i" "%{User-Agent}i"" vhost_combinedCustomLog /var/log/apache2/vhost.log vhost_combined
formatowanie jako JSON
Przechowywanie dzienników jako zwykłego tekstu ułatwia ich skanowanie na wypadek, gdybyś kiedykolwiek potrzebował przeczytać pliki dziennika. Utrudnia to jednak korzystanie z narzędzi takich jak rozwiązania do zarządzania dziennikami do odczytu dzienników, ponieważ narzędzia te muszą wiedzieć, jak są formatowane dzienniki. Większość rozwiązań do zarządzania logami obsługuje domyślny format dziennika Apache, ale jeśli nie, należy rozważyć użycie ustrukturyzowanego formatu, takiego jak JSON.,
JSON (skrót od JavaScript Object Notation) jest elastycznym formatem do przechowywania ustrukturyzowanych danych. JSON przechowuje kolekcję zagnieżdżalnych par nazwa / wartość, umożliwiając przechowywanie prawie każdego typu danych i struktury. JSON jest również skutecznie samodokumentujący, ponieważ nazwa klucza opisuje dane, które zawiera. JSON obsługuje wiele podstawowych typów danych, w tym ciągi znaków, liczby, wartości logiczne, tablice i wartości null.,
oto przykładLogFormat
, który przechowuje logi w formacie JSON:
LogFormat "{ \"time\":\"%t\", \"remoteIP\":\"%a\", \"host\":\"%V\", \"request\":\"%U\", \"query\":\"%q\", \"method\":\"%m\", \"status\":\"%>s\", \"userAgent\":\"%{User-agent}i\", \"referer\":\"%{Referer}i\" }"
domyślne nadpisania hostów wirtualnych
hosty wirtualne (vhost) są używane do uruchamiania więcej niż jednej witryny na jednym serwerze Apache. Dla każdego vhosta można zdefiniować osobną konfigurację logowania, która ma pierwszeństwo przed globalną konfiguracją logowania. Pozwala to na przykład zalogować każdą witrynę do osobnego katalogu. Domyślne pozostawienie tych parametrów powoduje globalną konfigurację logowania.
na przykład, następująca konfiguracja jest dla vhost at example.,com. Logi są zapisywane do oddzielnych plików access.log
Ierror.log
w katalogu/var/www/example.com/logs
:
poniższe sekcje pokazują domyślne lokalizacje plików konfiguracyjnych i dyrektywy używane w różnych dystrybucjach Linuksa.
Debian/Ubuntu/Linux Mint
w dystrybucjach opartych na Debianie domyślną konfigurację vhost dla witryn niezaszyfrowanych (port 80) można znaleźć pod adresem/etc/apache2/sites-available/000-default.conf
. Domyślna konfiguracja vhost dla witryn szyfrowanych SSL / TLS (port 443) jest pod adresem /etc/apache2/sites-available/default-ssl.conf
.,
tabela domyślnych dyrektyw
* uwarunkowana zmienna środowiskowa. Zapewnia obsługę wielu instancji serwera Apache.
** zmienna środowiskowa. Służy do dynamicznego ustawiania początkowej ścieżki dziennika.
Red Hat/Fedora/CentOS
w dystrybucjach Red Hat główny plik konfiguracyjny znajduje się pod adresem/etc/httpd/conf/httpd.conf
. Możesz umieścić dodatkowe pliki konfiguracyjne vhost w katalogu /etc/httpd/conf.d
, który jest automatycznie odczytywany przez serwer przy starcie.
tabela domyślnych dyrektyw
* uwarunkowana załadowanym log_config_module.,
** *
OpenSUSE
w OpenSUSE domyślna konfiguracja vhost dla witryn niezaszyfrowanych (port 80) Znajduje się pod adresem/etc/apache2/default-vhost.conf
, natomiast domyślna konfiguracja dla witryn zaszyfrowanych przy użyciu protokołu SSL/TLS znajduje się pod adresem/etc/apache2/default-vhost-ssl.conf
.
tabela domyślnych dyrektyw
* uwarunkowana załadowanym log_config_module.
** *
*** * * * * * * * * ,
Moduły związane z logami
serwer WWW Apache oferuje szereg modułów, które zmieniają sposób działania Apache lub rozszerzają jego możliwości. Poniższe Moduły dodają lub zmieniają zachowanie logowania w użyteczne sposoby.
mod_log_config
jest to podstawowy moduł logowania używany przez Apache i ten, który omówiliśmy w tej sekcji przewodnika.
mod_log_debug
moduł ten udostępnia dodatkowe opcje rejestrowania wiadomości debugowania., Na przykład możesz rejestrować zdarzenia do określonej ścieżki URL, rejestrować żądania po ich przetworzeniu, rejestrować wiadomości od określonego klienta, jeśli spowodują one przekroczenie czasu itp. Zauważ, że ten moduł jest eksperymentalny i może nie być dołączony do twojej dystrybucji Apache.
na przykład następująca konfiguracja rejestruje adres IP klienta za każdym razem, gdy żąda określonej ścieżki:
mod_log_forensic
moduł ten umożliwia logowanie przed i po przetworzeniu żądania. Każdemu wpisowi przypisany jest unikalny identyfikator, który może być używany do śledzenia zdarzeń między dziennikiem śledczym a dziennikiem normalnym., Jednak forensic logger nie obsługuje niestandardowych formatów. Moduł ten zastępuje również moduł mod_unique_id.
Po włączeniu modułu możesz użyć słowa kluczowegoforensic
, aby określić, który plik dziennika jest dziennikiem śledczym. Możesz również użyć wzorca %{forensic-id}
w innych łańcuchach LogFormat
, aby dodać dane śledcze do normalnych dzienników. Tutaj używamy /var/www/example.com/logs/forensic.log
:
każda linia w dzienniku śledczym zaczyna się znakiem „+” lub” -„., „+”wskazuje linię dziennika wpisów dla tego konkretnego żądania, a” – ” wskazuje kolejne wpisy dla tego samego żądania.
na przykład, następujący dziennik wpisów został wygenerowany przez wywołanie http://localhost przy użyciu domyślnego formatu dziennika:
wpis końcowy z tego samego żądania pojawia się jako:
-3264:55958cb4:0
Jeśli wpis końcowy nie pojawia się w dzienniku, żądanie nie zostało zakończone.
mod_logio
moduł ten dodaje możliwość rejestrowania liczby bajtów wysłanych i odebranych na żądanie., Obejmuje to bajty Odebrane, Wysłane i przesłane (kombinacja odebranych i wysłanych). Moduł dokładnie uwzględnia również zmiany rozmiaru spowodowane szyfrowaniem SSL i TLS. Ten moduł wymaga mod_log_config i zazwyczaj jest domyślnie dołączony do Apache.
moduł ten dodaje dyrektywęLogIOTrackTTFB On|Off
, która włącza możliwość śledzenia czasu do pierwszego bajtu (TTFB). TTFB to czas od momentu otrzymania żądania do momentu wysłania odpowiedzi do klienta., Następnie możesz użyć %^FB
, aby dołączyć pomiar TTFB do ciągu LogFormat
.
mod_filter
moduł ten dostarcza filtry kontekstowe do łańcucha wyjściowego, rejestrując dowolną liczbę dostawców filtrów. mod_filter nie jest specyficzny dla logowania, ale pozwala na wyodrębnianie konkretnych żądań w oparciu o dostawcę filtrów. Kontenery kontekstowe obejmują: main Apache config, vhost config, within directory tags oraz .pliki htaccess.,
zastosowanie tego modułu pozwala na Filtrowanie żądań zawierających takie elementy jak określone kryteria wtrysku i z jakiego adresu IP pochodzi.
moduł ten jest domyślnie dostarczany w wielu dystrybucjach pakietów, ale może wymagać włączenia. Do celów rejestrowania, dyrektywa FilterTrace umieszcza informacje w dzienniku błędów.,li> FilterDeclare
– deklaruje inteligentny filtr
FilterProtocol
– powoduje, że mod_filter poprawnie obsługuje nagłówki odpowiedziFilterProvider
– rejestruje dostawców filtrówFilterTrace
– pozwala na debugowanie/diagnostyczne informacji do dziennika błędów przed przetwarzaniem dostawcyponiższy przykład stosuje filtrowanie w kontenerze kontekstowym vhost warunkowo na filtrze i zawiera moduły:
mod_unique_id:
moduł ten konstruuje zmienną środowiskową i unikalny identyfikator dla każdego żądania., Często jest on zawarty w dystrybucjach pakietów, ale może wymagać włączenia. Ten unikalny identyfikator jest zapisywany w dzienniku dostępu.
Ten moduł został zastąpiony przez mod_log_forensic dla celów śledczych, ale nadal jest obsługiwany dla innych.
w przeciwieństwie do identyfikatora śledczego, unikalny identyfikator jest przekazywany do obsługi aplikacji poprzez zmienną środowiskową UNIQUE_ID. Umożliwia to programistom aplikacji śledzenie żądania przez serwer WWW do serwera aplikacji. Może być przydatny do debugowania żądania.,
Apache wyłącza procesy potomne w celu obsługi żądań, a instancja potomna przetwarza kilka żądań na raz. W rezultacie czasami pożądane jest użycie unikalnego identyfikatora do identyfikacji pojedynczego żądania w wielu instancjach serwera i procesach potomnych.
Po włączeniu moduł domyślnie udostępnia identyfikator do obsługi aplikacji.,
na przykład:
UNIQUE_ID: Vaf3en8AAQEAAAtoQlAAAAAA
identyfikator jest zbudowany z 32-bitowego adresu IP, 32-bitowego identyfikatora procesu, 32-bitowego znacznika czasu połączonego z 16-bitowym licznikiem dla lepszej rozdzielczości niż jednosekundowy, 32-bitowy indeks wątku. Komponent znacznik czasu to UTC, aby zapobiec problemom z korektami czasu letniego. Obsługa aplikacji powinna traktować identyfikator tylko jako nieprzezroczysty token i nie dzielić go na części składowe.
Zobacz też Przeanalizuj to. Sprawdź to. Rozwiąż to
Zobacz co ma znaczenie.
START FREE TRIAL