![3 načini za namestitev Spotifyja v Debian, Ubuntu in Linux Mint](/f/6d5d68835f8dbbb787720f044dfd52ff.png?width=100&height=100)
Nginx HTTP strežnik ima neverjetno zmogljivost beleženja, ki je zelo prilagodljiva. V tem članku bomo razložili, kako konfigurirate lastne formate za dostop in dnevnike napak za Nginx v Linuxu.
Namen tega priročnika je, da vam pomaga razumeti, kako nastanejo dnevniki, in konfigurirati oblike dnevnikov po meri za odpravljanje napak, odpravljanje težav ali analizo dogajanja v spletnem strežniku in spletnih aplikacijah (na primer sledenje zahteve).
Preberite tudi: 4 Dobra orodja za spremljanje in upravljanje odprtokodnih dnevnikov za Linux
Ta članek je sestavljen iz treh razdelkov, ki vam bodo razjasnili konfiguracijo dnevniki dostopa/napak in kako omogočiti pogojno beleženje v Nginxu.
Spodaj Nginx, se vse zahteve strank do strežnika obnovijo v datoteki dnevnik dostopa v določeni obliki z uporabo ngx_http_log_module modul.
Privzeta datoteka dnevnika je log/access.log (običajno /var/log/nginx/access_log v sistemih Linux) in privzeta oblika zapisovanja je običajno kombinirana ali glavna oblika (ta se lahko razlikuje od enega do drugega distronta).
The access_log za nastavitev datoteke dnevnika in log_format Direktiva (velja samo v kontekstu http) se uporablja za nastavitev oblike dnevnika. Oblika dnevnika je opisana s skupnimi spremenljivkami in spremenljivkami, ki so nastale le v času, ko je zapisan.
Sintaksa za konfiguracijo zapisa dnevnika je:
zapis oblike zapisa dnevnika 'niz_premenljivih_do_definiranih_formatov';
in skladnja za konfiguracijo dnevnika dostopa je:
access_log/path/to/log_file format_name; #najenostavnejša oblika OR. access_log/path/to/log_file [format [buffer = size] [gzip [= level]] [flush = time] [if = condition]];
V nadaljevanju je izvleček iz privzete konfiguracijske datoteke Nginx /etc/nginx/nginx.conf naprej CentOS 7.
/etc/nginx/nginx.conf
http {#main format dnevnika log_format main '$ remote_addr - $ remote_user [$ time_local] "$ request"' '$ status $ body_bytes_sent "$ http_referer"' '"$ http_user_agent" "$ http_x_forwarded_for"'; access_log /var/log/nginx/access.log; }
Ta oblika dnevnika prinaša naslednji vnos v dnevnik.
127.0.0.1 - dbmanager [20/Nov/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 "
Sledi še ena uporabna oblika zapisovanja, ki jo uporabljamo za sledenje zahtevam do naših spletnih aplikacij z uporabo nekaterih privzete spremenljivke, najpomembneje je, da ima ID zahteve in beleži podatke o lokaciji odjemalca (država, koda države, regija in mesto).
/etc/nginx/nginx.conf
log_format po meri '$ remote_addr - $ remote_user [$ time_local]' '"$ request" $ status $ body_bytes_sent' '"$ http_referer" "$ http_user_agent" '' "$ http_x_forwarded_for" $ request_id '' $ geoip_country_name $ geoip_country_code '' $ geoip_region_name $ geoip_city ';
Uporabite ga lahko tako:
access_log /var/log/nginx/access.log po meri;
To bo ustvarilo vnos v dnevnik, ki je videti tako.
153.78.107.192 - - [21. november/2017: 08: 45: 45 +0000] "POST/ngx_pagespeed_beacon? url = https%3A%2F%2Fwww.example.com%2Fads%2Fresh-pomaranče-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 ""-"a02b2dea9cf06344a25611c1d7ad72db Uganda UG Kampala Kampala
Z datoteko access_log direktive na isti ravni, tukaj uporabljamo več kot eno datoteko dnevnika v kontekstu http.
/etc/nginx/nginx.conf
http {## privzeta oblika dnevnika log_format main '$ remote_addr - $ remote_user [$ time_local] "$ request"' '$ status $ body_bytes_sent "$ http_referer"' '"$ http_user_agent" "$ http_x_forwarded_for"'; ## sledenje zahtevam po obliki zapisa po meri log_format po meri '$ remote_addr - $ remote_user [$ time_local]' '"$ request" $ status $ body_bytes_sent' '"$ http_referer" "$ http_user_agent"' '"$ http_x_forwarded_for" $ request_id' '$ geoip_country_name $ geoip_country_code' '$ geoip_region_name $ geoip_city '; ## to uporablja privzeto obliko zapisa dnevnika access_log /var/log/nginx/access.log; ## to uporablja našo obliko zapisa dnevnika po meri access_log/var/log/nginx/custom_log po meri; }
V nadaljevanju so predstavljeni primeri naprednejših konfiguracij beleženja, ki so uporabne za zapise dnevnikov, ki vsebujejo spremenljivke, povezane s stiskanjem, in za ustvarjanje stisnjenih datotek dnevnika:
access_log/var/log/nginx/custom_log medpomnilnik po meri 32k; access_log /path/to/log.gz stiskanje gzip flush = 5m;
V primeru Nginx doživi kakršne koli napake, podatke o njih zabeleži v dnevnik napak. Ta vprašanja spadajo v različne stopnje resnosti: odpravljanje napak, info, opaziti, opozoriti, napaka (to je privzeta raven in deluje globalno), kritik, opozorilo, oz emerg.
Privzeta datoteka dnevnika je log/error.log, vendar se običajno nahaja v /var/log/nginx/ o distribucijah Linuxa. The error_log direktiva se uporablja za podajanje datoteke dnevnika in jo je mogoče uporabiti v glavnem, http, pošti, toku, strežniku, kontekstu lokacije (v tem vrstnem redu).
Upoštevati morate tudi, da:
Zapisovanje napak lahko konfigurirate z naslednjo skladnjo:
error_log/path/to/log_file log_level;
Na primer:
error_log/var/log/nginx/error_log warn;
To bo naročilo Nginxu, da zabeleži vsa sporočila te vrste opozoriti in hujšo raven dnevnika kritik, opozorilo, in emerg sporočila.
V naslednjem primeru so sporočila kritik, opozorilo, in emerg ravni bodo zabeležene.
error_log /var/www/example1.com/log/error_logkriti;
Razmislite o spodnji konfiguraciji, tukaj smo definirali beleženje napak na različnih ravneh (v kontekstu http in strežnika). V primeru napake se sporočilo zapiše samo v en dnevnik napak, najbližje ravni, kjer se je napaka pojavila.
/etc/nginx/nginx.conf
stiskanje http {log_format '$ remote_addr - $ remote_user [$ time_local]' '"$ request" $ status $ body_bytes_sent' '"$ http_referer" "$ http_user_agent" "$ gzip_ratio"'; error_log/var/log/nginx/error_logkritik; strežnik {poslušaj 80; ime_strežnika example1.com; #to beleži sporočila o napakah, na primer example1.com samo error_log /var/log/nginx/example1.error_log warn; …... } strežnik {poslušaj 80; ime_strežnika example2.com; #to beleži sporočila o napakah, na primer example2.com samo error_log /var/log/nginx/example1.error_log; ……. } }
Če uporabljate več kot enega error_log direktive, kot je prikazano v spodnji konfiguraciji (ista raven), se sporočila zapišejo v vse podane dnevnike.
/etc/nginx/nginx.conf
strežnik {poslušaj 80; ime_strežnika example1.com; error_log /var/www/example1.com/log/error_log opozori; error_log /var/log/nginx/example1.error_log crit; …... }
V nekaterih primerih bomo morda želeli, da Nginx izvede pogojno beleženje sporočil. Nginx ne beleži vsakega sporočila, zato lahko zanemarimo nepomembne ali manj pomembne vnose dnevnika iz dnevnikov dostopa za določene primere.
Lahko uporabimo ngx_http_map_module modul, ki ustvarja spremenljivke, katerih vrednosti so odvisne od vrednosti drugih spremenljivk. Parametri znotraj bloka zemljevida (ki bi morali obstajati samo v vsebini http) podajajo preslikavo med izvornimi in posledičnimi vrednostmi.
Za tovrstno nastavitev zahteva ne bo zabeležena, če bo stanje ocenjeno na “0”
ali prazen niz. Ta primer izključuje zahteve s kodami stanja HTTP 2xx in 3xx.
/etc/nginx/nginx.conf
http {map $ status $ condition {~^[23] 0; privzeto 1; } strežnik {access_log /path/to/access.log po meri if = $ condition; } }
Tu je še en uporaben primer za odpravljanje napak spletne aplikacije v razvojni fazi. S tem boste prezrli vsa sporočila in samo podatke o odpravljanju napak v dnevniku.
/etc/nginx/nginx.conf
http {map $ info $ debuggable {privzeto 0; odpravljanje napak 1; } strežnik {…….. access_log/var/log/nginx/testapp_debug_access_log debug if = $ debuggable; #logs druge zahteve access_log /var/log/nginx/testapp_access.log main; ……. } }
Izvedete lahko več informacij, vključno s prijavo v syslog tukaj.
To je vse za zdaj! V tem priročniku smo razložili, kako konfigurirati obliko zapisovanja po meri za dnevnike dostopa in napake v Nginxu. Uporabite spodnji obrazec za povratne informacije, če želite zastaviti vprašanja ali deliti svoje misli o tem članku.