Cum să folosiți noua reședință cu PHP și WordPress

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.

Configurarea spațiului nostru de nisip

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:

  • descărcați cheia (dacă ați creat o cheie nouă în timpul procesului de configurare), astfel încât să puteți utiliza SSH în instanța dvs.
  • adăugați o regulă suplimentară oricărui grup de securitate pe care îl acordați instanței dvs. pentru a permite conexiunile HTTP la instanță (astfel încât să putem accesa de fapt blogul nostru WordPress prin browser ulterior)

Î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.

Instalarea noului 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.

Ce arata o instalare sanatoasa

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).

Configurarea agentului (și a daemonului proxy)

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.

Configurarea unei aplicații separate pentru Blogul nostru WordPress 

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ă).

Actualizarea agentului și a daemonului

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".

Concluzie

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.

Cod