Kuinka määrittää mukautetut käyttöoikeudet ja virhelokimuodot Nginxissä
Nginx HTTP -palvelimessa on ilmiömäinen lokitoiminto, joka on hyvin muokattavissa. Tässä artikkelissa selitämme, kuinka voit määrittää omat muodot Nginxin käyttö- ja virhelokeille Linuxissa.
Tämän oppaan tarkoituksena on auttaa sinua ymmärtämään, kuinka lokit luodaan, jotta voit määrittää mukautettuja lokimuotoja virheenkorjausta, vianetsintää tai verkkopalvelimessasi ja verkkosovelluksissa tapahtuvaa analysointia varten (kuten jäljityspyynnöt).
Lue myös: 4 hyvää avoimen lähdekoodin lokien seuranta- ja hallintatyökalua Linuxille
Tämä artikkeli koostuu kolmesta osasta, joissa kerrotaan käyttö-/virhelokien määrittämisestä ja ehdollisen kirjauksen ottamisesta käyttöön Nginxissä.
Käyttölokien määrittäminen Nginxissä
Kohdassa Nginx kaikki asiakaspyynnöt palvelimelle tallennetaan käyttölokiin määritetyssä muodossa ngx_http_log_module-moduulin avulla.
Oletuslokitiedosto on log/access.log (yleensä /var/log/nginx/access_log Linux-järjestelmissä) ja lokin oletusmuoto on yleensä yhdistetty tai pää muodossa (tämä voi vaihdella jakelusta toiseen).
access_log-direktiiviä (sovellettava http, palvelin, sijainti, jos sijainnissa ja raja paitsi konteksti) käytetään lokitiedoston ja log_format-direktiivin asettamiseen (sovellettava Vain http-yhteys) käytetään lokimuodon asettamiseen. Lokimuotoa kuvaavat yleiset muuttujat ja muuttujat, jotka luodaan vain lokia kirjoitettaessa.
Lokimuodon määrittämisen syntaksi on:
log_format format_name 'set_of_variables_to_define_format';
ja käyttölokin konfiguroinnin syntaksi on:
access_log /path/to/log_file format_name; #simplest form
OR
access_log /path/to/log_file [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
Seuraavassa on ote CentOS 7:n Nginx-oletusmääritystiedostosta /etc/nginx/nginx.conf.
http {
#main log format
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;
}
Tämä lokimuoto tuottaa seuraavan lokimerkinnän.
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"
Seuraava on toinen hyödyllinen lokimuoto, jota käytämme verkkosovellustemme pyyntöjen jäljittämiseen käyttämällä joitakin oletusmuuttujia. Tärkeintä on, että siinä on pyyntötunnus ja se kirjaa asiakkaan sijaintitiedot (maa, maakoodi, alue ja kaupunki).
log_format custom '$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 ';
Voit käyttää sitä näin:
access_log /var/log/nginx/access.log custom;
Tämä tuottaa lokimerkinnän, joka näyttää tältä.
153.78.107.192 - - [21/Nov/2017:08:45:45 +0000] "POST /ngx_pagespeed_beacon?url=https%3A%2F%2Fwww.example.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" "-" a02b2dea9cf06344a25611c1d7ad72db Uganda UG Kampala Kampala
Voit määrittää useita lokeja käyttämällä access_log-komentoja samalla tasolla, tässä käytämme useampaa kuin yhtä lokitiedostoa http-kontekstissa.
http{
##default log format
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
##request tracing using custom format
log_format custom '$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 ';
##this uses the default log format
access_log /var/log/nginx/access.log;
##this uses the our custom log format
access_log /var/log/nginx/custom_log custom;
}
Seuraavat ovat edistyneempiä lokimääritysesimerkkejä, jotka ovat hyödyllisiä pakkaukseen liittyviä muuttujia sisältäville lokimuodoille ja pakattujen lokitiedostojen luomiseen:
access_log /var/log/nginx/custom_log custom buffer 32k;
access_log /path/to/log.gz compression gzip flush=5m;
Virhelokien määrittäminen Nginxissä
Jos Nginx havaitsee häiriöitä, se tallentaa niitä koskevat tiedot virhelokiin. Nämä ongelmat kuuluvat eri vakavuustasoihin: virheenkorjaus, tiedot, ilmoitus, varoitus, virhe (tämä on oletustaso ja toimii maailmanlaajuisesti), crit, alert tai emerg.
Oletuslokitiedosto on log/error.log, mutta se sijaitsee tavallisesti hakemistossa /var/log/nginx/ Linux-jakeluissa. error_log-direktiiviä käytetään lokitiedoston määrittämiseen, ja sitä voidaan käyttää pää-, http-, sähköposti-, stream-, palvelin-, sijaintikontekstissa (tässä järjestyksessä).
Kannattaa myös huomioida, että:
- Pääkontekstin konfiguraatiot periytyvät aina alemmilla tasoilla yllä olevassa järjestyksessä.
- ja alempien tasojen konfiguraatiot ohittavat ylemmiltä tasoilta perityt konfiguraatiot.
Voit määrittää virhelokia käyttämällä seuraavaa syntaksia:
error_log /path/to/log_file log_level;
Esimerkiksi:
error_log /var/log/nginx/error_log warn;
Tämä ohjeistaa Nginxiä kirjaamaan kaikki viestit, joiden tyyppi on warn ja vakavampi lokitason crit, alert ja emerg. viestejä.
Seuraavassa esimerkissä kritiikin-, hälytys- ja emerg-tason viestit kirjataan.
error_log /var/www/example1.com/log/error_log crit;
Harkitse alla olevaa kokoonpanoa, tässä olemme määrittäneet virheiden kirjaamisen eri tasoilla (http- ja palvelinkontekstissa). Virheen sattuessa viesti kirjoitetaan vain yhteen virhelokiin, joka on lähinnä sitä tasoa, jossa virhe on ilmennyt.
http {
log_format compression '$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;
server {
listen 80;
server_name example1.com;
#this logs errors messages for example1.com only
error_log /var/log/nginx/example1.error_log warn;
…...
}
server {
listen 80;
server_name example2.com;
#this logs errors messages for example2.com only
error_log /var/log/nginx/example1.error_log;
…….
}
}
Jos käytät useampaa kuin yhtä error_log-komentoa alla olevan määrityksen mukaisesti (samalla tasolla), viestit kirjoitetaan kaikkiin määritettyihin lokeihin.
server {
listen 80;
server_name example1.com;
error_log /var/www/example1.com/log/error_log warn;
error_log /var/log/nginx/example1.error_log crit;
…...
}
Ehdollisen kirjauksen määrittäminen Nginxissä
Joissakin tapauksissa saatamme haluta Nginxin suorittavan ehdollisen viestien kirjaamisen. Nginxin ei tarvitse kirjata jokaista viestiä, joten voimme jättää huomioimatta merkityksettömät tai vähemmän tärkeät lokimerkinnät pääsylokeistamme tietyissä tapauksissa.
Voimme käyttää ngx_http_map_module-moduulia, joka luo muuttujia, joiden arvot riippuvat muiden muuttujien arvoista. Karttalohkon sisällä olevat parametrit (jonka pitäisi olla vain http-sisällössä) määrittävät lähde- ja tuloksena olevien arvojen yhdistämisen.
Tällaisissa asetuksissa pyyntöä ei kirjata lokiin, jos ehdon arvo on "0 "
tai tyhjä merkkijono. Tämä esimerkki sulkee pois pyynnöt, joiden HTTP-tilakoodit ovat 2xx ja 3xx.
http{
map $status $condition {
~^[23] 0;
default 1;
}
server{
access_log /path/to/access.log custom if=$condition;
}
}
Tässä on toinen hyödyllinen esimerkki verkkosovelluksen virheenkorjauksesta kehitysvaiheessa. Tämä ohittaa kaikki viestit ja vain lokivirheenkorjaustiedot.
http{
map $info $debuggable {
default 0;
debug 1;
}
server{
……..
access_log /var/log/nginx/testapp_debug_access_log debug if=$debuggable;
#logs other requests
access_log /var/log/nginx/testapp_access.log main;
…….
}
}
Täältä löydät lisätietoja, mukaan lukien kirjautuminen syslogiin.
Tässä kaikki tältä erää! Tässä oppaassa selitimme, kuinka mukautettu lokimuoto määritetään pääsy- ja virhelokeille Nginxissä. Käytä alla olevaa palautelomaketta esittääksesi kysymyksiä tai jakaaksesi ajatuksiasi tästä artikkelista.