We hebben eerder besproken hoe je een nieuwe relic voor een Rails-app kunt instellen en hebben ook veel tijd besteed aan het gebruik van de nieuwe relic-gebruikersinterface. En hoewel de gebruikersinterface erg vergelijkbaar is, ongeacht de taal en het framework dat u gebruikt, kan het instellen van nieuwe relikwieën radicaal anders zijn. Vandaag zullen we bekijken hoe een PHP-applicatie te monitoren met behulp van New Relic. Meer in het bijzonder zullen we een eenvoudige WordPress-installatie opzetten en wat prestatiegegevens hierover krijgen in de New Relic-dashboards.
Het krijgen van nieuwe relikwieën opgezet voor Ruby is zeer milieuagnostisch. We voegen eenvoudig het gem van de agent toe aan onze applicatie, ongeacht hoe we onze app gebruiken (Passenger + Apache, Thin + Nginx etc.). De edelsteen zal de rest van het werk doen om ervoor te zorgen dat we onze prestatiestatistieken krijgen. Met de PHP-versie van de agent is de omgeving een stuk belangrijker, omdat de agent is geïnstalleerd en leeft in de box waarin de toepassing wordt geïmplementeerd, in plaats van onderdeel te zijn van een bepaalde app.
Laten we een sandbox opzetten waar we mee kunnen spelen (met behulp van een EC2-instantie) en een eenvoudige installatie van WordPress installeren..
We zullen hier niet te gedetailleerd ingaan, omdat de meeste dingen die we moeten doen elders goed gedocumenteerd zijn. Maar hier is een basisoverzicht.
We moeten een EC2-instance starten met Ubuntu Server 12.04 LTS erop. Als u geen EC2-instantie wilt instellen, kunt u in plaats daarvan een virtuele machine maken met behulp van VirtualBox (of uw VM-hulpmiddel naar keuze). Als u een EC2-instantie opzet, moet u het volgende onthouden:
Afgezien daarvan moet al het andere redelijk eenvoudig zijn en moet je eindigen met een actieve instantie (of virtuele machine) die klaar is voor de volgende stap.
We moeten nu Apache, PHP en MySQL installeren. Met Ubuntu Server zou het eenvoudig moeten zijn om de volgende opdrachten uit te voeren:
sudo apt-get installeren tasksel sudo tasksel install lamp-server
U moet LAMP selecteren in de gebruikersinterface en u moet ook uw MySQL-wachtwoord invoeren als u hierom wordt gevraagd (ik laat het gewoon leeg omdat we er niet om geven dat deze box op enigerlei wijze beveiligd is). Zodra de installatie is voltooid, kunnen we een paar opdrachten uitvoeren om ervoor te zorgen dat alles zonder problemen wordt geïnstalleerd.
Controleer eerst of Apache is geïnstalleerd:
ubuntu @ ip-10-145-246-196: ~ $ apache2 -V Serverversie: Apache / 2.2.22 (Ubuntu) Server gebouwd: 12 juli 2013 13:37:10 Servermodule Magisch nummer: 20051115: 30 Server geladen: APR 1.4.6, APR-Util 1.3.12 Gecompileerd met: APR 1.4.6, APR-Util 1.3.12 Architectuur: 64-bits server MPM: Prefork-threaded: geen gevorkte: ja (variabel aantal processen) ...
Controleer ten tweede of we PHP hebben:
ubuntu @ ip-10-145-246-196: ~ $ php -i phpinfo () PHP-versie => 5.3.10-1ubuntu3.10 Systeem => Linux ip-10-145-246-196 3.2.0-58- virtueel # 88-Ubuntu SMP di 3 dec 17:58:13 UTC 2013 x86_64 builddatum => 28 februari 2014 23:13:16 Server API => opdrachtregelinterface virtuele map ondersteuning => uitgeschakeld configuratiebestand (php.ini) pad => / etc / php5 / cli Geladen configuratiebestand => /etc/php5/cli/php.ini...
En controleer dan of we MySQL hebben:
ubuntu @ ip-10-145-246-196: ~ $ mysql --version mysql Ver 14.14 Distrib 5.5.35, voor debian-linux-gnu (x86_64) met behulp van readline 6.2
We moeten mogelijk ook controleren of PHP daadwerkelijk is ingeschakeld in onze Apache-configuratie, maar sinds we zijn geïnstalleerd lamp-server
gebruik makend van tasksel
we kunnen er vrij zeker van zijn dat het zo is (en we kunnen altijd snel doen phpinfo ()
script als we het echt willen checken).
We kunnen nu WordPress installeren. Voordat we het daadwerkelijk downloaden, moeten we daarvoor een database instellen. We kunnen gewoon de instructies van de Codex volgen:
ubuntu @ ip-10-145-246-196: ~ $ mysql Welkom bij de MySQL-monitor. Opdrachten eindigen met; of \ g. Uw MySQL-verbindings-ID is 103 Serverversie: 5.5.35-0ubuntu0.12.04.2 (Ubuntu) Type 'help;' of '\ h' voor hulp. Typ '\ c' om de huidige invoerinstructie te wissen. mysql> CREATE DATABASE myblog1; Query OK, 1 rij beïnvloed (0,00 sec) mysql> TOESTAAN ALLE PRIVILEGES OP myblog1. * NAAR "myblog1_user" @ "localhost" IDENTIFICEERD DOOR "abc123"; Query OK, 0 rijen beïnvloed (0,00 sec) mysql> VOORDRAGEN VOOR FLUSH; Query OK, 0 rijen beïnvloed (0,01 sec) mysql> EXIT Bye
Ik ga onze nieuwe installatie bellen myblog1
(dus de database ervoor wordt ook genoemd myblog1
). We moeten nu de volgende opdrachten uitvoeren om onze blog te laten lopen (vergeet dit niet) sudo
wanneer nodig):
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
Vul nu uw databasenaam, gebruikersnaam en wachtwoord in het configuratiebestand in (de hostnaam is localhost
welke standaard aanwezig is). Op dit punt zou je in staat moeten zijn om naar je browser te gaan, de juiste URL aan te raken (in mijn geval http://ec2-107-20-122-116.compute-1.amazonaws.com/myblog1
) en WordPress doet zijn ding (het kan geen kwaad om Apache opnieuw te starten voordat je dit doet sudo apache2 service opnieuw opstarten
).
Onze sandbox is nu voltooid en we kunnen aan de slag met het installeren van New Relic.
Zoals ik eerder al zei, bevindt de PHP New Relic-agent zich in de box, daarom is het logisch dat u deze kunt installeren met behulp van de pakketbeheerder van het besturingssysteem (apt-get
omdat we Ubuntu gebruiken). Het eerste dat u moet doen, is het importeren van de New Relic-gegevensopslagsleutel:
wget -O - https://download.newrelic.com/548C16BF.gpg | sudo apt-key toevoegen -
Nu voegen we de New Relic-repository zelf toe aan het systeem:
sudo sh -c 'echo "deb http://apt.newrelic.com/debian/ newrelic non-free"> /etc/apt/sources.list.d/newrelic.list'
Op dit punt kunnen we standaard gebruiken geneigd
commando's om de agent te installeren:
sudo apt-get update sudo apt-get installeer newrelic-php5
Hiermee haalt u het PHP-agentpakket op uit de repository en plaatst u het agentsinstallatie-script op het systeem. Het script wordt genoemd newrelic-install
en het leeft erin / Usr / bin
, dus je zou overal vandaan moeten kunnen rennen. Het script heeft ook een enigszins jammerlijke naam, omdat je het kunt gebruiken om zowel New Relic van je systeem te installeren en te de-installeren. Om New Relic te installeren, moeten we het volgende uitvoeren:
newrelic-install installeren
Het script is interactief en zal u vragen uw licentiesleutel in te voeren. U kunt dit vinden door op te drukken grote rode knop wanneer je een nieuwe PHP-applicatie opzet binnen de New Relic UI.
Als je meer dan één PHP-installatie op je systeem hebt, zal het je ook vragen om te kiezen voor welke installatie New Relic moet worden geïnstalleerd (je kunt een willekeurig aantal installaties kiezen, waaronder alle). Als je maar één PHP op je systeem hebt, zal het script die alleen gebruiken. Het is vermeldenswaard dat als uw versie van PHP ouder is dan 5.2, het script wordt geblokkeerd omdat oudere versies niet worden ondersteund.
Als alles goed gaat, ziet u het volgende bericht:
Nieuwe Relic is nu op uw systeem geïnstalleerd. Gefeliciteerd!
Het script zal dan wat extra informatie voor u afdrukken, inclusief de locatie van de logbestanden:
/var/log/newrelic/newrelic-daemon.log /var/log/newrelic/php_agent.log
Evenals het feit dat u uw webserver opnieuw moet opstarten (en PHP-FPM als u deze gebruikt).
Als je je server herstart en het daemon-logbestand volgt, zou je zoiets als dit moeten zien:
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) waarschuwing: huidig bestandslimiet van 1024 is te laag - probeert deze te verhogen 2014-03-23 05: 30: 41.064 (2008 / main) info: verhoogde bestandslimiet tot 2048 2014-03-23 05: 30: 41.064 (2008 / main) info : 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-virtueel" mach = "x86_64" ver = "# 88-Ubuntu SMP di 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" 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 / connector) info: ['PHP Application'] 'Rapportage aan: https: // rpm.newrelic.com/accounts/232928/applications/3262356'
Iets genaamd PHP-toepassing rapporteert. Dit is enigszins generiek en lijkt totaal niet op ons WordPress-blog, maar het is een goed begin. Wat dit betekent is dat alle applicaties op uw webserver worden uitgevoerd en rapporteren als dezelfde applicatie aan New Relic. Deze applicatie heeft de standaardnaam van PHP-toepassing.
In ons geval, omdat we maar één applicatie draaien (onze WordPress-installatie), kunnen we echt in de New Relic UI springen en redelijke statistieken voor ons blog krijgen. Maar natuurlijk willen we onze blog een betere naam geven en voor het geval dat onze server meer dan één applicatie moet bedienen. We willen ook zien hoe apps van elkaar kunnen worden gescheiden. We zullen dit binnenkort bekijken, maar voordat we dit doen, laten we eens kijken wat eigenlijk een PHP-agent is.
De nieuwe Relic PHP-agent bestaat uit twee delen. De eerste is een PHP-extensie, het is een gedeeld object met de naam newrelic.so
. Als we naar het agentconfiguratiebestand kijken:
/etc/php5/cli/conf.d/newrelic.ini
We zien het bovenaan bovenaan staan:
; Dit bestand bevat de verschillende instellingen voor de New Relic PHP-agent. Daar; zijn veel opties, die allemaal in detail worden beschreven op de volgende URL:; https://newrelic.com/docs/php/php-agent-phpini-settings; ; Als u een volledig pad naar de extensie gebruikt, isoleert u zichzelf van de; uitbreiding directory wijzigen als u PHP-installaties of -versies wijzigt. ; Als u geen absoluut pad gebruikt, moet het bestand worden geïnstalleerd in de; uitbreidingsdirectory actieve configuratie. extension = "newrelic.so"
Dit is het ding dat de statistieken daadwerkelijk van je apps zal verzamelen, maar het zal de statistieken niet naar New Relic sturen, dit is de taak van de proxy daemon.
De agent-daemon is een proxy tussen de PHP-extensie en de New Relic-servers. In wezen geeft de PHP-extensie de gegevens die het verzamelt aan de daemon en de daemon zal dingen als batch-up doen en erachter komen wanneer het naar de server moet worden verzonden. U moet er altijd voor zorgen dat de daemon actief is, anders worden er geen gegevens verzonden naar New Relic. Gelukkig, standaard, wanneer je je server herstart, zal de PHP extensie proberen om te detecteren of de daemon draait en zal het opstarten, als het niet werkt.
Een actieve proxy-daemon heeft twee processen. Een daarvan is een monitorproces en de tweede is de werknemer. De werknemer doet eigenlijk het werk om te communiceren met de New Relic-servers, het bewakingsproces kijkt eenvoudigweg naar de werknemer en als de werknemer sterft, om welke reden dan ook, zal hij een nieuwe spawnen. Je kunt de daemon stoppen door te draaien:
/etc/init.d/newrelic-daemon stop
Die een shutdown-signaal naar het monitoringproces stuurt. Het bewakingsproces zal dan het werkproces doden en zichzelf afsluiten. Als je de daemon ooit handmatig moet doden, zorg dan dat je eerst het monitoringproces beëindigt voordat je de medewerker doodt (anders wordt een nieuwe werknemer geboren - uiteraard).
We hebben het configuratiebestand van de New Relic PHP-agent al gezien /etc/php5/cli/conf.d/newrelic.ini
. Zowel de agent als de daemon worden geconfigureerd met behulp van dit bestand.
Dit bestand is zeer goed gedocumenteerd en alle opties en hun standaardwaarden worden weergegeven. Laten we het hebben over de indeling van dit bestand. De New Relic Ruby-agent kan worden geconfigureerd via YAML, een bekend formaat. De PHP-agent is gewoon een tekstbestand, maar we hebben een beetje structuur nodig. Elke variabele in het bestand heeft een van de volgende vier typen (String, Boolean, Number, Duration). Tekenreeks en getal zijn voor zichzelf verklarende, Booleaanse waarden kunnen zijn waar
, op of 1
om waarheidsgetrouwheid aan te geven vals
, uit of 0
om valsheid aan te duiden. Durations zijn strings met een bepaald formaat, bijvoorbeeld: "1w3d23h10m"
geeft een week, drie dagen, 23 uur en tien minuten aan. De waarden voor duur kunnen zo granulair zijn als microseconden.
Alle variabelen in het bestand hebben ook een 'bereik'. Er zijn drie mogelijke scopes: SYSTEM, PERDIR en SCRIPT. Variabelen met SYSTEM-scope kunnen alleen worden ingesteld in het algemene configuratiebestand. Variabelen met een PERDIR-scope kunnen worden ingesteld in het algemene configuratiebestand en kunnen ook per map worden overschreven. Variabelen met scriptbereik kunnen globaal zijn, per map en kunnen ook programmatisch worden overschreven.
De meest voorkomende configuratievariabele is bijvoorbeeld 'Newrelic.appname'
. Deze variabele is een String-type, het heeft een standaardwaarde van PHP-toepassing (nu weten we waarom we die waarde in het logbestand zagen nadat we de agent hadden geïnstalleerd en de server opnieuw hadden opgestart). Het bereik van deze variabele is PERDIR, wat ons een idee geeft over hoe de applicatienaam voor ons WordPress-blog moet worden overschreven.
Er zijn veel andere variabelen die dingen besturen zoals de locatie van de logbestanden, ongeacht of sql-query's worden geregistreerd, het logniveau van de loguitvoer en dus. Ik moedig je aan om de newrelic.ini
bestand om vertrouwd te raken met de opties.
We willen een aparte app zien in de New Relic UI voor ons WordPress-blog, dus laten we eens kijken hoe we dat kunnen doen. Uw opties voor de configuratie per directory zijn verschillend, afhankelijk van uw stack. Als u PHP-FPM gebruikt, zijn de stappen anders dan wanneer u Nginx gebruikt. In ons geval hebben we twee opties, omdat we een rechte Apache hebben.
Ten eerste kunnen we een invoegen als we een virtuele host hebben voor onze app IfModule
blokkeren in ons virtuele hostblok en de naam van de app daar wijzigen:
...php_value newrelic.appname "Mijn blog 1" ...
Maar ik heb geen speciale virtuele host alleen voor de blog, dus de andere optie is om een .htaccess
het dossier. Zorg ervoor dat je het daadwerkelijk toestaat .htaccess
bestanden door het volgende in uw virtuele hoofdhost te dumpen:
Opties Indices FollowSymLinks MultiViews AllowOverride Alle bestellingen toestaan, weigeren toestaan van iedereen
We kunnen nu een .htaccess
bestand in de bovenste map van onze blog en plaats er het volgende in:
php_value newrelic.appname "Mijn blog 1"
Het formaat is precies hetzelfde als wanneer ik het in de IfModule
blok. Nu moeten we gewoon onze server stuiteren. Als we de daemonlogboeken na het opnieuw opstarten van de server plaatsen, zien we het volgende:
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) waarschuwing: huidig bestandslimiet van 1024 is te laag - probeert deze te verhogen 2014-03-23 05: 30: 41.064 (2008 / main) info: verhoogde bestandslimiet tot 2048 2014-03-23 05: 30: 41.064 (2008 / main) info : 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-virtueel" mach = "x86_64" ver = "# 88-Ubuntu SMP di 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" 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 / connector) info: ['PHP Application'] 'Rapportage aan: https: // rpm.newrelic.com/accounts/232928/applications/3262356 '2014-03-23 06: 07: 58.768 (2008 / connector) i nfo: ['Mijn blog 1'] 'Rapportage aan: https://rpm.newrelic.com/accounts/232928/applications/3262424'
De PHP-toepassing is er nog steeds, maar nu heeft het een vriend die onze WordPress-blog is. En hier is het in de gebruikersinterface:
We zullen nu statistieken ontvangen terwijl we door onze blog browsen, zowel voor de front-end- als de admin-interface. Aangezien New Relic WordPress out-of-the-box ondersteunt, moeten de statistieken op een verstandige manier worden opgedeeld (wanneer een framework niet wordt ondersteund, zullen de statistieken meestal worden samengevoegd).
New Relic is een complex stuk software en het is goed om het up-to-date te houden, omdat bugs regelmatig worden opgelost en nieuwe functies worden toegevoegd. Omdat we alles hebben geïnstalleerd met behulp van apt-get,
dingen up-to-date houden is eenvoudig. We doen gewoon hetzelfde als wat we deden om het te installeren:
apt-get update apt-get install newrelic-php5
Als we nog geen PHP op het systeem hebben geïnstalleerd, moeten we nu gewoon onze server opnieuw opstarten en zijn we up-to-date. Als er een nieuwe PHP is, moeten we mogelijk de newrelic-install
script.
Er is slechts één voorbehoud bij dit alles. In bepaalde situaties kunt u de New Relic-proxydaemon los van de agent uitvoeren, wat betekent dat het opnieuw opstarten van de server de daemon niet automatisch start als er geen wordt uitgevoerd (dit wordt de externe daemon-modus genoemd). Er kunnen meerdere redenen zijn waarom u dit zou willen doen. U zou bijvoorbeeld willen dat een andere gebruiker eigenaar is van het daemonproces, zodat de logbestanden alleen zichtbaar zijn voor die gebruiker. In deze situatie moet u onthouden dat beide de server opnieuw moeten opstarten en de proxy-daemon opnieuw moeten opstarten. Als dat niet het geval is, ziet u fouten in de protocolmismatch in de logboeken.
Zoals u ziet, verschilt het ophalen van New Relic voor een PHP-toepassing heel erg van het instellen ervan voor Ruby, uw daadwerkelijke toepassing speelt zelfs geen rol in het proces, terwijl de omgeving waarin u implementeert, centraal staat. Gelukkig betekent dit dat als je een ondersteund PHP-framework gebruikt, het proces voor het instellen van New Relic precies hetzelfde is. Naast WordPress worden de meeste populaire PHP-frameworks ondersteund, waaronder Cake, Symphony en Laravel (versie 4 en hoger). Het is ook mogelijk om New Relic te gebruiken met een niet-ondersteund framework, maar je moet je er serieus voor inzetten om de meetwaarden logisch te krijgen.