Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 12114|Atbildi: 3

[Tīmeklis] NGINX automātiski samazina piekļuves žurnālus

[Kopēt saiti]
Publicēts 05.01.2015 20:53:57 | | |

Tīmekļa piekļuves žurnāls (access_log) reģistrē visu ārējo klientu piekļuves darbību tīmekļa serverim, tostarp svarīgu informāciju, piemēram, klienta IP, piekļuves datumu, piekļuves URL resursu, servera atgriezto HTTP statusa kodu utt.
Tipisks tīmekļa piekļuves žurnāls izskatās šādi:


112.97.37.90 - - [14/Sep/2013:14:37:39 +0800] "GET / HTTP/1.1" 301 5 "-" "Mozilla/5.0 (Linux; U; Android 2.3.6; zh-cn; Lenovo A326 Build/GRK39F) AppleWebKit/533.1 (KHTML, piemēram, Gecko) versija/4.0 Mobile Safari/533.1 MicroMessenger/4.5.1.259" -


Plānošana:

1. Lai atrisinātu problēmu:

Ja vietnei ir liels apmeklējumu skaits, būs daudz žurnāla datu, un, ja tas viss ir ierakstīts žurnālfailā, fails kļūs arvien lielāks. Lielu failu, piemēram, simtiem megabaitu faila, ātrums palēnināsies. Rakstot žurnālus, tas ietekmē darbības ātrumu. Turklāt, ja es vēlos apskatīt piekļuves žurnālus, vairāku simtu megabitu fails ir lēni lejupielādējams un atverams. Izmantojot trešās puses bezmaksas žurnālu analīzes rīku - Log Treasure, varat augšupielādēt žurnālfailus no nginx, apache un iis, kas palīdz analizēt vietnes drošības aspektus. Galu galā, specializācija ir profesionālāka. Log Bao ir arī augšupielādēto failu lieluma ierobežojums, ne vairāk kā 50 m.


2. Nignx nav mehānisma, lai automātiski atdalītu failus un saglabātu žurnālus. Tā kā nginx automātiski nesaglabā failus. Tāpēc, lai to īstenotu, jums ir jāraksta savs skripts.


Čaulas skripta failam nginx_log_division.sh šāds saturs:


# /bin/bash

logs_path="/dati/wwwlogs/"

#以前的日志文件.

log_name="xxx.log"   

pid_path="/usr/local/nginx/logs/nginx.pid"


mv ${logs_path}${log_name} ${logs_path}${log_name}_$(date --date="PĒDĒJĀ NEDĒĻA" +"%Y-%m-d").log


nogalināt -USR1 'kaķis ${pid_path}'


Iepriekš minētā čaulas skripta princips ir vispirms pārvietot un pārdēvēt iepriekšējo žurnālfailu uz vienu, mērķis ir dublēt.

Saskaņā ar pēdējās pirmdienas nosaukumu, kad skripts tiek palaists laika posmā "2013-09-16", tad ģenerētais faila nosaukums ir "xxx.log_ 20130909.log".

Pat ja komanda mv ir izpildīta failā pirms nogalināšanas -USR1 'cat ${{pid_path}' tiek izpildītsMainīts faila nosaukums, nginx joprojām rakstīs žurnāla datus jaunnosauktajā failā "xxx.log_20130909" kā parasti. Iemesls ir tāds, ka Linux sistēmās kodols meklē failus, kuru pamatā ir failu deskriptori.


---------------- izpratne par Linux failu deskriptoriem


Faila deskriptors ir vesela skaitļa identifikators, ko Linux kodols nosauc katram atvērtajam failam.

Linux kodols ģenerē (vai uztur) "Faila deskriptora tabulaŠī faila deskriptora tabula ieraksta "failu, kas atvērts ar šo procesu (identificēts)".

Šajā vidē nginx ir darbojošais process, kas jau ir atvēris žurnālfailu un reģistrē failu deskriptora tabulā.

Pat ja žurnāla faila ceļš ir mainījies, to joprojām var atrast (to var atrast saskaņā ar faila deskriptora tabulu).

----------------------------------------------

Izpildot komandu "kill -USR1 'cat ${pid_path}'", failā nginx.pid saglabātais faktiski ir skaitlis (jūs varat to atvērt un paskatīties, es šeit esmu 894), un nginx raksta sava galvenā procesa pid (procesa numuru) failā nginx.pid, lai jūs varētu tieši iegūt tā galveno procesa numuru, izmantojot cat komandu, un tieši darbināt norādīto procesa numuru.


nogalināt -USR1 'kaķis ${pid_path}' ir ekvivalents

nogalināt –USR1 894 #指定发信号 (USR1) signāls, lai numurētu šo procesu.


Linux sistēmās Linux sazinās ar "darbojošiem procesiem", izmantojot signālus. Linux sistēmās ir arī daudz iepriekš definētu signālu, piemēram, SIGHUP. USR1 ir lietotāja definēts signāls. To var saprast kā pašu procesu, kas nosaka, ko darīt, kad tas saņem šo signālu (tas ir, procesa rakstnieks pats izlemj, vai saņemt šo signālu vai neko nedarīt, un atstāj to pilnībā izstrādātāja ziņā). Nginx tas raksta savu kodu, lai apstrādātu nginx atkārtotu žurnāla faila atvēršanu, kad es saņemu USR1 signālu. Konkrētais princips ir šāds:

1. Galvenais nginx process saņem USR1 signālu un atkārtoti atvērs žurnāla failu (nosaukts pēc žurnāla nosaukuma nginx konfigurācijas failā, kas ir vērtība, ko konfigurācijas failā iestatījis access_log vienums, un, ja fails nepastāv, automātiski tiks izveidots jauns faila xxx.log).


2. Pēc tam nomainiet žurnālfaila īpašnieku uz "darba process", lai darba procesam būtu lasīšanas un rakstīšanas atļaujas žurnālfailam (galvenais un darbinieks parasti darbojas kā dažādi lietotāji, tāpēc īpašnieks ir jāmaina).


3. Nginx galvenais process aizvērs dublikāta žurnālfailu (tas ir, failu, kas tika pārdēvēts par xxx.log_ 20130909.log tikko izmantojot komandu mv),un paziņo darbinieka procesam, lai izmantotu tikko atvērto žurnālfailu(xxx.log fails, ko tikko atvēra galvenais process). Konkrētā ieviešana ir detalizētāka, galvenais process nosūta darbiniekam USR1 signālu, un pēc šī signāla saņemšanas darbinieks atkārtoti atvērs žurnālfailu (tas ir, konfigurācijas failā saskaņoto xxx.log)



=================================== Skriptu izpilde ar regulāriem intervāliem


Iestatiet iepriekš minēto čaulas skripta failu, lai to pievienotu ieplānotajam uzdevumam. crontab ir plānots uzdevumu process operētājsistēmā Linux. Šis process sāksies, kad to ieslēdzat, un tas ik pa laikam nonāks tā sarakstā, lai redzētu, vai ir kādi uzdevumi, kas jāveic.


Crontab -e


* 04 * * 1 /dati/wwwlogs/nginx_log_division.sh



Tiks atvērts fails ar pievienotu iepriekš minēto kodu

Formāts ir "Shell faila ceļš, kas jāizpilda". * var saprast kā "katru minūti", katru minūti, katru stundu, katru mēnesi utt.

Es izveidoju skriptu, lai palaistu nginx_log_division.sh pirmdien pulksten 4 no rīta, un skripta saturs ir atjaunot jaunu žurnālfailu.



Pielikumā:IestatītnginxKā tiek konfigurēti žurnāli


log_format vietne '$remote_addr - $remote_user [$time_local] "$request" '

             '$status $body_bytes_sent "$http_referer" '

             "$http_lietotāja_aģents" $http_x_pārsūtīts_for";


access_log /data/wwwlogs/xxxx.com.log vietni

#第二个参数表示使用那个日志格式 katram žurnāla formātam tiek identificēts nosaukums, un vietne atbilst nosaukumam log_format



Iepriekš minētais ietver crontab plānoto uzdevumu pārvaldnieka izmantošanu.



Ir arī vietas, kur nav pilnīgas izpratnes un kļūdas. Ceru atjaunināt nākotnē.






Iepriekšējo:2014. gada Houpu javaoop gala eksāmena jautājumi
Nākamo:vi/vim pamata lietošanas metodes
Publicēts 06.01.2015 00:04:30 |
Ak, vai atbilde var pelnīt naudu?
 Saimnieks| Publicēts 06.01.2015 00:06:16 |
Johnyoung Publicēts 2015-1-6 00:04
Ak, vai atbilde var pelnīt naudu?

Tam var būt prestižs
Publicēts 06.01.2015 00:13:44 |
admin Publicēts 2015-1-6 00:06
Tam var būt prestižs

Kas ir prestižs?
Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com