
SRE- ja DevOps-inseneride seas ei ĂŒllata peaaegu kedagi, kui klient (vĂ”i monitooringusĂŒsteem) teatab, et "kĂ”ik on kadunud": veebileht ei tööta, maksed ei lĂ€he lĂ€bi, elu on tĂŒhi... Kuigi soov aidata on suur, on see sageli vĂ€ga keeruline ilma lihtsa ja arusaadava tööriistata. Sageli on probleem peidus rakenduse enda koodis â seda tuleb lihtsalt lokaliseerida.
Nii rÔÔmus kui kurb...
On nii kujunenud, et me oleme juba ammu ja tĂ”eliselt armastanud New Relic'ut. See on olnud ja on endiselt suurepĂ€rane tööriist rakenduse jĂ”udluse monitooringuks ning vĂ”imaldab mikroteenuste arhitektuuri instrumenteerimist (oma agendi abil) ja palju muud. Ja kĂ”ik oleks vĂ”inud olla suurepĂ€rane, kui mitte teenuse hinnastrateegia muudatused: selle hind on tĂ”usnud ĂŒle 3 korra. Lisaks on alates eelmise aasta eest proovikonto saamiseks vajalik suhtlemine isikliku juhiga, mis muudab toote potentsiaalsele kliendile esitlemise keerulisemaks.
Tavaline olukord: New Relic ei ole "pikaajaliselt" vajalik, seda meenutatakse ainult siis, kui probleemid on alanud. Kuid tasuda tuleb siiski regulaarselt (140 USD serveri kohta kuus), ja automaatselt skaaleerivas pilvinfrastruktuuris kogunevad summad ĂŒsna suured. Kuigi on ka vĂ”imalus "Pay-As-You-Go", kuid New Relic'i aktiveerimiseks tuleb rakendus taaskĂ€ivitada, mis vĂ”ib viia probleemi kadumiseni, mille tĂ”ttu kĂ”ik algas. Hiljuti on New Relic tutvustanud uut hinnakava - , - mis esmapilgul nĂ€eb vĂ€lja mĂ”istlik alternatiiv Professional ... kuid detailide ĂŒlevaatamisel selgus, et osa olulisi funktsioone puudub (eriti puuduvad seal Key Transactions, Cross Application Tracing, Distributed Tracing).
SeelÀbi hakkasime mÔtlema odavama alternatiivi otsimisele ning meie valik langes kahele teenusele, Datadog ja Atatus. Miks just need?
Konkurentidest
Tuleb kohe mĂ€rkida, et turul on ka teisi lahendusi. Me isegi kaalume Open Source variante, kuid mitte iga kliendi jaoks ei ole vaba ressursse self-hosted lahenduste paigutamiseks ... â lisaks vajavad need tĂ€iendavat hooldust. Meie valitud paar osutus meie vajadustele kĂ”ige lĂ€hedasemaks:
- Sisseehtinud ja arenenud PHP rakenduste tugi (meie klientide tehnoloogiad on vÀga erinevad, kuid see on ilmne liider alternatiivi otsingul New Relic'ile);
- taskukohane hind (alla 100 USD kuus hostimise eest);
- automaatne instrumenteerimine;
- integreerimine Kubernetesega;
- sarnasus New Relic'i liidesele â mĂ€rkimisvÀÀrne pluss (sest meie insenerid on sellega harjunud).
SeetÔttu kÔrvaldati esialgsel valikul mitmed teised populaarsed lahendused, sealhulgas:
- Tideways, AppDynamics ja Dynatrace â hinna tĂ”ttu;
- Stackify â Venemaal blokeeritud ja nĂ€itab liiga vĂ€he andmeid.
JĂ€rgmine artikkel on ĂŒles ehitatud nii, et esmalt tutvustatakse lĂŒhidalt arutluse all olevaid lahendusi, seejĂ€rel rÀÀgin meie tĂŒĂŒpilisest koostööst New Relic'iga ja kogemustest / muljetest sarnaste toimingute tegemisel teistes teenustes.
Valitud konkurentide esitlus

KĂŒsimus , ilmselt on igaĂŒks kuulnud? See teenus alustas oma arengut ĂŒle 10 aasta tagasi, 2008. aastal. Me oleme seda aktiivselt kasutanud alates 2012. aastast ja pole tĂ”eliselt suures hulkade rakenduste integreerimisega probleeme kogenud, sealhulgas PHP, Ruby ja Python keeles, samuti on meil olnud kogemusi C# ja Go integreerimisega. Teenuse autoritel on lahendused rakenduste, infrastruktuuri monitoorimiseks, mikroteenusinfrastruktuuride jĂ€lgimiseks, loodud mugavad rakendused kasutajaseadmetele ja palju muud.
Kuid New Relic'i agent töötab omandiÔiguse alusel, tal puudub OpenTracing tugi. TÀiustatud instrumenteerimiseks on vajalikud muudatused spetsiaalselt New Relic'i jaoks. LÔpuks on Kubernetes'e tugi hetkel katsefaasis.

Arengut alustanud 2010. aastal nĂ€ib Kubernetes keskkondades olevat oluliselt huvitavam kui New Relic. EelkĂ”ige toetab see integreerimist NGINX Ingress'iga, logide kogumist, protokolle statsd ja OpenTracing, mis vĂ”imaldab jĂ€lgida kasutaja pĂ€ringut ĂŒhenduse loomisest kuni töö lĂ”petamiseni, samuti leida selle pĂ€ringuga seotud logisid (nii veebiserveri poolel kui ka tarbijate poolel).
Datadog'i kasutamisel kohtasime probleemi, et see mĂ”nikord ehitas vale mikroteenuste kaardi ja teisi tehnilisi puudusi. NĂ€iteks tuvastas see vale teenuse tĂŒĂŒbi (vĂ”ttis Django teenusena, mis tegeleb vahemĂ€lu haldamisega) ning pĂ”hjustas 500 viga PHP rakenduses, mis kasutas populaarset teeki Predis.

â kĂ”ige noorem tööriist; teenus kĂ€ivitati 2014. aastal. Selle turunduseelarve jĂ€tab oluliselt alla loetletud konkurentide puhul, mainimised esinevad oluliselt harvem. Siiski on tööriist iseenesest vĂ€ga sarnane New Relic'ule, mitte ainult funktsioonide (APM, brauseri jĂ€lgimine jne) poolest, vaid ka vĂ€limuse poolest.
Oluliseks puuduseks on toetuse pakkumine vaid Node.js ja PHP-le. Teisest kĂŒljest, see on realiseeritud mĂ€rkimisvÀÀrselt paremini kui Datadog'i puhul. Erinevalt viimasest ei nĂ”ua Atatus rakendustelt tĂ€iendavate markeeringute lisamist koodis.
Kuidas me töötame New Relic'uga
NĂŒĂŒd vaatame, kuidas me tavaliselt New Relic'ut kasutame. Oletame, et meil on probleem, mis vajab lahendamist:

Diagrammil on kergesti mĂ€rgatav piik â analĂŒĂŒsime seda. New Relic'is on veebirakenduse jaoks kohe valitud veebitehingud, jĂ”udluse diagrammil on nĂ€idatud kĂ”ik komponendid, sealhulgas error-rate, request-rate... Mis on kĂ”ige olulisem â otse nendelt paneelidelt saab liikuda erinevate rakenduse osade vahel (nĂ€iteks klikkimine MySQL viib andmebaaside sektsiooni).
Kuna antud nÀites nÀeme aktiivsuse piiki PHP, klikki selle diagrammi peale ja liikuge automaatselt Tehingud:

Tehingute nimekiri, mis sisuliselt on MVC mudeli kontrollerid, on juba sorteeritud jÀrgi Enim aega nÔudvad, mis on vÀga mugav: me nÀeme kohe, millega rakendus tegeleb. Siin on ka nÀidatud pikaajaliste pÀringute nÀidised, mis kogutakse automaatselt New Relic'i poolt. Sortimise vahetamisel on lihtne leida:
- rakenduse kÔige koormatud kontroller;
- kĂ”ige sagedamini kĂŒsitud kontroller;
- kÔige aeglasem kontrolleritest.
Lisaks on vÔimalik iga tehingu avada ja nÀha, millega rakendus tegi koodi tÀitmise ajal:

LĂ”puks salvestatakse rakenduses nĂ€idised pikaajaliste pĂ€ringute jĂ€lgedest (mis kestavad ĂŒle 2 sekundi). Siin on paneel pika tehingu jaoks:

NĂ€htav on, et palju aega kulub kahele meetodile, nĂ€idatakse ka aega, millal pĂ€ring tĂ€ideti, selle URI ja domeeni. VĂ€ga sageli aitab see leida pĂ€ringu logidest. Liikudes JĂ€lgimise ĂŒksikasjad, saab vaadata, kust need meetodid kutsutakse:

Ja Andmebaasi pĂ€ringud â hinnata andmebaasi pĂ€ringuid, mis toimusid rakenduse töötamise ajal:

Relvastades neid teadmisi, saame hinnata rakenduse aeglustumise pÔhjust ja koostada koos arendajaga strateegia probleemi lahendamiseks. Tegelikult ei paku New Relic alati selget pilti, kuid see aitab valida uurimise suuna:
- pikalt
PDO::Constructviis meid kummalise pgpoll'i toimimise juurde; - ebastabiilsus ajas
Memcache::Gettöötas vĂ€lja vale virtuaalmasina konfiguratsiooni; - kahtlaselt pikenenud mallide töötlemise aeg viis 500 avatariga objektihoidlasse kontrolliva sisemise tsĂŒklini;
- ja nii edasiâŠ
Oht, et koodi asemel pÔhilisel ekraanil tÔuseb midagi, mis on seotud vÀlise andmehoidla - olgu see Redis vÔi PostgreSQL, - peitub kÔikides vahekaartides Andmebaasid.

Saate valida konkreetse andmebaasi uurimiseks ja sorteerida pÀringuid - sarnaselt sellele, kuidas seda tehakse Transactions. Ja liikudes pÀringu vahekaardile, saate nÀha, kui sageli see pÀring esineb iga rakenduse kontrolleris ja hinnata, kui tihti seda kutsutakse. See on vÀga mugav:

Sarnaseid andmeid sisaldab vahekaart External Services, mis peidab endas vĂ€liste HTTP-teenuste pĂ€ringud, nagu objektide hoidla kĂ”ned, sĂŒndmuste saatmine sentry'le vĂ”i midagi sarnast. Oma sisu poolest on see vahekaart tĂ€ielikult analoogne Databases:

Konkurendid: vÔimalused ja muljed
NĂŒĂŒd on kĂ”ige huvitavam - vĂ”rreldame New Relici vĂ”imalusi selle, mida pakuvad konkurendid. Kahjuks ei Ă”nnestunud meil testida kĂ”iki kolme tööriista ĂŒhe tööversiooni production rakenduses. Sellegipoolest ĂŒritasime vĂ”rrelda vĂ”imalikult identsed olukorrad/konfiguratsioonid.
1. Datadog
Datadog tervitab meid teenuste seinaga:

Ta pĂŒĂŒab rakendused jagada komponentide/mikroteenuste vahel, seega nĂ€eme antud nĂ€ites Django rakenduse korral 2 ĂŒhendust PostgreSQL-iga (defaultdb ja postgres), samuti Celery, Redis. Datadogiga töötamine nĂ”uab teilt minimaalset arusaamist MVC pĂ”himĂ”tetest: on vajalik mĂ”ista, kuhu kasutajate pĂ€ringud tegelikult jĂ”uavad. Tavaline abi on teenuste kaart:

Muide, midagi sarnast on ka New Relicis:

⊠ja nende kaart, minu arvates, on lihtsam ja arusaadavam: see kajastab mitte ĂŒhe rakenduse komponente (mis vĂ”iks muuta selle liialt detailsiseks, nagu Datadogi puhul), vaid ainult konkreetseid teenuseid vĂ”i mikroteenuseid.
Naaseme Datadogi juurde: teenuste kaardilt on nÀha, et kasutajate pÀringud jÔuavad Django kaudu. LÀheme edasi Django teenusesse ja lÔpuks nÀeme seda, mida ootasime:

Kahjuks pole siin vaikimisi graafikut Veebitehingu aeg, mis on analoogne sellele, mida nĂ€eme New Relici pĂ”himenĂŒĂŒs. Siiski saab selle seadistada graafiku kohale % aega veedetud. Piisab selle lĂŒlitamisest Keskmine aeg pĂ€ringu kohta tĂŒĂŒbi jĂ€rgi⊠ja nĂŒĂŒd vaatab meile vastu tuttav graafik!

Miks on Datadog eelistanud teistsugust graafikut â on meie jaoks mĂ”istatus. Pettumus oli ka see, et sĂŒsteem ei mĂ€leta kasutaja valiku (erinevalt mĂ”lemast konkurendist), seega pÀÀstab ainult kasutajapaneelide loomine.
KĂŒll aga rÔÔmustas Datadog vĂ”imalus liikuda nende graafikute kaudu seotud serverite mÔÔdikutele, lugeda logisid ja hinnata veebiserveri (Gunicorn) koormust. Peaaegu nagu New Relicis⊠ja isegi natuke rohkem (logid)!
Graafikute all on tehingud, mis on tÀielikult analoogsed New Relici omadega:

Datadogis nimetatakse tehinguid ressurssideks. Saame sorteerida kontrollerid pÀringute arvu, keskmise vastuseaja ja valitud ajavahemiku maksimaalse aja pÔhjal.
Ressursse saab avada ja nÀha kÔike seda, mida oleme juba New Relicis jÀlginud:

Saadaval on nii ressursi statistika, alustatud sisekutsed, kui ka pÀringute nÀidised, mida saab sorteerida vastuskoodi jÀrgi⊠Muide, see sorteerimine meeldis meie inseneridele vÀga.
Iga Datadogi ressursi nÀidet saab avada ja uurida:

Kuvatakse pÀringu parameetrid, iga komponendi kulutatud aja kokkuvÔtte diagramm ja vesiputouvi diagramm, kus on nÀhtavad kutsete jÀrjekord. Samuti on saadaval vahetus puustruktuuri diagrammi vaate vahel:

Ja huvitav on vaadata ka hosti koormust, millel pÀring tehti, ja vaadata pÀringu logisid.

SuurepÀrane integreerimine!
VĂ”ib tekkida kĂŒsimus, kus on vahelehed Andmebaasid ja External Services, nagu New Relicis. Siin neid ei ole: kuna Datadog jagab rakenduse komponentideks, loetakse PostgreSQL erinevaks teenuseks, ja vĂ€ljaspool teenuseid tuleb otsida aws.storage (sama kehtib ka iga muu vĂ€line teenus, millega rakendus ĂŒhendust vĂ”tab).

Siin on nÀide postgres:

Sisuliselt on kÔik see, mida me soovisime:

On selgelt nÀha, millisest "teenusest" pÀrineb pÀring.
Ei tee paha meenutada, et Datadog integreerub suurepÀraselt NGINX Ingressiga ja vÔimaldab lÀbi jÀlgida pÀringu teekonda klastrisse ning vÔimaldab vastu vÔtta statsd mÔÔdikud, koguda logisid ja hostide mÔÔdikuid.
Suur pluss Datadogi juures on see, et tema hind koosneb infrastruktuuri jÀlgimisest, APM-ist, logihalduse ja Synthetics testi, st plaani on paindlikult vÔimalik valida.
2. Atatus
Meeskond Atatus vÀidab, et nende teenus on "samamoodi nagu New Relic, kuid parem". Vaadakem, kas see on tÔsi.
PeamenĂŒĂŒ nĂ€eb tĂ”epoolest sarnane vĂ€lja, kuid rakenduses kasutatavaid Redis ja memcached ei Ă”nnestunud tuvastada.

APM valib vaikimisi kĂ”ik tehingud, ehkki tavaliselt on vajalikud ainult veebitehingud. Nagu Datadogis, ei ole vĂ”imalik peamenĂŒĂŒst liikuda soovitud teenusele. Veelgi enam, tehingud asuvad loendis pĂ€rast vigu, mis APM-i puhul ei tundu eriti loogiline.
Tehingud Atatuses nĂ€evad maksimaalselt vĂ€lja nagu New Relicis. Miinus â ei ole kohe nĂ€ha dĂŒnaamikat iga kontrolleri jaoks. Selle leidmine peab toimuma kontrollerite tabelis, sorteerides lĂ€bi Enim kulutatud aeg:

Tuttav kontrollerite nimekiri on saadaval vahekaardil Uuring:

See tabel meenutab veidi Datadogi ja on rohkem meelepÀrane kui sama New Relicis.
Iga tehingu saab avada ja nÀha, millega rakendus tegeles:

MenĂŒĂŒ sarnaneb rohkem Datadogile: seal on pĂ€ringute arv, ĂŒlevaade kĂ”igist kutsetest. Ălemine paneel pakub veaparand vana HTTP tĂ”rked ja aeglaste pĂ€ringute nĂ€idiseid Seansi jĂ€ljed:

Kui liikuda tehingusse, on nÀhtav nÀide jÀljest, saab saada loendi pÀringutest andmebaasi ja vaadata pÀringu pÀiseid. KÔik on sarnane New Relicile:

Ăldiselt, Atatus pakkus pĂ”hjalikke jĂ€lgi â ilma tĂŒĂŒpiliste New Relici kutsetelekkimisteta mĂ€lestuste plokkidesse:


Kuid siit puudub filter, mis (nagu New Relicis) eemaldas ĂŒlikiired pĂ€ringud (<5ms). Teisest kĂŒljest meeldis tehingu lĂ”ppvastuse kuvamine (edukalt vĂ”i viga).
Paneel Andmebaasid aitab uurida vÀlistest andmebaasidest pÀringu tegemise aspekte. Tuletan meelde, et Atatus leidis ainult PostgreSQL ja MySQL, kuigi projektis on kasutusel veel Redis ja memcached.

PĂ€ringud sorteeritakse tuttavate kriteeriumide jĂ€rgi: esinemissagedus, keskmine vastamisaeg ja nii edasi. Eraldi tasub mainida aeglasemate pĂ€ringute vahekaart â see on vĂ€ga mugav. Veelgi enam, andmed selles vahekaardis PostgreSQL-i kohta kattuvad laienduse andmetega. â suurepĂ€rane tulemus!

Vahekaart VÀlistingimused on tÀielikult identne andmebaasidega.
JĂ€reldused
MĂ”lemad esitletud tööriistad on oma rollis APM-is hĂ€sti esinenud. IgaĂŒks neist vĂ”ib pakkuda vajaliku miinimumi. Ăldiselt vĂ”ib meie muljeid kokku vĂ”tta jĂ€rgmiselt:
Datadog
Plussid:
- mugav hinnakujundus (APM maksab 31 USD hosti kohta);
- nÀitas end Pythoniga suurepÀraselt;
- vÔimalus integreerida OpenTracinguga
- integreerimine Kubernetesega;
- integreerimine NGINX Ingressiga.
Miinused:
- ainus APM, mis tekitas rakenduse kÀttesaamatuse mooduli vea tÔttu (predis);
- nÔrk automaatne instrumentatsioon PHP-le;
- osaliselt kummaline teenuste mÀÀratlemine ja nende eesmÀrk.
Atatus
Plussid:
- sĂŒgav instrumentatsioon PHP-le;
- kasutajaliides on sarnane New Relicile.
Miinused:
- ei tööta vanadel operatsioonisĂŒsteemidel (Ubuntu 12.05, CentOS 5);
- nÔrk automaatne instrumenteerimine;
- toetab vaid kahte programmeerimiskeelt (Node.js ja PHP);
- liidese aeglane töö.
Arvestades Atatuse hinda 69 USD kuus serveri kohta, eelistaksime pigem Datadogi, mis integreerub suurepÀraselt meie vajadustega (veebirakendused K8s-is) ja omab palju kasulikke funktsioone.
P.S.
Lugege ka meie blogist:
- «»;
- «»;
- «».
Allikas: habr.com
