Am discutat anterior cum să creăm aplicația New Relic for a Rails, dar și am petrecut mult timp uitându-ne la modul de utilizare a UI New Relic. Și în timp ce interfața cu utilizatorul este foarte asemănătoare, indiferent de limbajul și cadrul pe care îl folosiți, obținerea reală a noului Relic poate fi radical diferită. Astăzi, ne vom uita la modul de monitorizare a unei aplicații PHP folosind New Relic. Mai precis, vom stabili o instalare WordPress de bază și vom obține câteva date despre performanță în tabloul de bord New Relic.
Noțiuni de bază New Relic înființat pentru Ruby este foarte mult agnostic de mediu. Adăugăm pur și simplu gemul agent pentru aplicația noastră, moment în care, indiferent de modul în care implementăm aplicația noastră (Passenger + Apache, Thin + Nginx etc.), bijuteria va face restul lucrării pentru a ne asigura că obținem valorile noastre de performanță. Cu versiunea PHP a agentului, mediul este mult mai important, deoarece agentul este instalat și locuiește pe caseta unde va fi implementată aplicația, mai degrabă decât să facă parte dintr-o anumită aplicație.
Să stabilim o cutie de nisip pentru care să ne jucăm (folosind o instanță EC2) și să obținem o instalare de bază a programului WordPress.
Nu vom trece în detaliu aici, deoarece majoritatea lucrurilor pe care trebuie să le facem sunt bine documentate în altă parte. Dar, aici este o schiță de bază.
Trebuie să lansăm o instanță EC2 cu Ubuntu Server 12.04 LTS pe aceasta. Dacă nu doriți să configurați o instanță EC2, puteți să creați doar o mașină virtuală folosind VirtualBox (sau instrumentul VM de alegere). Dacă configurați o instanță EC2, trebuie să vă amintiți următoarele:
În afară de asta, orice altceva ar trebui să fie destul de drept și ar trebui să ajungeți la o instanță care rulează (sau o mașină virtuală) pregătită pentru următorul pas.
Acum trebuie să instalăm Apache, PHP și MySQL. Cu Ubuntu Server, ar trebui să fie o problemă simplă de rulare a următoarelor comenzi:
sudo apt-get instalați tasksel sudo tasksel instalați lamp-server
Va trebui sa selectati LAMP in UI si va trebui sa introduceti parola MySQL atunci cand vi se cere sa faceti acest lucru (lasati-o goala, deoarece nu ne intereseaza ca aceasta casuta este in siguranta in nici un fel). Odată ce instalarea este finalizată, putem rula apoi câteva comenzi pentru a ne asigura că totul este instalat fără probleme.
Verificați mai întâi instalarea Apache:
ubuntu @ ip-10-145-246-196: ~ $ apache2 -V Versiune server: Apache / 2.2.22 (Ubuntu) Server construit: Jul 12 2013 13:37:10 Server Modul Magic Number: 20051115: APR-Util 1.3.12 Compilați folosind: APR 1.4.6, APR-Util 1.3.12 Arhitectură: server de 64 de biți MPM: Prefork filetat: fără furculiță: da (număr variabil de proces) ...
În al doilea rând, verificați dacă avem PHP:
ubuntu @ ip-10-145-246-196: ~ $ php -i phpinfo () Versiune PHP => 5.3.10-1ubuntu3.10 Sistem => Linux ip-10-145-246-196 3.2.0-58- virtuală # 88-Ubuntu SMP Tue Dec 3 17:58:13 UTC 2013 x86_64 Data construirii => Feb 28 2014 23:13:16 Server API => Interfața liniei de comandă Virtual Directory Support => Fișier de configurare dezactivat (php.ini) => / etc / php5 / cli Fișier de configurare încărcat => /etc/php5/cli/php.ini
Apoi verificați dacă avem MySQL:
ubuntu @ ip-10-145-246-196: ~ mysql - versiunea mysql Ver 14.14 Distrib 5.5.35, pentru debian-linux-gnu (x86_64) folosind readline 6.2
De asemenea, este posibil să verificăm dacă PHP este activat în configurația noastră Apache, dar de când am instalat lampă-server
utilizând tasksel
putem fi destul de siguri că este (și putem face întotdeauna rapid phpinfo ()
dacă vrem cu adevărat să verificăm).
Acum putem instala WordPress. Înainte de ao descărca, trebuie să creăm o bază de date pentru aceasta. Putem urma instrucțiunile de la Codex:
ubuntu @ ip-10-145-246-196: ~ $ mysql Bine ați venit pe monitorul MySQL. Comenzile se încheie cu; sau \ g. ID-ul de conectare MySQL este 103 Server version: 5.5.35-0ubuntu0.12.04.2 (Ubuntu) Tip "help"; sau '\ h' pentru ajutor. Introduceți '\ c' pentru a șterge instrucțiunea de intrare curentă. mysql> CREATE DATABASE myblog1; Întrebare OK, 1 rând afectat (0.00 sec) mysql> GRANT ALL PRIVILEGES pe myblog1. * TO "myblog1_user" @ "localhost" IDENTIFICAT DE "abc123"; Interogare OK, 0 rânduri afectate (0.00 sec) mysql> FLUX PRIVILEGES; Interogare OK, 0 rânduri afectate (0.01 sec) mysql> EXIT Bye
Voi suna noua noastră instalare myblog1
(deci este denumită și baza de date pentru aceasta) myblog1
). Acum trebuie să rulați următoarele comenzi pentru a vă rula blogul (nu uitați să sudo
când este necesar):
cd / var / www wget http://wordpress.org/latest.tar.gz tar -xzvf latest.tar.gz mv wordpress myblog1 cd myblog1 mv wp-config-sample.php wp-config.php
Acum, completați numele bazei de date, numele de utilizator și parola în fișierul de configurare (numele de gazdă este gazdă locală
care este implicit). În acest moment ar trebui să puteți merge la browserul dvs., apăsați adresa URL corectă (în cazul meu http://ec2-107-20-122-116.compute-1.amazonaws.com/myblog1
) și WordPress își va face treaba (ar putea să nu fie rău pentru a reporni Apache înainte de a face acest lucru sudo apache2 serviciu restart
).
Sandbox-ul nostru este acum complet și putem începe să instalăm New Relic.
După cum am menționat anterior, agentul PHP New Relic se află pe cutie, deci are sens că îl puteți instala utilizând managerul de pachete al sistemului de operare (apt-get
deoarece folosim Ubuntu). Primul lucru pe care trebuie să-l faceți este să importați cheia repositorului New Relic:
wget -O - https://download.newrelic.com/548C16BF.gpg | sudo apt-key add -
Acum adaugam sistemul de reabilitare New Relic in sine:
sudo sh -c 'echo "deb http://apt.newrelic.com/debian/ newrelic non-free"> /etc/apt/sources.list.d/newrelic.list'
În acest moment, putem folosi standard potrivit
comenzi pentru instalarea agentului:
sudo apt-get actualizare sudo apt-get instalare newrelic-php5
Acest lucru aduce pachetul de agenți PHP din depozit și pune scriptul de instalare a agentului în sistem. Se numește scriptul newrelic-instalare
și locuiește / Usr / bin
, astfel încât ar trebui să fii capabil să fugi de oriunde. De asemenea, scriptul este numit, din păcate, din păcate, deoarece îl puteți folosi atât pentru a instala, cât și pentru a dezinstala sistemul New Relic. Pentru a instala New Relic, trebuie să executați:
install newrelic-install
Scriptul este interactiv și vă va cere să introduceți cheia de licență. Puteți găsi acest lucru apăsând pe butonul roșu mare când instalați o nouă aplicație PHP în interfața UI New Relic.
Dacă aveți mai mult de o instalare PHP pe sistemul dvs., vă va cere, de asemenea, să alegeți instalarea pentru care trebuie instalată New Relic (puteți alege orice număr de instalații, inclusiv toate acestea). Dacă aveți doar unul PHP pe sistemul dvs., script-ul va folosi doar unul. Merită menționat faptul că, dacă versiunea dvs. de PHP este mai veche decât 5.2, scriptul va fi salvat deoarece versiunile mai vechi nu sunt acceptate.
Dacă totul merge bine, ar trebui să vedeți următorul mesaj:
Noul Relic este acum instalat pe sistemul dvs. Felicitări!
Scriptul va tipări apoi câteva informații suplimentare pentru dvs., inclusiv locația fișierelor de jurnale:
/var/log/newrelic/newrelic-daemon.log/var/log/newrelic/php_agent.log
Pe lângă faptul că trebuie să reporniți serverul dvs. web (și PHP-FPM dacă îl utilizați).
Dacă reporniți serverul și coada din jurnalul de daemon, ar trebui să vedeți ceva de genul:
ubuntu @ ip-10-145-246-196: / var / www / myblog1 $ cat /var/log/newrelic/newrelic-daemon.log 2014-03-23 05: 30: 41.063 (2008 / main) avertizare: actual fișierul limitat de 1024 este prea mic - încercarea de a crește it 2014-03-23 05: 30: 41.064 (2008 / main) info: limitarea fișierului a crescut la 2048 2014-03-23 05: 30: 41.064 (2008 / main) : New Relic 4.6 (versiunea build 40 - "quetzalcoatlus" - "e3d29c5a2e5dc1ee455e831d589ecf5e18c7d6f0") [lucrători = 1 listen = "/ tmp / .newrelic.sock" pid = 2008 pid = 2007 uid = 0 euid = 0 gid = 0 egid = 0 backtrace = nu os = "Linux" rel = "3.2.0-58-virtual" mach = "x86_64" ver = "# 88-Ubuntu SMP Tue Dec 3 17" node = "ip-10-145-246-196" startup = agent] 2014-03-23 05: 30: 41.069 (2008 / main) info: RPM config: proto = "https" colector = "collector.newrelic.com" proxy = "none" certfile = "/ etc / ssl /certs/ca-certificates.crt "certdir =" / etc / ssl / certs "2014-03-23 05: 35: 14.928 (2008 / conector) info: ['PHP Application'] 'Raportarea la: https: // rpm.newrelic.com/accounts/232928/applications/3262356'
Ceva numit Cerere PHP raportează. Aceasta este oarecum generică și în totalitate nu arată ca blogul nostru WordPress, dar este un început bun. Ce înseamnă acest lucru este faptul că toate aplicațiile de pe serverul dvs. web rulează și raportează ca aceeași aplicație pentru New Relic. Această aplicație are un nume implicit de Cerere PHP.
În cazul nostru, deoarece rulați doar o aplicație (instalarea WordPress), am putea să intrăm de fapt în UI New Relic și să obținem statistici rezonabile pentru blogul nostru. Dar, desigur, vrem să oferim blog-ului nostru un nume mai bun și, în caz că doriți, serverul nostru să servească mai mult de o aplicație. De asemenea, dorim să vedem cum să separăm aplicațiile unul de celălalt. Ne vom uita cum să facem acest lucru în curând, dar înainte de a face, să vedem ce înseamnă de fapt un agent PHP.
Există două părți la agentul New Relic PHP. Prima este o extensie PHP, este un obiect partajat numit newrelic.so
. Dacă ne uităm la fișierul de configurare a agentului:
/etc/php5/cli/conf.d/newrelic.ini
Putem vedea aceasta afisata chiar in partea de sus:
; Acest fișier conține diferitele setări pentru agentul New Relic PHP. Acolo ; sunt multe opțiuni, toate fiind descrise în detaliu la următoarea adresă URL:; https://newrelic.com/docs/php/php-agent-phpini-settings; ; Dacă utilizați o cale completă spre extensia pe care o izolați de la; extensia directorului de schimbare dacă schimbați instalările sau versiunile de PHP. ; Dacă nu utilizați o cale absolută, atunci fișierul trebuie instalat în; directorul de extensii al configurației active. extensie = "newrelic.so"
Acesta este cel care va colecta de fapt statisticile din aplicațiile dvs., dar nu va trimite statisticile la New Relic, aceasta este lucrarea proxy-ului démon.
Daemonul de agent este un proxy între extensia PHP și serverele New Relic. În esență, extensia PHP va da datele pe care le colectează daemonului, iar daemonul va face lucruri cum ar fi batch-ul și să dau seama când să-l trimită serverului. Trebuie să vă asigurați întotdeauna că daemonul funcționează, altfel nu se vor trimite date la New Relic. Din fericire, în mod implicit, ori de câte ori reporniți serverul, extensia PHP va încerca să detecteze dacă daemonul rulează și o va porni, dacă nu este.
Un demo proxy care rulează are două procese. Unul este un proces de monitorizare, iar al doilea este lucrătorul. Lucrătorul are de fapt sarcina de a comunica cu serverele New Relic, procesul de monitorizare pur și simplu urmărește muncitorul și dacă moare muncitorul, din orice motiv, acesta va da naștere unui nou. Puteți opri daemonul rulând:
/etc/init.d/newrelic-daemon stop
Care va trimite un semnal de oprire la procesul de monitorizare. Procesul de monitorizare va ucide apoi procesul lucrătorului și apoi se va închide. Dacă vreodată trebuie să omori daemonul manual, asigurați-vă că ați terminat procesul de monitorizare înainte de a ucide lucrătorul (în caz contrar un nou lucrător va fi dat naștere - în mod evident).
Am văzut deja fișierul de configurare al agentului New Relic PHP /etc/php5/cli/conf.d/newrelic.ini
. Atât agentul, cât și daemonul sunt configurați utilizând acest fișier.
Acest fișier este foarte bine documentat cu toate opțiunile și valorile implicite listate. Să vorbim despre formatul acestui fișier. Agentul New Relic Ruby poate fi configurat prin YAML, un format bine cunoscut. Agentul PHP este pur și simplu un fișier text, dar avem nevoie de puțină structură. Fiecare variabilă din fișier are unul din cele patru tipuri (String, Boolean, Number, Duration). Șirul și numărul sunt auto-explicative, valorile booleene pot fi Adevărat
, pe sau 1
pentru a indica corectitudinea și fals
, off sau 0
pentru a indica falsitatea. Duritățile sunt șiruri de caractere cu un anumit format, de exemplu: "1w3d23h10m"
indică o săptămână, trei zile, 23 de ore și zece minute. Valorile pentru durate pot fi la fel de granulate ca microsecunde.
Toate variabilele din fișier au, de asemenea, un "domeniu de aplicare". Există trei domenii posibile: SYSTEM, PERDIR și SCRIPT. Variabilele cu sfera SISTEM pot fi setate numai în fișierul global de configurare. Variabilele cu domeniul de aplicare PERDIR pot fi setate în fișierul de configurație global și pot fi de asemenea suprascrise pe baza unui director. Variabilele cu sfera de aplicare a scenariului pot fi globale, per director și pot fi, de asemenea, suprimate programabil.
De exemplu, cea mai obișnuită variabilă de configurare este 'Newrelic.appname'
. Această variabilă este un tip String, are o valoare implicită de Cerere PHP (acum știm de ce am văzut acea valoare în fișierul de jurnal după ce am instalat agentul și am restartat serverul). Domeniul de aplicare al acestei variabile este PERDIR care ne oferă o idee despre cum să suprascrieți numele aplicației pentru blogul nostru WordPress.
Există multe alte variabile care controlează lucruri precum localizarea fișierelor de jurnal, dacă sunt înregistrate interogări SQL sau nu, nivelul log al jurnalului de ieșire și așa mai departe. Vă încurajez să studiați newrelic.ini
fișier pentru a vă familiariza cu opțiunile.
Vrem să vedem o aplicație separată în interfața cu New Relic pentru blogul nostru WordPress, așa că să vedem cum putem face asta. Opțiunile dvs. pentru configurația fiecărui director sunt diferite în funcție de stack-ul dvs., dacă utilizați PHP-FPM, pașii sunt diferiți decât dacă utilizați Nginx. În cazul nostru, din moment ce conducem Apache, avem două opțiuni.
În primul rând, dacă avem o gazdă virtuală pentru aplicația noastră, putem introduce o IfModule
blocați în blocul nostru gazdă virtuală și modificați numele aplicației acolo:
...php_value newrelic.appname "Blogul meu 1" ...
Dar nu am o gazda virtuala speciala doar pentru blog, asa ca cealalta optiune este sa folosesti a .htaccess
fişier. Asigurați-vă că permiteți .htaccess
fișiere, prin eliminarea următoarelor elemente în principala gazdă virtuală:
Opțiuni Indexuri FollowSymLinks MultiViews AllowOverride Toate comenzile permit, respinge permisiunea de la toate
Acum putem pune un .htaccess
fișier în directorul de nivel superior al blogului nostru și puneți următoarele în el:
php_value newrelic.appname "Blogul meu 1"
Formatul este exact același lucru ca și când l-aș pune în IfModule
bloc. Acum trebuie doar să ne batem serverul. Dacă coșem jurnalele daemon atunci când serverul repornește, vom vedea următoarele:
ubuntu @ ip-10-145-246-196: / var / www / myblog1 $ cat /var/log/newrelic/newrelic-daemon.log 2014-03-23 05: 30: 41.063 (2008 / main) avertizare: actual fișierul limitat de 1024 este prea mic - încercarea de a crește it 2014-03-23 05: 30: 41.064 (2008 / main) info: limitarea fișierului a crescut la 2048 2014-03-23 05: 30: 41.064 (2008 / main) : New Relic 4.6 (versiunea build 40 - "quetzalcoatlus" - "e3d29c5a2e5dc1ee455e831d589ecf5e18c7d6f0") [lucrători = 1 listen = "/ tmp / .newrelic.sock" pid = 2008 pid = 2007 uid = 0 euid = 0 gid = 0 egid = 0 backtrace = nu os = "Linux" rel = "3.2.0-58-virtual" mach = "x86_64" ver = "# 88-Ubuntu SMP Tue Dec 3 17" node = "ip-10-145-246-196" startup = agent] 2014-03-23 05: 30: 41.069 (2008 / main) info: RPM config: proto = "https" colector = "collector.newrelic.com" proxy = "none" certfile = "/ etc / ssl /certs/ca-certificates.crt "certdir =" / etc / ssl / certs "2014-03-23 05: 35: 14.928 (2008 / conector) info: ['PHP Application'] 'Raportarea la: https: // rpm.newrelic.com/accounts/232928/applications/3262356 '2014-03-23 06: 07: 58.768 (2008 / conector) i nfo: ['Blogul meu 1'] 'Raportarea la: https://rpm.newrelic.com/accounts/232928/applications/3262424'
Cerere PHP este încă acolo, dar acum are un prieten care este blogul nostru WordPress. Și aici este în UI:
Acum vom primi valori pe măsură ce răsfoim blogul nostru, atât pentru interfața front-end cât și pentru interfața de administrare. Deoarece New Relic suporta WordPress din cutie, metricile ar trebui să fie sparte în mod sensibil (atunci când un cadru nu este suportat, valorile vor tinde să fie concentrate împreună).
New Relic este o aplicație complexă și este bine să o țineți la curent, deoarece bug-urile sunt fixate regulat și sunt adăugate noi caracteristici. De când am instalat totul folosind apt-get,
păstrarea la zi a lucrurilor este ușoară. Pur și simplu facem același lucru pe care l-am făcut pentru al instala:
apt-get actualizare apt-get instalează newrelic-php5
Dacă nu am instalat încă un sistem PHP pe sistem, acum avem nevoie să reluăm serverul și vom fi la curent. Dacă există un nou PHP, este posibil să fie nevoie să reluăm funcționarea newrelic-instalare
scenariu.
Există o singură avertisment la toate acestea. În anumite situații, este posibil să difuzați daemonul proxy de la New Relic separat de agent, ceea ce înseamnă că repornirea serverului nu lansează automat daemonul dacă nu rulează (acest lucru se numește mod daemon extern). Ar putea exista mai multe motive pentru care doriți să faceți acest lucru, de exemplu, ați putea dori ca un alt utilizator să dețină procesul daemon, astfel încât jurnalele să fie vizibile numai pentru acel utilizator. În această situație, trebuie să vă amintiți atât să reporniți serverul, cât și să reporniți daemonul proxy. Dacă nu, veți vedea în registru "erori de nepotrivire a protocolului".
După cum puteți vedea, obținerea programului New Relic înființat pentru o aplicație PHP este foarte diferită de cea a lui Ruby, aplicația dvs. reală nu are nici măcar un rol în acest proces, în timp ce mediul pe care îl desfășurați este central. Din fericire, acest lucru înseamnă că, dacă utilizați orice cadru PHP acceptat, procesul de configurare a New Relic este exact același. Pe lângă WordPress, majoritatea cadrelor PHP populare sunt susținute, inclusiv Cake, Symphony și Laravel (versiunea 4 și mai sus). De asemenea, este posibil să utilizați New Relic cu un cadru neacceptat, dar va trebui să depuneți eforturi serioase pentru a obține evaluarea valorilor.