Jak skonfigurować niestandardowe formaty dziennika dostępu i błędów w Nginx

Jak skonfigurować niestandardowe formaty dziennika dostępu i błędów w Nginx

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.conf
http #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.conf
log_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.conf
http ## 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.conf
http 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.conf
serwer 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.

/etc/nginx/nginx.conf
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.conf
 http 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.