Jak skonfigurować niestandardowe formaty dziennika dostępu i błędów w Nginx
- 3889
- 1035
- Seweryn Augustyniak
Nginx http Serwer ma fenomenalny obiekt do rejestrowania, który jest wysoce konfigurowalny. W tym artykule wyjaśnimy, jak skonfigurować własne formaty dla dzienników dostępu i błędów dla Nginx w Linux.
Celem tego przewodnika jest zrozumienie, w jaki sposób generowane są dzienniki, aby skonfigurować niestandardowe formaty dzienników do celów debugowania, rozwiązywania problemów lub analizy tego, co rozwija się na serwerze internetowym, a także aplikacje internetowe (takie jak żądania śledzenia).
Przeczytaj także: 4 dobre narzędzia do monitorowania i zarządzania dziennikiem typu open source dla Linux
Ten artykuł składa się z trzech sekcji, które oświecą Cię o konfiguracji Dzienniki dostępu/błędów i jak włączyć logowanie warunkowe w nginx.
Konfigurowanie dzienników dostępu w Nginx
Pod Nginx, Wszystkie żądania klienta na serwerze są odbierane w Dziennik dostępu w określonym formacie za pomocą ngx_http_log_module moduł.
Domyślny plik dziennika to Log/Access.dziennik (zazwyczaj /var/log/nginx/access_log w systemach Linux), a domyślnym formatem rejestrowania jest zwykle połączony lub główny format (może to różnić się w zależności od dystrybucji).
access_log Dyrektywa (obowiązująca w HTTP, serwer, lokalizacja, jeśli w lokalizacji i limicie oprócz kontekstu) jest używana do ustawienia pliku dziennika i log_format Dyrektywa (obowiązująca tylko w kontekście HTTP) służy do ustawienia formatu dziennika. Format dziennika jest opisany przez wspólne zmienne i zmienne, które generowały tylko w momencie pisania dziennika.
Składnia do konfigurowania formatu dziennika jest:
log_format format_name 'set_of_variables_to_define_format';
A składnią do konfigurowania dziennika dostępu jest:
access_log/ścieżka/do/log_file format_name; #Simplest Form lub Access_Log/ścieżka/do/log_file [format [buffer = rozmiar] [gzip [= poziom]] [flush = czas] [if = warunek]];
Poniżej znajduje się fragment domyślnego pliku konfiguracyjnego Nginx /etc/nginx/nginx.conf NA Centos 7.
/etc/nginx/nginx.confhttp #Main log log log_format Main '$ remote_addr - $ remote_user [$ time_local] "$ request" "$ status $ body_bytes_sent" $ http_referer "" $ http_user_agent "" $ http_x_forward_for' '; access_log/var/log/nginx/access.dziennik;
Ten format dziennika daje następujący wpis dziennika.
127.0.0.1 - DBManager [20/listopada/2017: 18: 52: 17 +0000] "GET/HTTP/1.1 „401 188”-„„ Mozilla/5.0 (x11; Ubuntu; Linux x86_64; RV: 47.0) Gecko/20100101 Firefox/47.0 "
Poniżej znajduje się kolejny użyteczny format rejestrowania, którego używamy do śledzenia żądań do naszych aplikacji internetowych za pomocą niektórych zmiennych domyślnych, najważniejsze ma szczegóły lokalizacji klienta żądania i logów (kraj, kod kraju, region i miasto).
/etc/nginx/nginx.conflog_format niestandardowe '$ remote_addr - $ remote_user [$ time_local] "" $ request "$ status $ body_bytes_sent" "$ http_refer" "$ http_user_agent" "" $ http_x_forwarded_for "$ request_id" $ geoIp_Country_name
Możesz go użyć w ten sposób:
access_log/var/log/nginx/access.dziennik niestandardowy;
To wytworzy wpis dziennika, który pojawia się w ten sposób.
153.78.107.192 - - [21/listopada/2017: 08: 45: 45 +0000] "Post/ngx_pagespeed_beacon?URL = https%3a%2f%2fwww.przykład.com%2fads%2ffresh-oranges-1509260795 HTTP/2.0 "204 0" https: // www.Suasell.COM/ADS/Fresh-Oranges-1509260795 "" Mozilla/5.0 (x11; Ubuntu; Linux x86_64; RV: 47.0) Gecko/20100101 Firefox/47.0 ""-"A02B2DEA9CF06344A25611C1D72DB UGANDA UG KAMPALA KAMPALA
Możesz określić kilka dzienników za pomocą access_log Dyrektywy na tym samym poziomie, tutaj używamy więcej niż jednego pliku dziennika w kontekście HTTP.
/etc/nginx/nginx.confhttp ## domyślny log log_format Main '$ remote_addr - $ remote_user [$ time_local] "$ request" "$ status $ body_Bytes_Sent" $ http_referer "" "$ http_user_agent" "$ http_x_forward_for' '; ## Śledzenie żądania za pomocą niestandardowego log_format niestandardowe '$ remote_addr - $ remote_user [$ time_local] "" $ request "$ status $ body_bytes_sent" "$ http_referer" "$ http_user_agent_agent" "$ http_x_forwarded_for" $ request_id "$ geoip_county_name_name_Codre_Codre_COUNS $ geoip_region_name $ geoip_city '; ## To używa domyślnego formatu logarytmicznego dostępu_log/var/log/nginx/access.dziennik; ## To korzysta z naszego niestandardowego formatu dziennika Access_Log/var/log/nginx/custom_log custom;
Poniżej przedstawiono bardziej zaawansowane konfiguracje rejestrowania, które są przydatne w formatach dziennika zawierających zmienne związane z kompresją i do tworzenia kompresowanych plików dziennika:
access_log/var/log/nginx/custom_log niestandardowy bufor 32k; access_log/ścieżka/do/log.Kompresja GZ GZIP spłukiwanie = 5m;
Konfigurowanie dzienników błędów w Nginx
W razie Nginx doświadcza wszelkich usterki, rejestruje informacje dotyczące ich w dzienniku błędów. Kwestie te należą do różnych poziomów nasilenia: odpluskwić, informacje, ogłoszenie, ostrzegać, błąd (To jest poziom domyślny i działa na całym świecie), Crit, alarm, Lub Emerg.
Domyślny plik dziennika to log/błąd.dziennik, Ale zwykle znajduje się w /var/log/nginx/ w rozkładach Linux. error_log Dyrektywa służy do określenia pliku dziennika i może być używana w głównym, HTTP, Mail, Stream, Server, Location Context (w tej kolejności).
Powinieneś również zauważyć, że:
- Konfiguracje w głównym kontekście są zawsze dziedziczone przez niższe poziomy w powyższej kolejności.
- i konfiguracje na niższych poziomach zastępują konfiguracje odziedziczone po wyższych poziomach.
Możesz skonfigurować rejestr błędów za pomocą następującej składni:
error_log/ścieżka/do/log_file log_level;
Na przykład:
error_log/var/log/nginx/error_log ostrzegający;
To poinstruuje Nginx, aby zarejestrował wszystkie wiadomości typu ostrzegać i większy poziom dziennika Crit, alarm, I Emerg wiadomości.
W następnym przykładzie wiadomości Crit, alarm, I Emerg poziomy zostaną zarejestrowane.
error_log/var/www/example1.com/log/error_log crit;
Rozważ poniższą konfigurację, tutaj zdefiniowaliśmy rejestrowanie błędów na różnych poziomach (w kontekście HTTP i serwera). W przypadku błędu komunikat jest zapisywany tylko do jednego dziennika błędów, ten najbliżej poziomu, na którym pojawił się błąd.
/etc/nginx/nginx.confhttp log_format kompresja '$ remote_addr - $ remote_user [$ time_local] „$ request” $ status $ body_bytes_sent "" $ http_referer "" $ http_user_agent "" $ gzip_ratio "'; error_log/var/log/nginx/error_log crit; serwer Słuchaj 80; Server_name Przykład 1.com; #Ten dziennik komunikaty o błędach na przykład1.com tylko błąd_log/var/log/nginx/example1.ERROR_LOG WARN;… serwer Słuchaj 80; Server_name Przykład 2.com; #Ten dziennik komunikaty o błędach na przykład2.com tylko błąd_log/var/log/nginx/example1.error_log;… .
Jeśli używasz więcej niż jednego error_log Dyrektywy jak w poniższej konfiguracji (ten sam poziom) wiadomości są zapisywane na wszystkich określonych dziennikach.
/etc/nginx/nginx.confserwer Słuchaj 80; Server_name Przykład 1.com; error_log/var/www/example1.com/log/error_log ostrzega; error_log/var/log/nginx/example1.error_log crit;…
Konfigurowanie warunkowego rejestrowania w Nginx
W niektórych przypadkach możemy chcieć, aby Nginx wykonywał warunkowe rejestrowanie wiadomości. Nie każdy komunikat musi być zarejestrowany przez Nginx, dlatego możemy zignorować nieistotne lub mniej ważne wpisy dziennika z naszych dzienników dostępu dla poszczególnych przypadków.
Możemy użyć ngx_http_map_module moduł, który tworzy zmienne, których wartości zależą od wartości innych zmiennych. Parametry wewnątrz bloku mapy (które powinny istnieć tylko w zawartości HTTP) określają mapowanie między wartościami źródłowymi i wynikowymi.
W przypadku tego rodzaju ustawienia żądanie nie zostanie zarejestrowane, jeśli warunek oceni do „0”
lub pusty ciąg. Ten przykład wyklucza żądania za pomocą kodów stanu HTTP 2xx I 3xx.
http map $ status $ warunek ~^[23] 0; domyślnie 1; serwer Access_Log/ścieżka/do/dostęp.Zaloguj się niestandardowo if = $ warunek;
Oto kolejny przydatny przykład debugowania aplikacji internetowej w fazie rozwoju. To zignoruje wszystkie wiadomości i tylko rejestrować informacje o debugowaniu.
/etc/nginx/nginx.confhttp map $ info $ debuggable default 0; Debug 1; Server … Access_Log/var/log/nginx/testapp_debug_access_log debugowanie if = $ debuggable; #logs inne żądania Access_Log/var/log/nginx/testapp_access.Log Main;… .
Możesz dowiedzieć się więcej informacji, w tym zalogowanie się do Syslog tutaj.
To wszystko na teraz! W tym przewodniku wyjaśniliśmy, jak skonfigurować niestandardowy format rejestrowania w celu dostępu i dzienników błędów w Nginx. Skorzystaj z poniższego formularza opinii, aby zadawać pytania lub podziel się przemyśleniami na temat tego artykułu.
- « Jak testować prędkość ładowania witryny w terminalu Linux
- Zintegruj Ubuntu z Samba4 AD DC z SSSD i Realm - Część 15 »