o bună practică cheie pentru logare este centralizarea sau agregarea jurnalelor într-o singură locație, mai ales dacă aveți mai multe servere sau niveluri de arhitectură. Aplicațiile moderne au adesea mai multe niveluri de infrastructură care pot include o combinație de servere on-premise și servicii cloud. Încercarea de a vâna fișierul potrivit pentru a depana o eroare ar fi incredibil de dificilă, iar încercarea de a corela problemele între sisteme ar fi și mai grea., Nu este nimic mai frustrant decât să afli că informațiile pe care le-ai dorit nu au fost capturate într-un fișier jurnal sau că fișierul jurnal care ar fi putut păstra răspunsul a fost pierdut după repornirea serverului.
această secțiune explică modul de utilizare a serviciilor de centralizare pentru a colecta și centraliza fișierele jurnal Linux.beneficiile centralizării jurnalelor centralizarea jurnalelor face căutarea mai ușoară și mai rapidă, deoarece toate jurnalele sunt accesibile într-o singură locație., În loc să ghiciți ce server are fișierul corect, puteți accesa pur și simplu depozitul de date de jurnal pentru a căuta evenimente relevante. Centralizarea este o parte esențială a soluțiilor mari de management, deoarece le permite să analizeze, să analizeze și să indexeze jurnalele înainte de a le stoca într-o singură locație. Acest lucru face depanarea și rezolvarea problemelor de producție mai ușoară și mai rapidă. Centralizarea oferă și aceste beneficii.jurnalele sunt salvate într-o locație separată, protejându-le împotriva pierderii accidentale sau neintenționate., Acest lucru le menține, de asemenea, accesibile în cazul în care serverele dvs. coboară sau nu răspund.
populare
instrumente populare pentru centralizarea jurnalelor
majoritatea sistemelor Linux centralizează deja jurnalele folosind un daemon syslog. Așa cum am explicat în secțiunea Linux Logging Basics, syslog este un serviciu care colectează fișiere jurnal din servicii și aplicații care rulează pe gazdă. Se poate scrie aceste jurnale la dosar, sau le transmite la un alt server prin intermediul protocolului syslog., Există mai multe implementări syslog pe care le puteți utiliza, inclusiv:
- Rsyslog– un demon ușor instalat pe cele mai comune distribuții Linux.
- syslog– ng-al doilea cel mai popular daemon syslog pentru Linux.
- logstash-un agent cu greutate mai mare care poate face o prelucrare și o analiză mai avansate. Se poate citi mesaje syslog folosind plugin-ul de intrare syslog și le transmite la orice număr de destinații de ieșire.
- fluentd-un alt agent cu capacități avansate de procesare. De asemenea, acceptă introducerea syslog folosind pluginul in_syslog.,
Rsyslog este cea mai populară implementare syslog și este instalată implicit în multe distribuții de Linux. Dacă aveți nevoie de capacități de filtrare mai avansate sau de analiză personalizată, Logstash este următoarea alegere cea mai populară. Logstash este, de asemenea, bine integrat cu stiva elastică, care oferă o soluție completă de gestionare a jurnalului. Pentru acest ghid, ne vom concentra pe utilizarea rsyslog, deoarece este atât de utilizat pe scară largă.
configurare
configurare Rsyslog.conf
fișierul principal de configurare rsyslog este localizat la /etc/rsyslog.conf
., Puteți stoca fișiere de configurare suplimentare în/etc / rsyslog.d / Director. De exemplu, pe Ubuntu, acest director conține /etc/rsyslog.d/50-default.conf
, care instruiește rsyslog să scrie jurnalele de sistem în fișier. Puteți citi mai multe despre fișierele de configurare din documentația rsyslog.Configurarea rsyslog implică configurarea surselor de intrare (unde rsyslog primește jurnalele), precum și regulile de destinație pentru unde și cum sunt scrise jurnalele. Rsyslog oferă deja valori implicite pentru primirea evenimentelor syslog, deci în mod normal trebuie doar să adăugați serverul de centralizare ca ieșire., Rsyslog folosește RainerScript pentru sintaxa de configurare. În acest exemplu, redirecționăm jurnalele noastre către server la central.example.com
prin portul TCP 514.
action(type="omfwd" protocol="tcp" target="central.example.com" port="514")
alternativ, am putea trimite jurnalele noastre la o soluție de gestionare jurnal. Cloud-based de management jurnal furnizori, cum ar fi SolarWinds® Loggly® vă va oferi cu un nume de gazdă și portul pe care le puteți trimite jurnalele dvs. pur și simplu prin schimbarea target
și port
domenii. Consultați documentația furnizorului dvs. atunci când configurați rsyslog..,
direct
logare fișiere și directoare
Rsyslog oferă modulul imfile, care îi permite să monitorizeze fișierele jurnal pentru evenimente noi. Acest lucru vă permite să specificați un fișier sau un director ca sursă de jurnal. Rsyslog poate monitoriza fișiere individuale, precum și directoare întregi.de exemplu, dorim să monitorizăm fișierele jurnal create de serverul Apache. Putem face acest lucru prin crearea unui nou fișier în /etc/rsyslog.d/
numit apache.conf
, încărcați imfile modul, și se adaugă Apache log fișiere ca date de intrare.,
parametrul fișier acceptă metacaractere pentru monitorizarea mai multor fișiere, precum și directoare.
protocol
care Protocol: UDP, TCP sau RELP?
există trei protocoale principale pe care le puteți alege atunci când transmiteți date de jurnal: UDP, TCP și RELP.
UDP trimite mesaje fără a garanta livrarea sau o confirmare de primire (ACK). Se face o singură încercare de a trimite un pachet, iar în cazul în care livrarea nu reușește, nu încercați din nou. Este mult mai rapid și utilizează mai puține resurse decât alte protocoale, dar ar trebui să fie utilizate numai pe rețele fiabile, cum ar fi localhost., UDP, de asemenea, nu acceptă jurnalele de criptare.
TCP este cel mai frecvent utilizat protocol pentru streaming pe Internet, deoarece necesită un ACK înainte de a trimite următorul pachet. În cazul în care livrarea nu reușește, aceasta va continua să încerce din nou până când livrează cu succes mesajul. Cu toate acestea, TCP necesită o strângere de mână și o conexiune activă între expeditor și receptor, care utilizează resurse suplimentare de rețea.RELP (Reliable Event Logging Protocol) este conceput special pentru rsyslog și este, fără îndoială, cel mai de încredere dintre aceste trei protocoale., Acesta recunoaște primirea datelor în stratul de aplicație și va retrimite în cazul în care există o eroare. Deoarece este mai puțin obișnuit, va trebui să vă asigurați că destinația dvs. acceptă și acest protocol.
dacă rsyslog întâmpină o problemă la stocarea jurnalelor, cum ar fi o conexiune de rețea indisponibilă, va coada jurnalele până când conexiunea este restabilită. Jurnalele în coadă sunt stocate în memorie în mod implicit. Cu toate acestea, memoria este limitată și dacă problema persistă, jurnalele pot depăși capacitatea memoriei, ceea ce poate duce la pierderea datelor. Pentru a preveni acest lucru, luați în considerare utilizarea cozilor de disc.,atenție: puteți pierde date dacă stocați jurnalele numai în memorie.
que
trimite în mod fiabil cu cozi asistate de disc
Rsyslog poate coadă jurnalele pe disc atunci când memoria este plină. Cozile asistate de disc fac transportul buștenilor mai fiabil. Iată un exemplu despre cum să configurați o regulă de redirecționare a jurnalului în rsyslog cu o coadă asistată de disc.când securitatea datelor și confidențialitatea sunt o problemă, ar trebui să luați în considerare criptarea jurnalelor. Sniffers și intermediari ar putea citi datele dvs. de jurnal dacă le transmiteți pe internet în text clar., Ar trebui să criptați jurnalele dacă conțin informații private, date de identificare sensibile sau date reglementate de guvern. Demonul rsyslog vă poate cripta jurnalele folosind protocolul TLS și vă poate păstra datele în siguranță.procesul de activare a criptării TLS depinde de configurarea logării. În general, aceasta implică următorii pași.
- creați o autoritate de certificare (CA). Există certificate de probă în directorul
/contrib/gnutls
al rsyslog, care sunt bune doar pentru testare, dar trebuie să vă creați propriul dvs. pentru producție., Dacă utilizați un serviciu de gestionare a jurnalelor, acesta va avea unul pregătit pentru dvs. - generați un certificat digital pentru serverul dvs. pentru a activa TLS sau utilizați unul de la furnizorul de servicii de gestionare a jurnalelor.
- Configurați serviciul rsyslog pentru a trimite date criptate TLS către serviciul de gestionare a jurnalelor.
Iată un exemplu de configurare rsyslog cu criptare TLS. Înlocuiți CERT și DOMAIN_NAME cu setarea serverului propriu.,
$DefaultNetstreamDriverCAFile /etc/rsyslog.d/keys/ca.d/CERT.crt$ActionSendStreamDriver gtls$ActionSendStreamDriverMode 1$ActionSendStreamDriverAuthMode x509/name$ActionSendStreamDriverPermittedPeer *.DOMAIN_NAME.com
Jurnal de servicii de management, cum ar fi SolarWinds Loggly oferi de multe ori propria lor CAs și certificate, care pur și simplu aveți nevoie pentru a face referire în rsyslog de configurare. De exemplu, activarea TLS cu Loggly necesită doar să descărcați certificatul Loggly pe /etc/rsyslog.d / directory, actualizați configurația și reporniți serviciul rsyslog.
în primul rând, descărcați certificatul.
$ mkdir -pv /etc/rsyslog.d/keys/ca.d$ cd /etc/rsyslog.d/keys/ca.d$ curl -O https://logdog.loggly.com/media/logs-01.loggly.com_sha12.crt
Apoi, deschideți /etc/rsyslog.d/22-loggly.conf
configuration file și se adaugă următoarele:
în cele din Urmă, reporniți rsyslog.,
$ sudo service rsyslog restart
practica
cele mai bune practici pentru logarea aplicațiilor
pe lângă jurnalele pe care Linux le creează implicit, este de asemenea o idee bună să centralizați jurnalele din aplicații importante. Aproape toate aplicațiile server bazate pe Linux își scriu informațiile de stare în fișiere jurnal separate, dedicate. Acestea includ produse de baze de date precum PostgreSQL sau MySQL, servere web precum Nginx sau Apache, firewall-uri, servicii de imprimare și partajare de fișiere, directoare și servere DNS și așa mai departe.primul lucru pe care administratorii îl fac după instalarea unei aplicații este să o configureze., Aplicațiile Linux au de obicei un .conf fișier undeva în directorul / etc. Poate fi și în altă parte, dar acesta este primul loc în care oamenii caută fișiere de configurare. În funcție de cât de complexă sau mare este aplicația, numărul de parametri setabili poate fi mic sau în sute. Consultați documentația aplicației pentru a afla mai multe sau utilizați comanda localizare pentru a încerca să găsiți singur fișierul.
# locate postgresql.conf/usr/pgsql-9.4/share/postgresql.conf.sample/var/lib/pgsql/9.4/data/postgresql.conf
setați o locație Standard pentru fișierele jurnal
sistemele Linux salvează de obicei fișierele jurnal sub directorul /var/log
., Acest lucru funcționează bine, dar verificați dacă aplicația salvează sub un anumit director sub /var/log
. Dacă se întâmplă, grozav. Dacă nu, poate doriți să creați un director dedicat pentru aplicație sub /var/log
. De ce? Asta pentru că alte aplicații salva fișierele jurnal sub /var/log
prea și în cazul în care aplicația salvează mai mult de un fișier jurnal—poate o dată pe zi sau după fiecare serviciu restart—acesta poate fi un pic dificil să se târască printr-un mare director pentru a găsi fișierul pe care doriți.,dacă aveți mai multe instanțe ale aplicației care rulează în rețeaua dvs., această abordare este, de asemenea, la îndemână. Gândiți-vă la o situație în care este posibil să aveți o duzină de servere web care rulează în rețeaua dvs. Dacă jurnalele dvs. sunt stocate pe un server syslog central, de unde știți ce fișier jurnal conține jurnalele serverului? Înregistrând fiecare server într-un director separat, știți exact unde să căutați atunci când depanați orice server.
utilizați un nume de fișier Static
multe aplicații adaugă date dinamice la numele fișierului jurnal, cum ar fi data curentă sau marca de timp., Acest lucru este util pentru împărțirea automată a jurnalelor după dată, dar îngreunează găsirea celui mai recent fișier pentru servicii precum rsyslog. O abordare mai bună este să folosești un nume care nu se schimbă pentru fișierul jurnal, apoi să folosești logrotate pentru a aplica o marcă de timp sau un număr fișierelor jurnal mai vechi.
adăugați și rotiți fișierele jurnal
aplicațiile ar trebui să se adauge la fișierele jurnal existente în loc să le suprascrie. Acest lucru vă ajută să vă asigurați că toate liniile de jurnal sunt capturate și că nu se pierd date, chiar dacă aplicația repornește. Cu toate acestea, fișierele jurnal pot crește pentru a fi foarte mari în timp., Dacă încercați să găsiți cauza principală a unei probleme, puteți ajunge să căutați prin zeci de mii de linii.vă recomandăm să adăugați jurnalele dvs. într-un singur fișier, dar vă recomandăm, de asemenea, să configurați aplicația pentru a roti fișierele jurnal din când în când. Instrumente precum logrotate pot face acest lucru automat copiind fișierul jurnal curent într-o locație nouă, dându-i un nume unic, apoi trunchiind fișierul jurnal curent., Acest lucru are o serie de beneficii, inclusiv:
- Busteni sunt împărțite în fișiere după dată și oră, făcându-l ușor pentru a găsi busteni pentru o anumită dată
- Fiecare fișier jurnal este mult mai mic, ceea ce le face mai ușor pentru a căuta prin și mai ușor de a trimite într-o rețea
- Copierea de rezervă a fișierelor jurnal este mult mai ușor, și ștergerea sau arhivarea mai vechi, busteni poate face mult mai rapid
Cât de des ai roti fișierele jurnal depinde de cât de multe busteni le generează. De regulă, începeți prin rotirea jurnalelor o dată pe zi.
setați politicile de păstrare a fișierelor jurnal
cât timp păstrați un fișier jurnal?, Asta se reduce cu siguranță la cerințele de afaceri. Vi se poate cere să păstrați informații de logare în valoare de o săptămână sau poate fi o cerință de reglementare să păstrați date în valoare de 10 ani. Orice ar fi, jurnalele trebuie să meargă de la server la un moment dat sau altul.în opinia noastră ,dacă nu este necesar altfel, ar trebui să păstrați cel puțin o lună în valoare de fișiere jurnal on-line, plus copiați-le într-o locație secundară (cum ar fi un server de logare). Orice lucru mai vechi decât acesta poate fi descărcat pe un suport separat. De exemplu, dacă sunteți pe AWS, jurnalele mai vechi pot fi copiate în ghețar.,fișierele jurnal de stocare pe o unitate separată
fișierele jurnal sunt scrise în mod constant, ceea ce poate duce la I/o de mare disc pe sistemele ocupate. Ca o bună practică, ar trebui să montați /var/log
pe un dispozitiv de stocare separat. Acest lucru împiedică scrierea fișierelor jurnal să interfereze cu performanța aplicațiilor dvs., în special pe stocarea bazată pe disc. Acest lucru împiedică, de asemenea, fișierele jurnal să umple întreaga unitate în cazul în care devin prea mari.
formatați intrările din jurnal
ce informații ar trebui să capturați în fiecare intrare din jurnal?
asta depinde de ce doriți să utilizați jurnalul pentru., Doriți să o utilizați numai în scopuri de depanare sau doriți să surprindeți tot ce se întâmplă? Este o cerință legală pentru a capta ceea ce fiecare utilizator se execută sau vizualizare?dacă utilizați jurnale în scopuri de depanare, salvați numai erori, avertismente sau mesaje fatale. Nu există niciun motiv pentru a captura mesaje de depanare, de exemplu. Aplicația poate înregistra mesajele de depanare în mod implicit sau un alt administrator ar fi putut activa acest lucru pentru un alt exercițiu de depanare, dar trebuie să îl dezactivați, deoarece poate umple rapid spațiul., Cel puțin, capturați data, ora, numele aplicației clientului, IP-ul sursă sau numele gazdei clientului, acțiunea efectuată și mesajul în sine.
de exemplu, luați în considerare comportamentul implicit de logare al PostgreSQL. Jurnalele sunt stocate în /var/log/postgresql
, și fiecare fișier începe cu postgresql – urmată de data. Fișierele sunt rotite zilnic, iar fișierele mai vechi sunt anexate cu un număr bazat pe momentul în care au fost rotite. Fiecare linie de jurnal poate fi prefixată cu câmpuri precum marca de timp curentă, utilizatorul curent, numele bazei de date, ID-ul sesiunii și ID-ul tranzacției., Puteți modifica aceste setări editând fișierul de configurare PostgreSQL (/etc/postgresql/11/main/postgresql.conf
pe Debian).
în mod implicit, fiecare linie de jurnal afișează marcajul de timp și ID-ul procesului PostgreSQL urmat de mesajul jurnal.
monitorizați fișierele jurnal cu Imfile
în mod tradițional, cel mai obișnuit mod pentru aplicații de a-și înregistra datele este cu fișiere. Fișierele sunt ușor de căutat pe o singură mașină, dar nu se scalează bine cu mai multe servere. Cu rsyslog, puteți monitoriza fișierele pentru modificări și importați evenimente noi în syslog, unde puteți apoi să redirecționați jurnalele către un server centralizat., Aceasta se face folosind modulul imfile. Pentru a activa modulul, creați un nou fișier de configurare în /etc/rsyslog.d/
, apoi adăugați o intrare de fișier ca aceasta.
adăugați fluxurile de ieșire după această configurație, iar rsyslog va trimite jurnalele din fișierul specificat la destinația de ieșire.
Conectați-vă direct la soclul Syslog cu Imuxsock
un soclu este similar cu un mâner de fișier UNIX, cu excepția faptului că citește date în memorie în loc să le scrie pe disc. În cazul syslog, acest lucru vă permite să trimiteți jurnalele direct la syslog fără a fi nevoie să-l scrieți Mai întâi într-un fișier.,această abordare utilizează eficient resursele de sistem dacă serverul dvs. este constrâns de i/o de disc sau nu aveți nevoie de jurnalele de fișiere locale. Dezavantajul acestei abordări este că soclul are o dimensiune limitată a cozii. Dacă daemon syslog se duce în jos sau nu poate ține pasul, atunci ai putea pierde date jurnal.
pentru a activa conectarea socket-urilor în rsyslog, adăugați următoarea linie la configurația rsyslog (este activată implicit).
$ModLoad imuxsock
Acest lucru creează un socket la /dev/log socket
în mod implicit, dar puteți schimba acest lucru prin modificarea SysSock.Nume parametru., De asemenea, puteți seta opțiuni, cum ar fi limitarea ratei și controlul debitului. Pentru mai multe informații, consultați documentația rsyslog imuxsock.
UDP Busteni cu Imupd
unele aplicații de ieșire de date jurnal în format UDP, care este protocolul standard atunci când transferul de fișiere jurnal într-o rețea sau localhost. Demonul dvs. syslog primește aceste jurnale și le poate procesa sau transmite într-un format diferit. Alternativ, puteți trimite jurnalele la un alt server syslog sau la o soluție de gestionare a jurnalelor.,
utilizați următoarea comandă pentru a configura rsyslog pentru a accepta date syslog peste UDP pe portul standard 514.
$ModLoad imudp$UDPServerRun 514
gestionați configurația pe Mai multe servere
când aveți doar câteva servere, puteți configura manual logarea pe ele. După ce aveți câteva zeci sau mai multe servere, puteți profita de instrumente care fac acest lucru mai ușor și mai scalabil. La un nivel de bază, scopul fiecărui instrument este de a activa syslog pe fiecare dintre serverele dvs., de a aplica o configurație și de a vă asigura că modificările au efect.,
Pssh
Pssh (sau parallel SSH) vă permite să rulați o comandă ssh pe mai multe servere în paralel. Utilizați o implementare pssh doar pentru un număr mic de servere. Dacă unul dintre serverele dvs. nu reușește, atunci trebuie să ssh în serverul eșuat și să efectuați manual implementarea. Dacă aveți mai multe servere eșuate, atunci implementarea manuală pe ele poate dura mult timp.Puppet și Chef sunt instrumente de gestionare a configurației care pot configura automat toate serverele dvs. și le pot aduce în aceeași stare. Ei pot monitoriza serverele și păstrați-le sincronizate., Puppet și Chef sunt instrumente puternice capabile să instaleze software, să creeze fișiere, să repornească serviciile și multe altele. Dacă nu sunteți sigur care dintre ele este mai potrivit pentru gestionarea configurației de implementare, s-ar putea aprecia Compararea InfoWorld a celor două instrumente.unii furnizori oferă, de asemenea, module sau rețete pentru configurarea syslog. De exemplu, Loggly oferă un modul Puppet care utilizează rsyslog pentru a redirecționa automat jurnalele de la agenții dvs. Instalați modulul Loggly Puppet pe Puppet master, apoi adăugați următoarea configurație la manifestul dvs. de păpuși.,
# Send syslog events to Loggly class { 'loggly::rsyslog': customer_token => 'YOUR_CUSTOMER_TOKEN', }
Odată ce agenții de reîmprospătare, ei vor începe exploatarea la Loggly.Kubernetes este un instrument de orchestrare pentru gestionarea containerelor pe mai multe noduri. Kubernetes oferă o arhitectură completă de logare care colectează și scrie automat jurnalele containerului într-un fișier de pe mașina gazdă. Puteți vizualiza jurnalele pentru un anumit Pod prin rularea comenzii kubectl busteni <pod nume>, care este util pentru accesul la aplicație se conectează la un server de la distanță.,multe soluții de gestionare a jurnalelor oferă agenți care pot fi implementați pe Kubernetes pentru a colecta atât jurnalele de aplicații, cât și jurnalele gazdă. De exemplu, Loggly oferă un DaemonSet care implementează un Pod de logare pentru fiecare nod dintr-un cluster. Pod colectează jurnalele de la alte pod-uri și de la gazdă în sine, și implementarea-l ca un DaemonSet ajută la asigurarea există întotdeauna o instanță care rulează pe fiecare nod. Logarea unui cluster Kubernetes cu Loggly este la fel de ușoară ca rularea următoarelor comenzi.
Docker
Docker utilizează containere pentru a rula aplicații independente de serverul de bază., Este adesea folosit ca runtime container pentru orchestratori precum Kubernetes, dar poate fi folosit ca platformă autonomă. ZDNet are un articol detaliat despre utilizarea Docker în centrul de date.,
Există mai multe modalități de a vă conecta la Docker containere, inclusiv:
- Logare prin intermediul Docker Logare Driver pentru sistemul gazdă (metoda recomandată)
- Rutare toate recipient busteni la un singur dedicat logare recipient (acesta este modul în care logspout recipient de lucrări)
- conectarea la o ataș logare container
- Adaugarea unui logare agent la container
de asemenea, puteți utiliza aplicația container Docker pentru a colecta jurnalele de gazdă., Dacă containerul dvs. are un serviciu syslog care rulează, puteți trimite jurnalele de la gazdă la container prin syslog sau puteți monta fișierele jurnal ale gazdei în container și puteți utiliza un agent de monitorizare a fișierelor pentru a citi fișierele.
script-uri furnizor sau agenți
cele mai multe soluții de management jurnal oferă script-uri sau agenți pentru a face trimiterea de date de la unul sau mai multe servere relativ ușor. Agenții grei pot utiliza resurse suplimentare de sistem. Unii furnizori se integrează cu demonii rsyslog existenți pentru a redirecționa jurnalele fără a utiliza semnificativ mai multe resurse., Loggly, de exemplu, oferă un script care transmite jurnalele de rsyslog la Loggly ingestie servere folosind omfwd module.
A se vedea. Analizează-l. Inspectează-l. Rezolva-l
vezi ce contează.
începeți încercarea gratuită
Lasă un răspuns