Hur man använder New Relic med PHP & WordPress

Vi har tidigare tagit upp hur du skapar New Relic for a Rails-app, och spenderat mycket tid på hur du använder New Relic-gränssnittet. Och medan användargränssnittet är mycket likartat, oberoende av vilket språk och ramverk du använder, kan det vara radikalt annorlunda att få nya relicer. Idag ska vi titta på hur man övervakar en PHP-applikation med hjälp av New Relic. Närmare bestämt kommer vi att skapa en grundläggande WordPress-installation och få lite resultatdata om det, i New Relic-instrumentpaneler.

Att få ny relik upprättad för Ruby är mycket miljö agnostic. Vi lägger helt enkelt till agentens pärla i vår ansökan, oavsett hur vi använder vår app (Passenger + Apache, Thin + Nginx etc.), kommer pärlan att göra resten av arbetet för att vi ska få våra prestandamätningar. Med PHP-versionen av agenten är miljön mycket viktigare, eftersom agenten är installerad och bor på rutan där applikationen kommer att distribueras, snarare än att vara en del av en viss app. 

Låt oss skapa en sandlåda för att vi ska leka med (med en EC2-förekomst) och få en grundläggande WordPress-installation och körning.

Ställa in vår sandlåda

Vi kommer inte att gå in på för mycket detaljer här, eftersom de flesta saker vi behöver göra är väl dokumenterade på annat håll. Men här är en grundläggande disposition.

Vi måste starta en EC2-instans med Ubuntu Server 12.04 LTS på den. Om du inte vill skapa en EC2-instans kan du bara skapa en virtuell maskin istället genom att använda VirtualBox (eller ditt VM-verktyg). Om du skapar en EC2-förekomst måste du komma ihåg att göra följande:

  • ladda ner din nyckel (om du har skapat en ny under installationsprocessen), så att du kan SSH i din instans
  • lägg till en extra regel till någon säkerhetsgrupp du ger till din instans för att tillåta HTTP-anslutningar till förekomsten (så att vi faktiskt kan komma åt vårt WordPress-blogg via webbläsaren senare)

Bortsett från det borde allting vara ganska rakt framåt och du borde sluta med en körinstans (eller virtuell maskin) som är redo för nästa steg.

Vi behöver nu installera Apache, PHP och MySQL. Med Ubuntu Server ska det vara en enkel fråga om att köra följande kommandon:

sudo apt-get installera tasksel sudo tasksel installera lamp-server

Du måste välja LAMP i användargränssnittet och du måste också ange ditt MySQL-lösenord när du blir ombedd att göra det (jag lämnar det tomt eftersom vi inte bryr oss om att den här rutan är säker på något sätt). När installationen är klar kan vi sedan köra några kommandon för att se till att allt är installerat utan problem. 

Kontrollera först att Apache är installerad:

ubuntu @ ip-10-145-246-196: ~ $ apache2 -V Serverversion: Apache / 2.2.22 (Ubuntu) Server byggd: 12 juli 2013 13:37:10 Serverens modul Magic Number: 20051115: 30 Server laddad: APR 1.4.6, APR-Util 1.3.12 Kompilerad med: APR 1.4.6, APR-Util 1.3.12 Arkitektur: 64-bitars Server MPM: Förforkgängad: Nej förked: Ja (variabelt antal processer) ... 

För det andra, kontrollera att vi har PHP:

ubuntu @ ip-10-145-246-196: ~ $ php -i phpinfo () PHP Version => 5.3.10-1ubuntu3.10 System => Linux ip-10-145-246-196 3.2.0-58- virtuell # 88-Ubuntu SMP tis dec 3 17:58:13 UTC 2013 x86_64 Byggnadsdatum => 28 feb 2014 23:13:16 Server API => Kommandoradsgränssnitt Virtual Directory Support => Inaktiverad konfigurationsfil (php.ini) => / etc / php5 / cli Loaded Configuration File => /etc/php5/cli/php.ini... 

Och kontrollera att vi har MySQL:

ubuntu @ ip-10-145-246-196: ~ $ mysql --version mysql Ver 14.14 Distrib 5.5.35, för debian-linux-gnu (x86_64) med läsning 6.2

Vi kan också behöva kontrollera att PHP faktiskt är aktiverat i vår Apache-konfiguration, men sedan vi installerade lampa-server använder sig av tasksel vi kan vara ganska säkra på att det är (och vi kan alltid göra en snabb phpinfo () skript om vi verkligen vill kolla).

Vi kan nu installera WordPress. Innan vi faktiskt laddar ner det, måste vi skapa en databas för det så. Vi kan bara följa instruktionerna från Codex:

ubuntu @ ip-10-145-246-196: ~ $ mysql Välkommen till MySQL-skärmen. Kommandon slutar med; eller \ g. Ditt MySQL-anslutnings-id är 103 Serverversion: 5.5.35-0ubuntu0.12.04.2 (Ubuntu) Skriv 'hjälp;' eller '\ h' för hjälp. Skriv '\ c' för att radera det aktuella inmatningsbeviset. mysql> CREATE DATABASE myblog1; Fråga OK, 1 rad påverkade (0.00 sek) mysql> ALLA PRIVILEGER PÅ myblog1. * Till "myblog1_user" @ "localhost" IDENTIFIED BY "abc123"; Fråga OK, 0 rader påverkas (0.00 sek) mysql> FLUSH PRIVILEGES; Fråga OK, 0 rader påverkas (0,01 sek) mysql> EXIT Bye

Jag ska ringa vår nya installation myblog1 (så databasen för den heter också myblog1). Vi behöver nu köra följande kommandon för att få vår blogg att gå (glöm inte att sudo när det är nödvändigt):

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

Fyll i ditt databasnamn, användarnamn och lösenord i config-filen (värdnamnet är lokal värd som finns som standard). Vid denna tidpunkt bör du kunna gå till din webbläsare, klicka på rätt webbadress (i mitt fall http://ec2-107-20-122-116.compute-1.amazonaws.com/myblog1) och WordPress kommer att göra sin sak (det kan inte skadas för att starta om Apache innan du gör det här sudo apache2 service omstart).

Vår sandlåda är nu klar och vi kan komma igång med att installera New Relic.

Installera New Relic

Som jag nämnde tidigare ligger PHP New Relic-agenten på lådan, det är därför meningsfullt att du kan installera det med operativsystemets pakethanterare (apt-get eftersom vi använder Ubuntu). Det första du behöver göra är att importera ny relikförvaringsnyckel:

wget -O - https://download.newrelic.com/548C16BF.gpg | sudo apt-key lägg till -

Nu lägger vi till New Relic repository sig till systemet: 

sudo sh-c "echo" deb http://apt.newrelic.com/debian/ newrelic non-free "> /etc/apt/sources.list.d/newrelic.list"

Vid denna tidpunkt kan vi använda standarden benägen kommandon för att installera agenten:

sudo apt-få uppdatering sudo apt-get installera newrelic-php5

Detta hämtar PHP-agenten från förvaret och sätter agentinstallationsskriptet på systemet. Skriptet heter newrelic-install och det lever i / Usr / bin, så du borde kunna springa in var som helst. Skriptet heter också något tyvärr, eftersom du kan använda det för att både installera och avinstallera New Relic från ditt system. För att installera New Relic måste vi springa:

newrelic-install installera

Skriptet är interaktivt och kommer att be dig att skriva in din licensnyckel. Du kan hitta detta genom att trycka på stor röd knapp när du sätter upp en ny PHP-applikation inom New Relic-gränssnittet.

Om du har mer än en PHP-installation på ditt system, kommer det också att fråga dig att välja vilken installation New Relic ska installeras för (du kan välja vilket antal installationer som helst inklusive dem). Om du bara har ett PHP på ditt system, kommer skriptet bara att använda det. Det är värt att notera att om din version av PHP är äldre än 5,2, kommer manuskriptet att tillgodose då äldre versioner inte stöds.

Om allt går bra bör du se följande meddelande:

New Relic är nu installerat på ditt system. Grattis!

Skriptet kommer då att skriva ut lite extra information för dig, inklusive platsen för loggfilerna:

/var/log/newrelic/newrelic-daemon.log /var/log/newrelic/php_agent.log

Förutom att du måste starta om din webbserver (och PHP-FPM om du använder den).

Om du startar om servern och stöder demonloggen bör du se något så här:

ubuntu @ ip-10-145-246-196: / var / www / myblog1 $ cat /var/log/newrelic/newrelic-daemon.log 2014-03-23 ​​05: 30: 41,063 (2008 / huvud) varning: nuvarande filgränsen för 1024 är för låg - försöker öka den 2014-03-23 ​​05: 30: 41.064 (2008 / huvud) info: ökad filgräns till 2048 2014-03-23 ​​05: 30: 41.064 (2008 / huvud) info : New Relic 4.6 (release build 40 - "quetzalcoatlus" - "e3d29c5a2e5dc1ee455e831d589ecf5e18c7d6f0") [arbetare = 1 listen = "/ tmp / .newrelic.sock" pid = 2008 ppid = 2007 uid = 0 euid = 0 gid = 0 egid = 0 backtrace = no os = "Linux" rel = "3.2.0-58-virtuellt" mach = "x86_64" ver = "# 88-Ubuntu SMP tis dec 3 17" node = "ip-10-145-246-196" start = agent] 2014-03-23 ​​05: 30: 41.069 (2008 / huvud) info: RPM config: proto = "https" samlare = "collector.newrelic.com" proxy = "none" certfile = "/ etc / ssl /certs/ca-certificates.crt "certdir =" / etc / ssl / certs "2014-03-23 ​​05: 35: 14.928 (2008 / kontakt) info: ['PHP Application'] 'Rapportering till: https: // rpm.newrelic.com/accounts/232928/applications/3262356'

Något som heter PHP-applikation rapporterar. Det här är lite generiskt och ser inte ut som vårt WordPress-blogg, men det är en bra start. Vad det innebär är att alla applikationer på din webbserver kör och rapporterar som samma ansökan till New Relic. Den här applikationen har ett standardnamn på PHP-applikation

I vårt fall kan vi faktiskt hoppa in i New Relic-gränssnittet och få rimlig statistik för vår blogg, eftersom vi bara kör en applikation (vårt WordPress-installationsprogram). Men självklart vill vi ge vår blogg ett bättre namn och bara om vi vill att vår server ska servera mer än en applikation. Vi vill också se hur du separerar appar från varandra. Vi kommer att titta på hur man gör det här inom kort, men innan vi gör, låt oss se vad som faktiskt utgör en PHP-agent.

Vad en hälsosam installation ser ut

Det finns två delar till New Relic PHP-agenten. Den första är en PHP-förlängning, det heter ett gemensamt objekt newrelic.so. Om vi ​​tittar på agentkonfigurationsfilen:

/etc/php5/cli/conf.d/newrelic.ini

Vi kan se den listad högst upp:

; Den här filen innehåller de olika inställningarna för New Relic PHP-agenten. Där ; Det finns många alternativ som alla beskrivs i detalj på följande webbadress:; https://newrelic.com/docs/php/php-agent-phpini-settings; ; Om du använder en full väg till förlängningen isolerar du dig själv från; förlängningskatalog ändras om du ändrar PHP-installationer eller versioner. ; Om du inte använder en absolut sökväg måste filen installeras i; aktiv konfigurations extensionskatalog. extension = "newrelic.so"

Det här är den sak som faktiskt kommer att samla in statistiken från dina appar, men den skickar inte statistiken till New Relic, det här är jobbet för proxy-demonen.

Agentdemonen är en proxy mellan PHP-förlängningen och New Relic-servrarna. I huvudsak kommer PHP-förlängningen att ge de data som samlar in till demonen och daemonen kommer att göra saker som batch upp och räkna ut när man ska skicka den till servern. Du måste alltid se till att demonen körs, annars skickas inga data till New Relic. Lyckligtvis, som standard, när du startar om din server, kommer PHP-tillägget att försöka upptäcka om demonen körs och startar den, om den inte är.

En löpande proxy-demon har två processer. En är en bildskärmsprocess och den andra är arbetaren. Arbetaren gör faktiskt jobbet med att kommunicera med New Relic-servrarna, övervakningsprocessen tittar helt enkelt på arbetaren och om arbetaren dör, oavsett orsak, kommer den att hämta en ny. Du kan stoppa demonen genom att springa:

/etc/init.d/newrelic-daemon stop

Vilket skickar en avstängningssignal till övervakningsprocessen. Övervakningsprocessen kommer då att döda arbetarprocessen och stänga av sig själv. Om du någonsin behöver döda demonen manuellt, var noga med att du avslutar övervakningsprocessen först innan du dödar arbetaren (annars kommer en ny arbetare att komma igång - självklart).

Konfigurera agenten (och proxydemonet)

Vi har redan sett konfigurationsfilen för New Relic PHP-agent /etc/php5/cli/conf.d/newrelic.ini. Både agenten och demonen konfigureras med den här filen.

Den här filen är väldokumenterad med alla alternativ och deras standardvärden listade. Låt oss prata om formatet på den här filen. New Relic Ruby-agenten kan konfigureras via YAML, vilket är ett välkänt format. PHP-agenten är helt enkelt en textfil, men vi behöver lite struktur. Varje variabel i filen har en av fyra typer (String, Boolean, Number, Duration). String och nummer är självförklarande, booleska värden kan vara Sann, på eller 1 för att ange truthiness och falsk, av eller 0 att indikera falskhet. Varaktighet är strängar med ett visst format, till exempel: "1w3d23h10m" indikerar en vecka, tre dagar, 23 timmar och tio minuter. Värdena för varaktighet kan vara lika granulära som mikrosekunder.

Alla variabler i filen har också en "scope". Det finns tre möjliga omfång: SYSTEM, PERDIR och SCRIPT. Variabler som har SYSTEM-räckvidd kan bara ställas in i den globala konfigurationsfilen. Variabler med ett PERDIR-räckvidd kan ställas in i den globala konfigurationsfilen och kan också överskridas per katalogbas. Variabler med skriptomfattning kan vara globala, per katalog och kan också överskridas programmatiskt.

Till exempel är den vanligaste konfigurationsvariabeln 'Newrelic.appname'. Denna variabel är en strängtyp, den har ett standardvärde på PHP-applikation (nu vet vi varför vi såg det värdet i loggfilen efter att vi installerade agenten och startade servern igen). Omfattningen av denna variabel är PERDIR, som ger oss en uppfattning om hur man åsidosätter applikationsnamnet för vår WordPress-blogg. 

Det finns många andra variabler som kontrollerar saker som loggfilens placering, oavsett om SQL-frågor är registrerade, loggnivå för loggutmatningen eller så. Jag uppmuntrar dig att studera newrelic.ini fil för att bekanta dig med alternativen.

Konfigurera en separat app för vår WordPress Blog 

Vi vill se en separat app i New Relic-gränssnittet för vårt WordPress-blogg, så låt oss se hur vi kan få det att gå. Dina alternativ för katalogkonfigurationen är olika beroende på din stack. Om du använder PHP-FPM, är stegen annorlunda än om du använder Nginx. I vårt fall, eftersom vi kör rakt Apache, har vi två alternativ.

För det första, om vi har en virtuell värd för vår app, kan vi infoga en IfModule blockera in i vårt virtuella värdblock och ändra namnet på appen där:

...  php_value newrelic.appname "Min blogg 1" ... 

Men jag har ingen speciell virtuell värd bara för bloggen, så det andra alternativet är att använda a .htaccess fil. Se till att du faktiskt tillåter .htaccess filer genom att dumpa följande till din huvudsakliga virtuella värd:

 Alternativ Indexer FollowSymLinks MultiViews AllowOverride All Order tillåta, neka tillåta från alla 

Vi kan nu lägga en .htaccess filen i toppnivån på vår blogg och lägg till följande i den:

php_value newrelic.appname "Min blogg 1"

Formatet är exakt detsamma som om jag sätter det in i IfModule blockera. Nu behöver vi bara studsa vår server. Om vi ​​stöter på demonloggarna när servern startar om ser vi följande:

ubuntu @ ip-10-145-246-196: / var / www / myblog1 $ cat /var/log/newrelic/newrelic-daemon.log 2014-03-23 ​​05: 30: 41,063 (2008 / huvud) varning: nuvarande filgränsen för 1024 är för låg - försöker öka den 2014-03-23 ​​05: 30: 41.064 (2008 / huvud) info: ökad filgräns till 2048 2014-03-23 ​​05: 30: 41.064 (2008 / huvud) info : New Relic 4.6 (release build 40 - "quetzalcoatlus" - "e3d29c5a2e5dc1ee455e831d589ecf5e18c7d6f0") [arbetare = 1 listen = "/ tmp / .newrelic.sock" pid = 2008 ppid = 2007 uid = 0 euid = 0 gid = 0 egid = 0 backtrace = no os = "Linux" rel = "3.2.0-58-virtuellt" mach = "x86_64" ver = "# 88-Ubuntu SMP tis dec 3 17" node = "ip-10-145-246-196" start = agent] 2014-03-23 ​​05: 30: 41.069 (2008 / huvud) info: RPM config: proto = "https" samlare = "collector.newrelic.com" proxy = "none" certfile = "/ etc / ssl /certs/ca-certificates.crt "certdir =" / etc / ssl / certs "2014-03-23 ​​05: 35: 14.928 (2008 / kontakt) info: ['PHP Application'] 'Rapportering till: https: // rpm.newrelic.com/accounts/232928/applications/3262356 '2014-03-23 ​​06: 07: 58.768 (2008 / connector) i nfo: ['My Blog 1'] 'Rapportering till: https://rpm.newrelic.com/accounts/232928/applications/3262424'

De PHP-applikation är fortfarande kvar, men nu har den en vän som är vår WordPress blogg. Och här ligger det i gränssnittet:

Vi får nu mätvärden när vi bläddra i vår blogg, både för fronten och admingränssnittet. Eftersom New Relic stöder WordPress ut ur rutan, bör mätvärdena brytas upp förnuftigt (när en ram inte stöds, tenderar mätvärdena att klumpas ihop).

Uppdaterar Agent & Daemon

New Relic är ett komplicerat program och det är bra att hålla den uppdaterad eftersom buggar fixas regelbundet och nya funktioner läggs till. Sedan vi installerade allt med apt-get, Det är enkelt att hålla saker uppdaterade. Vi gör helt enkelt samma sak som vi gjorde för att installera det:

apt-get update apt-get installera newrelic-php5

Om vi ​​inte har installerat en annan PHP på systemet behöver vi nu bara starta om vår server och vi är uppdaterade. Om det finns ett nytt PHP kan vi behöva köra igen newrelic-install manus.

Det finns bara ett försök till allt detta. I vissa situationer kan du köra New Relic-proxy-demonen separat från agenten, vilket betyder att omstart av servern inte startar demonen automatiskt om en inte körs (det här kallas externt daemon-läge). Det kan finnas flera anledningar till varför du vill göra det här, till exempel kanske du vill att en annan användare ska äga daemonprocessen så att loggarna bara är synliga för den användaren. I den här situationen måste du komma ihåg att både omstarta servern och starta om proxiedemonen. Om du inte gör det kommer du att se "protokollmatch" -fel i loggarna.

Slutsats

Som du kan se är att få nya reliker för en PHP-applikation är väldigt annorlunda än att få den inrättad för Ruby, din faktiska applikation är inte ens en faktor i processen, medan miljön där du distribuerar är central. Lyckligtvis betyder det att om du använder någon stödd PHP-ram är processen för att skapa New Relic exakt densamma. Förutom WordPress stöds de flesta av de populära PHP-ramarna, inklusive Cake, Symphony och Laravel (version 4 och upp). Det är också möjligt att använda New Relic med ett stöd som inte stöds, men du måste lägga in några seriösa ansträngningar för att få mätvärdena förnuftiga.