På grund av de stora inledande artiklarna som presenterades nyligen på Nettuts +, ser den här artikeln ut hur du kan ta New Relic till nästa nivå. Som ett resultatövervakningsverktyg är New Relic fantastiskt, men vad sägs om prestanda testning, innan du går live. Det är där JMeter kommer in för att spela. I den här handledningen ser du hur vi kan stressa vår applikation under realistisk belastning och kombinera utmatningen från JMeter och New Relic för att ge dig förtroende för programmets prestanda innan du släpper in i en produktionsmiljö.
Sponsrat innehållDetta innehåll beställdes av NewRelic och skrevs och / eller redigerades av Tuts + -laget. Vårt mål med sponsrat innehåll är att publicera relevanta och objektiva handledningar, fallstudier och inspirerande intervjuer som erbjuder genuint pedagogiskt värde till våra läsare och gör det möjligt för oss att finansiera skapandet av mer användbart innehåll.
Varför vänta tills implementeringen ser hur din ansökan ska gå mot riktigt världstrafik. Om det finns en flaskhals i din kod som försämrar användarupplevelsen, vill du verkligen att det ska gå live? Om vi kunde hitta dessa flaskhalsar tidigt, förbättra prestanda och leverera en bra applikation till våra slutanvändare första gången, och behålla det som går vidare med regelbunden benchmarking. JMeter och New Relic tillsammans kan ge dig den här perfekta prestandatestpaketet.
Innan vi kan börja använda New Relic och JMeter behöver vi en enkel app för att göra lite prestanda testning på! Så, kan vi skriva en enkel Ruby Sinatra app som har en tjänst som vi kan testa. Jag kommer inte att gå in i skapandet av denna ansökan för mycket, som du kan läsa om Sinatra i andra artiklar om Nettuts+.
Applikationen kommer att bli faked lite, så att vi kan se några intressanta resultat i linje med vad vi kan se i olika applikationer. Vi skriver en tjänst som tar ett ID, och beroende på det kommer id att returnera ett värde antingen direkt eller med en fördröjning. Detta visar oss vad som kan hända om förfrågningar hanteras snabbt eller långsamt och den effekt det har på appens övergripande prestanda, eftersom många användare gör förfrågningar.
Här är koden som definierar tjänsterna:
kräver "sinatra" kräver "puma" kräver "newrelic_rpm" -modul Exempel klass App < Sinatra::Base get '/example/:id' do |id| result = id if id == '1' result = "This is our id: #id" end if id == '2' sleep 3 result = "We waited for id: #id" end result end end end
Som du kan se är det här ett tydligt exempel, men tanken är att vi har några snabba svarstjänster och en med en liten fördröjning. Vi kan nu använda den här appen och börja skriva vår prestanda testplan i JMeter. Låt oss först få JMeter installerad på vår maskin.
Att få din ansökningsrapportering till New Relic är en mycket enkel process. New Relic stöder Ruby, Python, PHP, Java och andra plattformar, med lätt att följa guider för alla. När det gäller Ruby en Sinatra är det bokstavligen en fyra stegs process:
När du har följt dessa enkla steg bör du börja se några data som kommer till New Relic när du träffar din app med lite trafik. Du vet att det fungerar när appen är listad och blir grön.
För fullständighetens skull kommer jag bara att lista en kort översikt över huvudvisningen New Relic tillhandahåller dina applikationer. Designen på New Relic är främst att övervaka applikationer som finns i produktionsmiljöer med levande trafik. Överblickskärmen ger en översiktlig titt på aktuell status för din ansökan och hur den svarar på kundernas önskemål.
Skärmen kan brytas ned enligt följande:
JMeter är en Java-applikation som gör att du kan bygga upp testplaner som kan stressa din ansökan. Du kan ställa in allt från antalet samtidiga användare av tjänsten, till antalet begäranden som de gör en sekund. Du kan även rampa upp förfrågningarna för att se hur din app hanterar förändrad belastning, precis som det skulle kunna användas i verklig världsutbyggnad.
Som en del av denna handledning ska jag visa grunderna för att få en testplan som körs mot dina applikationer, men med en mängd plugins och dokumentation finns det gott om verktyg för att hantera vilken typ av prestandatest du kanske behöver.
Installationen är ganska enkel och här kommer vi att lista instruktioner för Mac och Linux.
På en Mac kan JMeter installeras mycket enkelt via Brew. När du har Brew prova
följande kommando:
brygginstallation jmeter
På en Linux-maskin, ladda bara ned från JMeter nedladdnings sidan. Följ sedan helt enkelt de anvisade instruktionerna.
När du har det primära JMeter-paketet måste vi också installera standarduppsättningen av plugins. Vi kommer att använda sig av ett plugin särskilt senare, därför måste vi lägga till dessa för att kunna använda det. Standard plugin-uppsättningen kan hämtas från den här länken: http://jmeter-plugins.org/downloads/file/JMeterPlugins-1.0.0.zip När du har hämtat extrakt i JMeter-paketet som finns på: "/ usr / local / Källare / jmeter / "på en Mac, och var du installerat den på Linux.
Så nu har vi JMeter installerat och vår enkla applikation, låt oss testa den här appen och se hur den fungerar. När du slår upp JMeter får du den här skärmen:
Låt oss nu ställa in basadressen för våra önskemål. Högerklicka på "Testplan" i den vänstra rutan och välj 'Add -> Config Element -> HTTP Request Default'. Vi kan nu ange vår basadress så här.
Vi kan nu lägga till antalet trådar eller "användare" av vårt system. För att göra detta högerklicka på "Testplan" igen och välj 'Add -> Threads (Users) -> Trådgrupp'. Vi kan sedan ange användarna, i det här fallet 20. Se till att du väljer alternativet Loop Count Forever, eftersom det här låter oss kontrollera tiden och antalet förfrågningar via ett plugin senare.
När vi har trådgruppen kan vi nu definiera de önskemål vi vill göra till vår ansökan att vi ska gå på prestanda test. För att göra detta lägger vi till "HTTP-förfrågan" till vår "Testplan". Detta kan hittas genom att högerklicka på "Trådgrupp" och välja "Lägg till -> Sampler -> HTTP-begäran". Vi kan sedan definiera begäran att göra i rutan enligt nedan.
Du kan se hur vi inte behöver definiera basadressen, som vi gjorde det tidigare och istället behöver bara lägga till sökvägen för begäran. I det här fallet är sökvägen till vårt exempel / 1-svar. Du kommer också att märka att jag har gått vidare och lagt till de andra två förfrågningarna tillsammans med resultat- och diagramrutan, som vi kommer att använda för att analysera resultaten av testen. Vid det här laget bör du hänga med att lägga till element och de kan lätt hittas i menyn från deras namn. De viktigaste två av intresse är "Throughput Shaping Timer" och "Composite Graph".
Shaping Timer gör att vi kan kartlägga hur vi vill att ansökningarna ska göras till vår ansökan över tiden. Till exempel kan vi konfigurera en förfrågan per sekund i 60 sekunder, och sedan upp till fem önskar en sekund i 60 sekunder och se vilken effekt det har på våra svarstider. Låt oss ta en titt på hur vi konfigurerar det i rutan Shaping Timer.
Så, genom att gå in och lägga till varje rad, kan du definiera hur mycket begäran ska göras och hur länge det ska göras för. Vi kan sedan se våra resultat med hjälp av "Composite Graph", som visar de transaktioner som gjorts per sekund mot svarstiden för våra önskemål. Detta kräver minimal konfiguration, helt enkelt lägger du till de två graferna vi kommer att kombinera, och sedan lägger du in i graferna som vi behöver så här i inställningarna för kompositgrafen:
Det är allt! Vi kan nu köra vår testplan och börja se några resultat. Hit spela mot toppen av skärmen och klicka sedan på kompositgrafen. Det kommer att börja slå ut resultaten när de kommer in och du kan få en bild av hur din ansökan svarar. Låt oss titta på våra resultat.
Vi kan tydligt se hoppet i förfrågningar på en minut har en ganska stor inverkan på vår ansökan. För första minuten är förfrågningarna stabila vid en sekund och ger svarstider på cirka två / tre ms. Men när vi ökar till fem ökar svarstiderna något och slår fem och fem m / s. Självklart är det väldigt snabba svarstiderna i den verkliga världen, men vi visar bara hur vi kan öka belastningen och se påverkan, om någon kommer det att ha.
Låt oss jämföra dessa resultat med den tjänst som har en fördröjning om tre sekunder. Hur kommer det att hantera ökningen av belastningen? För att växla till exempel två, högerklicka på exempel ett och välj växla. Det här inaktiverar den förfrågan och gör sedan en växling på exempel två och det aktiverar det. Var noga med att klicka på "Rensa alla" (Sweeping brush) ikonen längst upp för att rensa resultaten från sista loppet och sedan slå på spel.
Även med den tre sekunders förseningen lyckades servern förfrågningarna ganska bra och vi ser detsamma i vägen för resultaten för denna tjänst. Bara några millisekunder ökar när förfrågningarna ökar. Med en så enkel service, kan detta förväntas.
Den verkliga kraften kommer nu med att kombinera dessa data med New Relic. Vi kan till exempel ställa JMeter att springa i en halvtimme med olika belastningsvariationer och sedan använda New Relic för att analysera resultaten och använda dess nedrullningsfunktionalitet för att leta efter flaskhalsar i applikationen. Dessa kan sedan finjusteras, vilket ökar din prestanda innan de levereras till dina kunder.
Återigen kommer jag inte att gå in i upprättandet av New Relic, eftersom det här ingår i andra senaste artiklar om Nettuts + (Se här). Men när din ansökan är ansluten är det helt enkelt ett fall att generera lasten genom JMeter och logga in i New Relic för att se resultaten. För den här körningen har jag ställt in Shaping Timer för att köra vår belastning i 30 minuter och uppmanar begäran från fem till 10 och sedan 15 per sekund. Detta borde ge oss en rimlig trafik att titta på i New Relic.
När JMeter-testet har kört kan vi ta en titt på New Relic som vi nu kan se har stat på trafiken som följer genom appen.
Detta visar tydligt att de begärda kraven har stigit, vid högst 400 bitar per minut (RPM) och svarstiderna är stabila på tre sekunder. Vi kan dyka djupare in i statistiken och titta på den transaktion vi gör. Om vi klickar igenom i webbtransaktionsvisningen kan vi se analysen New Relic har gjort på bara den här delen av programmet. Om koden som hanterade begäran hade fler lager till den, till exempel metoder för att ringa andra system för att få data innan de presenterades tillbaka till användaren, skulle vi se mer av en uppdelning.
Till exempel, till vänster visar det att vi tillbringade 100% av begäran tid, i det samtalet. Om vi hade flera steg, till exempel ett samtal till en databas, kan vi se en hög andel där och vi skulle veta att optimera frågan till databasen för att öka prestanda.
New Relic ger också en bra rapporteringsvy på dina applikationsdata, kallad skalbarhet. Denna rapport kan vara mycket användbar för att övervaka dina applikationer förmåga att hantera ökad belastning. Diagrammet visar din svarstid mot förfrågningarna per minut, och du kan tydligt se om det finns någon försämring i svartiden när de ökar. Detta är ett bra verktyg och en man bör ofta referera till i prestandatestning så här, men också i din prestandaövervakning av din produktionsapplikation.
I vårt exempel nedan är det uppenbart att applikationen kan upprätthålla en tre sekunders responstid, även om RPM ökar.
Ny relik ger också en annan uppfattning, den av Kapaciteten. Detta gör det möjligt för oss att se hur mycket av de resurser som vår ansökan använder sig av. Det anger för utvecklaren huruvida antalet instanser som serverar din ansökan är tillräckligt för att hantera den typ av belastning du får. Detta är viktigt för att du inte ska köra nära kapacitet och ha förmåga att hantera eventuella spikar i trafik som kan uppstå utanför ditt normala trafikflöde. New Relic sammanfattar sidan väl, bredvid analysen av vår applikation här, vilket vi kan se är rättvis bra även i denna enda instans.
Syftet med denna handledning var att visa dig hur du snabbt installerar JMeter testplaner för din ansökan, så att du kan testa körningens prestanda innan du levererar till dina kunder. Detta tillvägagångssätt kan användas i nya projekt, vilket säkerställer att applikationen du ska leverera är redo för verklig världstrafik. Den kan också användas på äldre applikationer, vilket ger dig en baslinje prestandaindikator så att när du gör ändringar framåt kan du se om din applikations prestanda förbättras eller minskar.
Genom att utnyttja de stora verktygen som tillhandahålls av New Relic kan du både övervaka din ansökan online i realtid, men också ta sin verktygssats och tillämpa den på din egen offlineanalys. Detta ger dig, utvecklaren, förtroende för din produkt både när den utvecklas och när den släpps ut i naturen.