Îmbunătățiți și depanați aplicațiile php cu syslog

Programarea este o operație obositoare, dar în același timp și distractivă. Unul dintre aspectele fascinante este studiul unor modalități noi de a folosi mijloace vechi. Recent, am fost angajat să găsesc erori într-un sistem complex LAMP (Linux®, Apache, MySQL și Linux, Apache, MySQL, PHP / Perl) - Sistem de management al conținutului (Content Management System). Arhitectura CMS a fost un model standard LAMP pe Enterprise Red Hat Linux cu Apache V2.0. Codul site-ului Web a constat din mai multe sute de module PHP, împrăștiate pe 30 de subdirectoare ale rădăcinii de documente Apache. În Apache și MySQL, nu au fost necesare schimbări, așa că toate eforturile mele s-au concentrat pe PHP.







Petrece mult timp de învățare CMS și a evaluat grație ei, am dat seama că mediul software-ul cel mai matur, sistemul utilizat doar un număr mic de PHP-funcții disponibile (în cazul în care mingea este exclusa umbra vechiului 80/20 - 80% din munca se face cu 20% funcțiile disponibile). Acest articol demonstrează modul în care procesul de depanare a unui sistem complex necunoscut vă ajută să aflați despre funcțiile care nu sunt utilizate și oferă exemple de utilizare a acestor cunoștințe noi pentru a utiliza caracteristicile bogate ale funcției syslog ().

Sub microscop

Depistarea, cum ar fi programarea, face parte din știință, parte a artei. Căutând erori ne-evidente într-un sistem care nu a fost creat de dvs., trebuie să aveți un instinct deosebit pentru a le găsi în cod. Atunci când se ocupă cu sute de module, ar fi corect să începeți de la punctul în care apare o eroare în informațiile de ieșire și apoi mergeți înapoi pentru a localiza problema.

Să presupunem, de exemplu, că valoarea calculată care a fost emisă este incorectă. Trebuie să dezvoltați o modalitate de a vedea valorile intermediare care au condus la problemă. O altă problemă poate apărea dacă primiți date incorecte ca urmare a unei interogări importante la baza de date. Ar trebui să puteți vedea instrucțiunea SQL generată de codul motorului MySQL pentru a vedea dacă cauza problemei este aici.

O tehnică binecunoscută este de a introduce cod care trimite doar aceste șiruri și valori. Din nefericire, folosind instrumente cum ar fi PHP sau orice aplicație Web, aveți posibilitatea să dezmembrați informațiile de ieșire naturale ale sistemului (adică codul HTML trimis browserului) cu informații de depanare, mai ales dacă sistemul examinat este un server care rulează.

Prin dobândirea de cunoștințe noi și prin îmbunătățirea abilităților, începeți să vedeți modalități diferite de a face ceva și unul dintre ele va deveni evident atunci când se rezolvă o problemă. Dar mereu ține minte: ceea ce este evident pentru voi nu este deloc evident pentru ceilalți. Ce este simplu pentru dvs., poate aduce o mulțime de necazuri altora.

Folosirea funcției syslog () necesită o complexitate sub control și oferă un avantaj suplimentar - setări convenabile utilizând fișierele de configurare precum syslog.conf. De exemplu, aveți posibilitatea să inserați codul pentru a formata instrucțiunea SQL, ao scrie în syslog () și să o transmiteți în execuție MySQL. Apoi, o mică modificare a fișierului syslog.conf va trimite textul în alt jurnal de sistem sau, probabil, doar la receptorul de biți. Săptămâni sau luni mai târziu, dacă din nou trebuie să vedem ce sa întâmplat, o altă modificare simplă a fișierului syslog.conf va restabili funcționalitatea.







În lumea UNIX, syslog are o istorie bogată și vie. Dezvoltat inițial ca parte a proiectului Sendmail, syslog a fost atât de util încât multe alte instrumente au fost incluse în funcționalitatea sa; astfel sa dovedit că uneori cele mai simple idei sunt cele mai puternice.

Pe scurt, syslog permite aplicațiilor să scrie mesaje etichetate la un set comun de jurnale de sistem care pot fi stocate acolo unde este cel mai convenabil pentru programatori și administratori de rețea. Aceasta înseamnă, de exemplu, că puteți configura syslog pe un server Web pentru a scrie mesaje de sistem unui alt server, care poate fi mai multe niveluri mai profunde (în spatele firewall-urilor) și mai ușor de accesat. Dar pentru scopurile mele, comportamentul implicit al fișierelor scrise în directorul / var / log este suficient.

Mecanismul syslog pornește programul de bootstrap și comportamentul său inițial este determinat de regulile din fișierul syslog.conf. Aceste reguli vă permit să specificați exact ceea ce poate și nu poate fi scris de mecanism - acest lucru face posibilă recepționarea pe server a fișierelor de jurnal cu dimensiuni acceptabile sub sarcini grele.

Fiecare regulă constă din două câmpuri: un selector și o acțiune. Selectorul indică ce mesaje vor fi înregistrate (de exemplu, kernel-ul, utilizatorul, poșta, imprimanta), precum și prioritatea. Câmpul de prioritate conține cuvinte cheie precum depanare, informații, avertizare sau avertizare. Câmpul de acțiune determină ce trebuie să faceți cu mesajele corespunzătoare conținutului selectorului. Regulile pot defini un fișier pentru înregistrarea unui mesaj, un mecanism pentru trimiterea unui mesaj înregistrat care a trimis un mesaj de utilizator (sub forma mesajelor consolei) etc.

Informații de înregistrare

Citiți informațiile și ghidurile Syslog pentru a personaliza sistemul conform cerințelor dvs. În cazul meu, trebuia să cunosc valorile diferitelor variabile PHP în momente diferite ale CMS. În plus, a trebuit să știu când au fost pornite și oprite diferite module, precum și valorile diferitelor variabile intermediare. Înainte de a trece la detalii specifice, să facem ajustarea.

Listing 1. test.php

Acum, deschideți fereastra terminalului X și introduceți următoarea comandă pentru a vedea ce a fost scris în fișierul / var / log / messages:

Dacă totul a mers bine, la sfârșitul listare ar trebui să vedeți următoarea linie:

Dacă ai făcut-o, bine. V-ați asigurat că aveți tot ce aveți nevoie pentru o depanare detaliată a unui sistem complex și puteți continua să lucrați.

Ce să înregistrați

Acum că ați verificat că înregistrarea informațiilor funcționează și puteți vedea rezultatele muncii sale, vă voi oferi câteva sfaturi despre cum să reduci procesul de învățare al unui sistem necunoscut, începând să utilizați rapid aceste instrumente.

Este important să știm care sunt modulele care fac ceva dincolo de ceea ce este scris în documentație. Așadar, îmi place să scriu mesaje care marchează începutul și sfârșitul modulelor. Astfel, puteți juca cu paginile site-ului Web, urmărind fereastra suplimentară a terminalului X, unde se execută comanda -f / var / jurnal / mesaje. Veți vedea modulele care sunt executate și, de asemenea, în ce ordine de fiecare dată când browserul solicită o nouă pagină.

De asemenea, îmi place să înregistrez limitele dintre diferitele programe care sunt numite în timpul executării codului PHP. De exemplu, atunci când se fac interogări MySQL sau se cheamă programe externe care schimbă formatarea datelor (XSLT), de exemplu). Practica plasării sistematice a unor astfel de puncte de control în codul fiecărui modul va ajuta la obișnuirea cu numele și locația modulelor. În același timp, atunci când codul trimite mesaje afișate în terminalul suplimentar X, scanați diverse pagini, având astfel un feedback important care facilitează și aprofundează înțelegerea sistemului.

concluzie

Instrumentul syslog este un instrument puternic pentru depanarea aplicațiilor scrise de dvs. Vă permite să vedeți ce module și instrucțiuni SQL sunt executate, precum și valorile variabilelor care se modifică atunci când accesați site-ul Web. Acest lucru ajută la identificarea modulelor care pot avea probleme.

Descărcați resurse

Subiecte conexe







Trimiteți-le prietenilor: