Come usare New Relic con PHP e WordPress

Abbiamo già spiegato come installare l'app New Relic for a Rails, oltre a dedicare molto tempo a come utilizzare l'interfaccia utente di New Relic. E mentre l'interfaccia utente è molto simile indipendentemente dalla lingua e dal framework che stai utilizzando, l'impostazione di New Relic può essere radicalmente diversa. Oggi vedremo come monitorare un'applicazione PHP usando New Relic. In particolare, configureremo un'installazione di base di WordPress e otterremo alcuni dati sulle prestazioni, nei dashboard di New Relic.

Getting New Relic impostato per Ruby è molto indipendente dall'ambiente. Semplicemente aggiungiamo la gem dell'agent alla nostra applicazione e, a prescindere da come distribuiamo la nostra app (Passenger + Apache, Thin + Nginx ecc.), La gemma farà il resto del lavoro per assicurarci di ottenere le nostre metriche sul rendimento. Con la versione PHP dell'agente, l'ambiente è molto più importante, poiché l'agente è installato e risiede nella scatola in cui verrà distribuita l'applicazione, piuttosto che far parte di una particolare app. 

Impostiamo una sandbox con cui giocare (usando un'istanza EC2) e ottenere una installazione di base per WordPress attiva e funzionante.

Impostazione della nostra sandbox

Non entreremo troppo nel dettaglio qui perché la maggior parte delle cose che dobbiamo fare sono ben documentate altrove. Ma ecco uno schema di base.

Abbiamo bisogno di lanciare un'istanza EC2 con Ubuntu Server 12.04 LTS su di esso. Se non si desidera configurare un'istanza EC2, è sufficiente creare una macchina virtuale utilizzando VirtualBox (o lo strumento VM preferito). Se stai configurando un'istanza EC2, devi ricordarti di fare quanto segue:

  • scarica la tua chiave (se ne hai creata una nuova durante la procedura di configurazione), in modo da poter inserire SSH nella tua istanza
  • aggiungi una regola aggiuntiva a qualsiasi gruppo di sicurezza che fornisci alla tua istanza per consentire connessioni HTTP all'istanza (in modo che possiamo effettivamente accedere al nostro blog WordPress tramite il browser in seguito)

A parte questo, tutto il resto dovrebbe essere abbastanza semplice e dovresti finire con un'istanza in esecuzione (o una macchina virtuale) pronta per il prossimo passo.

Ora dobbiamo installare Apache, PHP e MySQL. Con Ubuntu Server, dovrebbe essere una semplice questione di eseguire i seguenti comandi:

sudo apt-get install tasksel sudo tasksel installa lamp-server

Dovrai selezionare LAMP nell'interfaccia utente e dovrai anche inserire la tua password MySQL quando ti viene chiesto di farlo (lascialo vuoto perché non ci interessa che questa casella sia protetta in alcun modo). Una volta completata l'installazione, possiamo quindi eseguire alcuni comandi per assicurarci che tutto sia installato senza problemi. 

Innanzitutto controlla che Apache sia installato:

ubuntu @ ip-10-145-246-196: ~ $ apache2 -V Versione server: Apache / 2.2.22 (Ubuntu) Server compilato: 12 luglio 2013 13:37:10 Numero magico modulo server: 20051115: 30 Server caricato: APR 1.4.6, APR-Util 1.3.12 Compilato usando: APR 1.4.6, APR-Util 1.3.12 Architettura: 64-bit Server MPM: prefork con thread: no forked: sì (conteggio dei processi variabile) ... 

In secondo luogo, controlla che abbiamo PHP:

ubuntu @ ip-10-145-246-196: ~ $ php -i phpinfo () Versione PHP => 5.3.10-1ubuntu3.10 Sistema => Linux ip-10-145-246-196 3.2.0-58- virtual # 88-Ubuntu SMP Tue Dec 3 17:58:13 UTC 2013 x86_64 Build Date => 28 Feb 2014 23:13:16 Server API => Interfaccia della riga di comando Supporto directory virtuale => percorso file di configurazione disabilitato (php.ini) => / etc / php5 / cli File di configurazione caricato => /etc/php5/cli/php.ini... 

E poi controlla che abbiamo MySQL:

ubuntu @ ip-10-145-246-196: ~ $ mysql --version mysql Ver 14.14 Distrib 5.5.35, per debian-linux-gnu (x86_64) usando readline 6.2

Potremmo anche dover controllare che PHP sia effettivamente abilitato nella nostra configurazione di Apache, ma da quando abbiamo installato Lampada server utilizzando tasksel possiamo essere abbastanza sicuri che lo sia (e possiamo sempre fare un rapido phpinfo () script se vogliamo veramente controllare).

Ora possiamo installare WordPress. Prima di scaricarlo, abbiamo bisogno di creare un database per questo. Possiamo solo seguire le istruzioni del Codice:

ubuntu @ ip-10-145-246-196: ~ $ mysql Benvenuti nel monitor MySQL. I comandi finiscono con; o \ g. L'ID della connessione MySQL è 103 Versione server: 5.5.35-0ubuntu0.12.04.2 (Ubuntu) Digitare "help"; o "\ h" per aiuto. Digita "\ c" per cancellare l'istruzione di input corrente. mysql> CREATE DATABASE myblog1; Query OK, 1 riga interessata (0,00 sec) mysql> CONCORDI TUTTI I PRIVILEGI SU myblog1. * A "myblog1_user" @ "localhost" IDENTIFICATO DA "abc123"; Query OK, 0 righe interessate (0,00 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 righe interessate (0,01 sec) mysql> EXIT Bye

Chiamerò la nostra nuova installazione myblog1 (così anche il database per esso è chiamato myblog1). Ora dobbiamo eseguire i seguenti comandi per far funzionare il nostro blog (non dimenticarlo sudo quando necessario):

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

Ora inserisci il nome del tuo database, il nome utente e la password nel file di configurazione (il nome host è localhost che è lì per impostazione predefinita). A questo punto dovresti essere in grado di andare al tuo browser, premere l'URL corretto (nel mio caso http://ec2-107-20-122-116.compute-1.amazonaws.com/myblog1) e WordPress farà il suo dovere (non sarebbe male riavviare Apache prima di farlo riavvio del servizio sudo apache2).

La nostra sandbox è ora completa e possiamo iniziare con l'installazione di New Relic.

Installare New Relic

Come accennato in precedenza, l'agente New Relic di PHP risiede sulla scatola, quindi ha senso che è possibile installarlo utilizzando il gestore di pacchetti del sistema operativo (apt-get dal momento che stiamo usando Ubuntu). La prima cosa da fare è importare la chiave del repository New Relic:

wget -O - https://download.newrelic.com/548C16BF.gpg | sudo apt-key add -

Ora aggiungiamo il repository New Relic al sistema: 

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

A questo punto, possiamo usare lo standard adatto comandi per installare l'agente:

sudo apt-get update sudo apt-get install newrelic-php5

Questo preleva il pacchetto dell'agente PHP dal repository e inserisce lo script di installazione dell'agente nel sistema. Lo script è chiamato newrelic-installazione e vive dentro / Usr / bin, quindi dovresti essere in grado di correre da qualsiasi luogo. Lo script è anche un po 'sfortunatamente chiamato, dato che puoi usarlo sia per installare e disinstallare New Relic dal tuo sistema. Per installare New Relic, è necessario eseguire:

installazione di installazione newrelic

Lo script è interattivo e ti chiederà di inserire il tuo codice di licenza. Puoi trovarlo premendo il tasto grande bottone rosso quando stai configurando una nuova applicazione PHP all'interno dell'interfaccia utente di New Relic.

Se hai più di un'installazione PHP sul tuo sistema, ti chiederà anche di scegliere quale installazione installare New Relic (puoi scegliere un numero qualsiasi di installazioni comprese tutte). Se hai solo l'unico PHP sul tuo sistema, lo script userà solo quello. Vale la pena notare che se la tua versione di PHP è precedente alla 5.2, lo script verrà salvato in quanto le versioni precedenti non sono supportate.

Se tutto va bene, dovresti vedere il seguente messaggio:

New Relic è ora installato sul tuo sistema. Congratulazioni!

Lo script stamperà quindi alcune informazioni aggiuntive per te, inclusa la posizione dei file di registro:

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

Oltre al fatto che devi riavviare il tuo server web (e PHP-FPM se lo stai usando).

Se riavvii il server e fai il log del demone, dovresti vedere qualcosa di simile a questo:

ubuntu @ ip-10-145-246-196: / var / www / myblog1 $ cat /var/log/newrelic/newrelic-daemon.log 2014-03-23 ​​Avviso 05: 30: 41.063 (2008 / principale): corrente il limite del file 1024 è troppo basso - tentativo di aumentarlo 2014-03-23 ​​05: 30: 41.064 (2008 / main) informazioni: limite di file aumentato a 2048 2014-03-23 ​​05: 30: 41.064 (2008 / main) informazioni : New Relic 4.6 (release build 40 - "quetzalcoatlus" - "e3d29c5a2e5dc1ee455e831d589ecf5e18c7d6f0") [workers = 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-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) informazioni: RPM config: proto = "https" collector = "collector.newrelic.com" proxy = "none" certfile = "/ etc / ssl /certs/ca-certificates.crt "certdir =" / etc / ssl / certs "2014-03-23 ​​05: 35: 14.928 (2008 / connettore) informazioni: ['Applicazione PHP'] 'Rapporti a: https: // rpm.newrelic.com/accounts/232928/applications/3262356'

Qualcosa di chiamato Applicazione PHP sta segnalando. Questo è piuttosto generico e non sembra affatto il nostro blog WordPress, ma è un buon inizio. Ciò significa che tutte le applicazioni sul server Web vengono eseguite e segnalate come la stessa applicazione a New Relic. Questa applicazione ha un nome predefinito di Applicazione PHP

Nel nostro caso, dal momento che stiamo eseguendo solo un'applicazione (la nostra installazione di WordPress), potremmo effettivamente passare all'interfaccia utente di New Relic e ottenere statistiche ragionevoli per il nostro blog. Ma, naturalmente, vogliamo dare al nostro blog un nome migliore e, nel caso, vogliamo che il nostro server serva più di un'applicazione. Vogliamo anche vedere come separare le app l'una dall'altra. Vedremo come farlo a breve, ma prima di farlo, vediamo cosa costituisce effettivamente un agente PHP.

Che aspetto ha un'installazione sana

Ci sono due parti nell'agente New Relic PHP. Il primo è un'estensione PHP, è un oggetto condiviso chiamato newrelic.so. Se guardiamo il file di configurazione dell'agente:

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

Possiamo vederlo elencato in alto:

; Questo file contiene le varie impostazioni per l'agente New Relic PHP. Là ; sono molte opzioni, tutte descritte in dettaglio al seguente URL:; https://newrelic.com/docs/php/php-agent-phpini-settings; ; Se usi un percorso completo all'estensione ti isolerai dal; modifica della directory di estensione se si modificano le installazioni o le versioni di PHP. ; Se non si utilizza un percorso assoluto, il file deve essere installato nel; directory di estensione della configurazione attiva. extension = "newrelic.so"

Questa è la cosa che in realtà raccoglierà le statistiche dalle tue app, ma non invierà le statistiche a New Relic, questo è il lavoro del demone proxy.

Il daemon agent è un proxy tra l'estensione PHP e i server New Relic. Essenzialmente, l'estensione PHP fornirà i dati raccolti al demone e il demone farà cose come il batch it up e capire quando inviarlo al server. È necessario assicurarsi sempre che il daemon sia in esecuzione, altrimenti nessun dato verrà inviato a New Relic. Fortunatamente, per impostazione predefinita, ogni volta che si riavvia il server, l'estensione PHP proverà a rilevare se il daemon è in esecuzione e lo avvierà, se non lo è.

Un demone proxy in esecuzione ha due processi. Uno è un processo di monitoraggio e il secondo è l'operatore. Il lavoratore svolge effettivamente il compito di comunicare con i server di New Relic, il processo di monitoraggio semplicemente guarda il lavoratore e se l'operatore muore, per qualsiasi ragione, ne verrà generato uno nuovo. Puoi fermare il demone eseguendo:

/etc/init.d/newrelic-daemon stop

Che invierà un segnale di arresto al processo di monitoraggio. Il processo di monitoraggio ucciderà quindi il processo di lavoro e si spegnerà automaticamente. Se hai mai bisogno di uccidere il demone manualmente, assicurati di interrompere il processo di monitoraggio prima di uccidere il lavoratore (altrimenti un nuovo lavoratore verrà generato - ovviamente).

Configurazione dell'agente (e del daemon proxy)

Abbiamo già visto il file di configurazione dell'agente New Relic PHP /etc/php5/cli/conf.d/newrelic.ini. Sia l'agente che il daemon sono configurati usando questo file.

Questo file è molto ben documentato con tutte le opzioni e i loro valori predefiniti elencati. Parliamo del formato di questo file. L'agente New Relic Ruby può essere configurato tramite YAML, che è un formato noto. L'agente PHP è semplicemente un file di testo, ma abbiamo bisogno di un po 'di struttura. Ogni variabile nel file ha uno di quattro tipi (String, Boolean, Number, Duration). Stringa e numero sono auto-esplicativi, i valori booleani possono essere vero, su o 1 per indicare la verità e falso, di per 0 per indicare la falsità. Le durate sono stringhe con un formato particolare, ad esempio: "1w3d23h10m" indica una settimana, tre giorni, 23 ore e dieci minuti. I valori per le durate possono essere tanto dettagliati quanto i microsecondi.

Tutte le variabili nel file hanno anche un 'ambito'. Esistono tre possibili ambiti: SYSTEM, PERDIR e SCRIPT. Le variabili con ambito SYSTEM possono essere impostate solo nel file di configurazione globale. Le variabili con un ambito PERDIR possono essere impostate nel file di configurazione globale e possono anche essere sovrascritte per directory. Le variabili con scope di script possono essere globali, per directory e possono anche essere sovrascritte a livello di codice.

Ad esempio, la variabile di configurazione più comune è 'Newrelic.appname'. Questa variabile è un tipo String, ha un valore predefinito di Applicazione PHP (ora sappiamo perché abbiamo visto quel valore nel file di log dopo aver installato l'agente e riavviato il server). Lo scopo di questa variabile è PERDIR che ci dà un'idea su come sovrascrivere il nome dell'applicazione per il nostro blog WordPress. 

Ci sono molte altre variabili che controllano cose come la posizione dei file di log, se le query sql sono registrate o meno, il livello di log dell'output del log e così via. Ti incoraggio a studiare il newrelic.ini file per familiarizzare con le opzioni.

Configurazione di un'app separata per il nostro blog WordPress 

Vogliamo vedere un'app separata nell'interfaccia utente di New Relic per il nostro blog WordPress, quindi vediamo come possiamo procedere. Le opzioni per la configurazione della directory sono diverse a seconda dello stack, se usi PHP-FPM, i passaggi sono diversi da quelli che stai utilizzando Nginx. Nel nostro caso, dato che stiamo eseguendo direttamente Apache, abbiamo due opzioni.

Innanzitutto, se disponiamo di un host virtuale per la nostra app, possiamo inserire un IfModule bloccare nel nostro blocco host virtuale e modificare il nome dell'app lì:

...  php_value newrelic.appname "Il mio blog 1" ... 

Ma non ho un host virtuale speciale solo per il blog, quindi l'altra opzione è usare a .htaccess file. Assicurati di consentire effettivamente .htaccess file, scaricando quanto segue nel tuo host virtuale principale:

 Opzioni Indici FollowSymLinks MultiViews AllowOverride Tutti gli ordini consentono, negano l'autorizzazione a tutti 

Ora possiamo mettere un .htaccess file nella directory di livello superiore del nostro blog e inserisci quanto segue:

php_value newrelic.appname "Il mio blog 1"

Il formato è esattamente lo stesso di quando lo inserivo nel IfModule bloccare. Ora dobbiamo solo rimbalzare il nostro server. Se accodiamo i registri dei demoni quando il server si riavvia, vedremo quanto segue:

ubuntu @ ip-10-145-246-196: / var / www / myblog1 $ cat /var/log/newrelic/newrelic-daemon.log 2014-03-23 ​​Avviso 05: 30: 41.063 (2008 / principale): corrente il limite del file 1024 è troppo basso - tentativo di aumentarlo 2014-03-23 ​​05: 30: 41.064 (2008 / main) informazioni: limite di file aumentato a 2048 2014-03-23 ​​05: 30: 41.064 (2008 / main) informazioni : New Relic 4.6 (release build 40 - "quetzalcoatlus" - "e3d29c5a2e5dc1ee455e831d589ecf5e18c7d6f0") [workers = 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-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) informazioni: RPM config: proto = "https" collector = "collector.newrelic.com" proxy = "none" certfile = "/ etc / ssl /certs/ca-certificates.crt "certdir =" / etc / ssl / certs "2014-03-23 ​​05: 35: 14.928 (2008 / connettore) informazioni: ['Applicazione PHP'] 'Rapporti a: https: // rpm.newrelic.com/accounts/232928/applications/3262356 '2014-03-23 ​​06: 07: 58.768 (2008 / connettore) i nfo: ['Il mio blog 1'] 'Segnalazione a: https://rpm.newrelic.com/accounts/232928/applications/3262424'

Il Applicazione PHP è ancora lì, ma ora ha un amico che è il nostro blog WordPress. E qui è nell'interfaccia utente:

Ora riceveremo le metriche mentre navighiamo sul nostro blog, sia per il front-end che per l'interfaccia di amministrazione. Dal momento che New Relic supporta WordPress out of the box, le metriche dovrebbero essere suddivise in modo ragionevole (quando un framework non è supportato, le metriche tenderanno ad essere raggruppate insieme).

Aggiornamento di Agent & Daemon

New Relic è un software complesso ed è bello tenerlo aggiornato man mano che i bug vengono sistemati regolarmente e vengono aggiunte nuove funzionalità. Dal momento che abbiamo installato tutto usando apt-get, mantenere le cose aggiornate è facile. Facciamo semplicemente la stessa cosa che abbiamo fatto per installarlo:

apt-get update apt-get install newrelic-php5

Se non abbiamo installato un altro PHP sul sistema, ora dobbiamo semplicemente riavviare il nostro server e saremo aggiornati. Se c'è un nuovo PHP, potrebbe essere necessario rieseguire il newrelic-installazione copione.

C'è solo un avvertimento a tutto ciò. In determinate situazioni, è possibile che si stia eseguendo il daemon proxy New Relic separatamente dall'agente, il che significa che il riavvio del server non avvia automaticamente il daemon se non è in esecuzione (questa modalità è chiamata modalità daemon esterna). Potrebbero esserci più motivi per cui si vorrebbe farlo, ad esempio, si potrebbe desiderare che un utente diverso sia proprietario del processo daemon in modo che i registri siano visibili solo a quell'utente. In questa situazione, è necessario ricordare di riavviare il server e riavviare il daemon proxy. Se non lo fai, vedrai gli errori "mancata corrispondenza del protocollo" nei log.

Conclusione

Come puoi vedere, ottenere una nuova configurazione Relic per un'applicazione PHP è molto diverso da come viene configurato per Ruby, la tua applicazione effettiva non tiene conto del processo, mentre l'ambiente in cui viene distribuito è centrale. Fortunatamente questo significa che se stai usando qualsiasi framework PHP supportato, il processo di impostazione di New Relic è esattamente lo stesso. Oltre a WordPress, la maggior parte dei popolari framework PHP sono supportati tra cui Cake, Symphony e Laravel (versione 4 e successive). È anche possibile utilizzare New Relic con un framework non supportato, ma dovrai impegnarti seriamente per ottenere il significato delle metriche.