Ne samo s New Relicom: pogled na Datadog i Atatus

Ne samo s New Relicom: pogled na Datadog i Atatus

U svijetu SRE/DevOps inženjera, nikoga ne iznenađuje kada se klijent (ili sustav za nadzor) pojavi i javi da "sve propada": web stranica ne radi, uplati ne prolaze, život je besmislen... Koliko god želite pomoći u takvoj situaciji, ponekad je vrlo teško to učiniti bez jednostavnog i razumljivog alata. Često je problem skriven u kodu same aplikacije — potrebno je samo lokalizirati ga.

I u tuzi, i u radosti...

Tako se dogodilo da smo već jako dugo i jako zavoljeli New Relic. On je bio i ostaje izvrstan alat za praćenje performansi aplikacije, a također omogućuje instrumentaciju mikroservisne arhitekture (uz pomoć svog agenta) i mnogo, mnogo toga drugog. I sve bi moglo biti izvrsno, da se nisu dogodile promjene u cjenovnoj politici servisa: njegova cijena od 2013. godine porasla više od 3 puta. Uz to, od prošle godine za dobivanje trial računa potrebno je komunicirati s osobnim menadžerom, što otežava prezentaciju proizvoda potencijalnom klijentu.

Uobičajena situacija: New Relic nije potreban na "stalnoj osnovi", sjećaju se njega samo kada nastanu problemi. Ali ipak treba redovito plaćati (140 USD po serveru mjesečno), a u automatski skalirajućoj oblačnoj infrastrukturi, iznosi se brzo povećavaju. Iako postoji opcija "Pay-As-You-Go", za uključivanje New Relic-a potrebno je ponovno pokrenuti aplikaciju, što može dovesti do gubitka problematične situacije zbog koje se sve i pokretalo. Nedavno je New Relic uveo novi tarifni plan — Osnovni elementi, — koji na prvi pogled izgleda kao razumna alternativa Professional... ali nakon detaljnog razmatranja ispostavilo se da nedostaju neka važna svojstva (specifično, u njemu nema Ključnih transakcija, Praćenja među aplikacijama, Distribuiranog praćenja).

Kao rezultat toga, razmislili smo o traženju jeftinije alternative, a naš izbor pao je na dva servisa: Datadog i Atatus. Zašto baš na njih?

O konkurentima

Odmah ću napomenuti da na tržištu postoje i druga rješenja. Čak smo razmatrali i Open Source opcije, ali nemaju svi klijenti slobodne kapacitete za smještaj rješenja kategorije self-hosted... — uz to, zahtijevat će dodatno održavanje. Odabrana dvojica su se pokazala kao najbliži našim potrebama:

  • ugrađena i razvijena podrška za PHP aplikacije (stog naših klijenata je veoma raznolik, ali ovo je očiti lider u kontekstu traženja alternative New Relicu);
  • pristupačna cijena (manje od 100 USD mjesečno za hosting);
  • automatska instrumentacija;
  • integracija s Kubernetesom;
  • sličnost s sučeljem New Relica — značajna prednost (jer su naši inženjeri na to navikli).

Stoga smo u prvom krugu odabrali nekoliko drugih popularnih rješenja, a posebno:

  • Tideways, AppDynamics i Dynatrace — zbog cijene;
  • Stackify — blokiran u RF i pokazuje premalo podataka.

Daljnji članak je konstruiran na način da će najprije biti kratko predstavljena razmatrana rješenja, a zatim ću govoriti o našem tipičnom interakciji s New Relicom i iskustvima/impresijama prilikom izvođenja sličnih operacija u drugim servisima.

Predstavljanje odabranih konkurenata

Ne samo s New Relicom: pogled na Datadog i Atatus
O New Relic, vjerojatno, je svatko čuo? Ova usluga je započela svoj razvoj prije više od 10 godina, 2008. godine. Aktivno je koristimo od 2012. godine i nismo imali problema s integracijom stvarno velikog broja aplikacija na PHP, Ruby i Python jezicima, kao i imamo iskustava s integracijom s C# i Go. Autori servisa imaju rješenja za praćenje aplikacija, infrastrukture, praćenje mikroservisnih infrastruktura, stvorili su prikladne aplikacije za korisničke uređaje i još mnogo toga.

Međutim, agent New Relica radi po proprietarnim protokolima, nema podršku za OpenTracing. Za naprednu instrumentaciju potrebno je unositi izmjene posebno za New Relic. Na kraju, podrška za Kubernetes trenutno ima eksperimentalni status.

Ne samo s New Relicom: pogled na Datadog i Atatus
Započeo svoj razvoj 2010. godine Datadog djeluje znatno zanimljivije od New Relica upravo u pogledu primjene u Kubernetes okruženju. Konkretno, podržava integraciju s NGINX Ingress, prikupljanje logova, protokole statsd i OpenTracing, što omogućuje praćenje korisničkog zahtjeva od trenutka povezivanja do završetka rada, kao i pronalaženje logova prema tom zahtjevu (kako na strani web poslužitelja, tako i na strani potrošača).

Prilikom korištenja Datadoga susreli smo se s tim da je ponekad netočno građen mapa mikroservisa i nekim tehničkim nedostacima. Na primjer, netočno je odredio tip servisa (shvatio je Django kao servis za keširanje) i izazivao 500 greške u PHP aplikaciji koja koristi popularnu biblioteku Predis.

Ne samo s New Relicom: pogled na Datadog i Atatus
Atatus — najmlađi alat; usluga je pokrenuta 2014. godine. Njegov marketinški budžet je očito manji od nabrojanih konkurenata, a spominjanja su znatno rjeđa. Ipak, alat je vrlo sličan New Relicu, ne samo po mogućnostima (APM, Browser monitoring itd.), već i po vizualnom izgledu.

Značajan nedostatak je podrška samo za Node.js i PHP. S druge strane, implementacija je znatno bolja nego kod Datadoga. Za razliku od njega, Atatus ne zahtijeva nikakve izmjene u aplikacijama ili dodavanje dodatnih oznaka u kodu.

Kako radimo s New Relicom

Sada ćemo razjasniti kako obično koristimo New Relic. Recimo da imamo problem koji treba riješiti:

Ne samo s New Relicom: pogled na Datadog i Atatus

Na grafu se lako primjećuje ispad — analizirajmo ga. U New Relicu za web-aplikaciju odmah su odabrane web-transakcije, na grafikonu performansi navedeni su svi komponente, prisutni su paneli error-rate, request-rate... Ono što je ključno — iz ovih panela se može lako kretati između različitih dijelova aplikacije (na primjer, klikom na MySQL preći ćete na odjeljak baza podataka).

Budući da u razmatranom primjeru vidimo porast aktivnosti PHP, kliknimo na ovaj graf i automatski ćemo preći na Transakcije:

Ne samo s New Relicom: pogled na Datadog i Atatus

Popis transakcija, koje su u suštini kontroleri iz MVC modela, već je sortiran po Najviše troši vrijeme, što je vrlo praktično: odmah vidimo čime se aplikacija bavi. Također su tu primjeri dugih zahtjeva koje New Relic automatski prikuplja. Prebacivanjem sortiranja lako je pronaći:

  • najopterećeniji kontroler aplikacije;
  • najčešće traženi kontroler;
  • najsporiji od kontrolera.

Osim toga, moguće je proširiti svaku transakciju i vidjeti čime se aplikacija bavila u trenutku izvršavanja koda:

Ne samo s New Relicom: pogled na Datadog i Atatus

Na kraju, u aplikaciji se čuvaju primjeri tragova dugih zahtjeva (koji traju više od 2 sekunde). Evo panela za dugu transakciju:

Ne samo s New Relicom: pogled na Datadog i Atatus

Vidljivo je da dva metoda troše puno vremena, a zajedno s tim se prikazuje i vrijeme kada je zahtjev izvršen, njegov URI i domena. Vrlo često ovo pomaže u pronalaženju zahtjeva u logovima. Prelaskom na Detalji traganja, možete vidjeti odakle se pozivaju ti metodi:

Ne samo s New Relicom: pogled na Datadog i Atatus

A u Upiti baze podataka — procijeniti upite prema bazama podataka koji su se izvršavali tijekom rada aplikacije:

Ne samo s New Relicom: pogled na Datadog i Atatus

Naoružani ovim znanjem, možemo ocijeniti uzrok usporavanja aplikacije i zajedno s programerom razviti strategiju rješavanja problema. U stvarnosti, New Relic ne daje uvijek jasnu sliku, ali pomaže u odabiru pravca istrage:

  • dugo PDO::Construct doveo nas je do čudnog funkcioniranja pgpoll;
  • nestabilnost u vremenu Memcache::Get ukazala na nekorektnu postavku virtualnog stroja;
  • sumnjivo povećano vrijeme obrade predloška dovelo je do ugrađenog ciklusa s provjerom postojanja u objektnoj pohrani 500 avatara;
  • i tako dalje…

Ponekad se događa da umjesto izvršavanja koda na glavnom ekranu raste nešto vezano uz vanjsku pohranu podataka — i nije važno što to bude: Redis ili PostgreSQL, — svi se skrivaju u kartici Baze podataka.

Ne samo s New Relicom: pogled na Datadog i Atatus

Možete odabrati određenu bazu za istraživanje i obaviti sortiranje upita — slično onome kako se to radi u Transactions. A odlaskom u karticu upita, možete vidjeti koliko se taj upit pojavljuje u svakom od kontrolera aplikacije, kao i procijeniti koliko često se poziva. To je vrlo praktično:

Ne samo s New Relicom: pogled na Datadog i Atatus

Slične podatke sadrži kartica External Services, koja skriva u sebi upite prema vanjskim HTTP-servisima, poput poziva na objektno skladište, slanja događaja u sentry ili sličnog. Po svom sadržaju, kartica je potpuno analogna Databases:

Ne samo s New Relicom: pogled na Datadog i Atatus

Konkurenti: mogućnosti i impresije

Sada dolazi najzanimljivije — usporedimo mogućnosti New Relica s onim što nude konkurenti. Nažalost, nismo mogli testirati sva tri alata na jednoj verziji jedne aplikacije koja radi u produkciji. Ipak, potrudili smo se usporediti što identičnije situacije/konfiguracije.

1. Datadog

Datadog nas dočekuje panelom sa zidom usluga:

Ne samo s New Relicom: pogled na Datadog i Atatus

Pokušava razdvojiti aplikacije na komponente/mikroservise, tako da ćemo u primjeru Django aplikacije vidjeti 2 veze prema PostgreSQL (defaultdb i postgres), kao i Celery, Redis. Rad s Datadogom zahtijeva minimalno znanje o principima MVC: potrebno je razumjeti kamo uopće dolaze korisnički upiti. Obično u tome pomaže karta usluga:

Ne samo s New Relicom: pogled na Datadog i Atatus

Usput, nešto slično postoji i u New Relicu:

Ne samo s New Relicom: pogled na Datadog i Atatus

… što se tiče karte, učinila mi se jednostavnijom i jasnijom: prikazuje ne komponente jedne aplikacije (što bi je učinilo suvišnom, kao u slučaju Datadog), nego samo konkretne usluge ili mikrousluge.

Vratimo se na Datadog: iz karte usluga vidimo da korisnički upiti dolaze u Django. Pređimo u Django uslugu i napokon ćemo vidjeti ono što smo očekivali:

Ne samo s New Relicom: pogled na Datadog i Atatus

Nažalost, po defaultu ovdje nema grafika Vrijeme web transakcije, sličnog onome što vidimo na glavnoj ploči New Relic. Međutim, moguće ga je postaviti na mjestu grafikona % vremena provedenog. Dovoljno je prebaciti ga u Prosječno vrijeme po zahtjevu prema tipu… i odjednom nas gleda poznati grafikon!

Ne samo s New Relicom: pogled na Datadog i Atatus

Zašto je Datadog dao prednost drugom grafikonu — za nas je misterija. Razljutilo nas je i to što sustav ne pamti odabir korisnika (za razliku od oba konkurenta), a samim tim – samo kreacija korisničkih ploča spašava situaciju.

Međutim, oduševila je mogućnost u Datadogu prelaska s ovih grafikona na metrike povezanih servera, čitanje logova i procjenu opterećenja obradnika web servera (Gunicorn). Sve gotovo kao u New Relic… i čak nešto više (logovi)!

Ispod grafikona nalaze se transakcije, potpuno analogne New Relic:

Ne samo s New Relicom: pogled na Datadog i Atatus

U Datadogu se transakcije nazivaju resursima. Moguće je sortirati kontrolere prema broju zahtjeva, prosječnom vremenu odgovora, maksimalnom vremenu potrošenom u odabranom vremenskom razdoblju.

Resurs se može proširiti i vidjeti sve ono što smo već promatrali u New Relic:

Ne samo s New Relicom: pogled na Datadog i Atatus

Dostupne su statistike o resursu, sažeti popis unutarnjih poziva i primjeri zahtjeva koji se mogu sortirati prema kodu odgovora… Usput, ova sortiranja su se našim inženjerima jako svidjela.

Svaki primjer resursa u Datadogu može se otvoriti i proučiti:

Ne samo s New Relicom: pogled na Datadog i Atatus

Predstavljeni su parametri zahtjeva, sažeta dijagram po potrošenom vremenu na svaki od komponenti i dijagram vodopada, u kojem se vidi redoslijed poziva. Također je dostupno prebacivanje na stablo dijagram vodopada:

Ne samo s New Relicom: pogled na Datadog i Atatus

A najzanimljivije je – pregled opterećenja hosta na kojem je izvršen zahtjev, te pregled logova zahtjeva.

Ne samo s New Relicom: pogled na Datadog i Atatus

Odlična integracija!

Moguće je postaviti pitanje, gdje su kartice Baze podataka i External Services, kao u New Relic. Ovdje ih nema: budući da Datadog razrađuje aplikaciju na komponente, PostgreSQL će se smatrati odvojenom uslugom, a umjesto External Services treba tražiti aws.storage (slično će biti i za svaku drugu vanjsku uslugu kojoj aplikacija može pristupiti).

Ne samo s New Relicom: pogled na Datadog i Atatus

Evo primjera s postgres:

Ne samo s New Relicom: pogled na Datadog i Atatus

U suštini, imamo sve što smo željeli:

Ne samo s New Relicom: pogled na Datadog i Atatus

Može se vidjeti iz kojeg „servisa“ je stigao zahtjev.

Nije naodmet podsjetiti da se Datadog odlično integrira s NGINX Ingress i omogućava provođenje end-to-end praćenja od trenutka dolaska zahtjeva u klaster, kao i prihvaćanje statsd metrika, prikupljanje logova i metrika hostova.

Ogroman plus Datadoga je u tome što njegova cijena se sastoji od praćenja infrastrukture, APM-a, upravljanja logovima i Synthetics testova, tj. može se fleksibilno odabrati plan.

2. Atatus

Tim Atatusa tvrdi da je njihova usluga — „poput New Relic-a, ali bolja“. Pogledajmo je li to doista tako.

Glavna ploča zaista izgleda slično, ali nije bilo moguće odrediti koje se aplikacije koriste Redis i memcached.

Ne samo s New Relicom: pogled na Datadog i Atatus

APM po defaultu bira sve transakcije, iako su obično potrebne samo web transakcije. Kao i kod Datadoga, ne postoji mogućnost prelaska na potrebnu uslugu iz glavne ploče. Štoviše, transakcije se nalaze na popisu nakon grešaka, što za APM nije baš logično.

U transakcijama Atatusa sve maksimalno podsjeća na New Relic. Minus — dinamiku za svaku od kontrolera nije odmah vidljivo. Mora se tražiti u tablici kontrolera, sortirajući po Najviše vremena potrošeno:

Ne samo s New Relicom: pogled na Datadog i Atatus

Poznati popis kontrolera dostupan je na kartici Istraži:

Ne samo s New Relicom: pogled na Datadog i Atatus

Na neki način, ova tablica podsjeća na Datadog i više mi se sviđa od slične u New Relic-u.

Svaku transakciju možete proširiti i vidjeti čime se aplikacija bavila:

Ne samo s New Relicom: pogled na Datadog i Atatus

Ploča također više podsjeća na Datadog: postoji broj zahtjeva, ukupna slika poziva. Gornja ploča nudi karticu s greškama HTTP Greške i primjere sporih zahtjeva Session Tragovi:

Ne samo s New Relicom: pogled na Datadog i Atatus

Ako pređete u transakciju, možete vidjeti primjer traga, dobiti popis zahtjeva za bazu i pogledati zaglavlja zahtjeva. Sve je kao u New Relic-u:

Ne samo s New Relicom: pogled na Datadog i Atatus

Općenito, Atatus je obradovao detaljnim tragovima — bez tipičnog za New Relic grupisanja poziva u reminder-blok:

Ne samo s New Relicom: pogled na Datadog i Atatus
Ne samo s New Relicom: pogled na Datadog i Atatus

Međutim, ovdje nedostaje filtriranje koje bi (kao u New Relic-u) isključilo izuzetno brze zahtjeve (<5ms). S druge strane, prikaz konačnog odgovora transakcije (uspješni ili greška) mi se svidio.

Panel Baze podataka pomoći će proučiti zahtjeve prema vanjskim bazama koje aplikacija šalje. Podsjećam, Atatus je pronašao samo PostgreSQL i MySQL, iako su u projektu zastupljeni i Redis i memcached.

Ne samo s New Relicom: pogled na Datadog i Atatus

Upiti se razvrstavaju prema uobičajenim kriterijima: učestalost, prosječno vrijeme odgovora i tako dalje. Osobito bih istaknuo karticu s najsporijim upitima — to je vrlo korisno. Štoviše, podaci na ovoj kartici za PostgreSQL podudaraju se s podacima iz proširenja. pg_stat_statements — odličan rezultat!

Ne samo s New Relicom: pogled na Datadog i Atatus

Kartica Vanjski zahtjevi u potpunosti je identična bazi podataka.

Zaključci

Oba predstavljena alata dobro su se iskazala u ulozi APM-a. Bilo koji od njih može ponuditi potrebni minimum. Ukupno bismo mogli sažeti naše dojmove ovako:

Datadog

Prednosti:

  • praktična tarifna mreža (APM košta 31 USD po hostu);
  • odlično se ponaša s Python-om;
  • mogućnost integracije s OpenTracing;
  • integracija s Kubernetesom;
  • integracija s NGINX Ingress.

Mane:

  • jedini APM koji je uzrokovao nedostupnost aplikacije zbog pogreške modula (predis);
  • slaba automatska instrumentacija PHP-a;
  • djelomično neobična definicija usluga i njihovih namjena.

Atatus

Prednosti:

  • duboka instrumentacija PHP-a;
  • sličan New Relic-u korisnički sučelje.

Mane:

  • ne radi na starim operativnim sustavima (Ubuntu 12.05, CentOS 5);
  • slaba automatska instrumentacija;
  • podrška samo za dva jezika (Node.js i PHP);
  • spora funkcionalnost sučelja.

S obzirom na cijenu Atatusa od 69 USD mjesečno po serveru, radije bismo koristili Datadog, koji se odlično integrira u naše potrebe (web aplikacije u K8s) i ima mnogo korisnih funkcija.

P.S.

Pročitajte i na našem blogu:

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster