Non solo con New Relic: uno sguardo a Datadog e Atatus

Non solo con New Relic: uno sguardo a Datadog e Atatus

Nel mondo degli ingegneri SRE/DevOps, non sorprende che un giorno appaia un cliente (o un sistema di monitoraggio) e segnali che "è tutto finito": il sito non funziona, i pagamenti non passano, la vita è vana... Per quanto si voglia aiutare in una situazione del genere, farlo senza uno strumento semplice e comprensibile può essere molto difficile. Spesso il problema è nascosto nel codice dell'applicazione stessa: bisogna solo localizzarlo.

Nella gioia e nel dolore…

Dopo tutto questo tempo, abbiamo sviluppato un grande amore per New Relic. È stato e rimane un ottimo strumento per il monitoraggio delle prestazioni delle applicazioni e consente anche di strumentare un'architettura a microservizi (tramite il suo agente) e molto, molto altro. E tutto sarebbe stato meraviglioso, se non fosse stato per i cambiamenti nella politica dei prezzi del servizio: esso costo è aumentato di oltre 3 volte . Inoltre, dall'anno scorso, per ottenere un account di prova è necessario comunicare con un manager personale, il che complica la presentazione del prodotto ai potenziali clienti.Situazione tipica: New Relic non è necessario in "modo continuativo", viene ricordato solo quando iniziano i problemi. Ma si deve comunque pagare regolarmente (140 USD per server al mese), e in un'infrastruttura cloud che si scala automaticamente, le somme si accumulano. Anche se c'è la possibilità di "Pay-As-You-Go", per attivare New Relic è necessario riavviare l'applicazione, il che può portare alla perdita della situazione problematica per cui tutto è stato avviato. Non molto tempo fa, New Relic ha introdotto un nuovo piano tariffario —

Essentials , — che a prima vista sembra un'alternativa ragionevole a Professional… ma, esaminandola più da vicino, ci siamo resi conto che alcune funzioni importanti mancavano (in particolare, non includeKey Transactions Cross Application Tracing, Distributed Tracing, Di conseguenza, abbiamo iniziato a cercare un'alternativa più economica, e la nostra scelta è ricaduta su due servizi: Datadog e Atatus. Perché proprio su di loro?).

Sui concorrenti

Vorrei chiarire che sul mercato ci sono altre soluzioni. Abbiamo persino considerato opzioni Open Source, ma non tutti i clienti hanno capacità disponibili per l'implementazione di soluzioni della categoria self-hosted… — inoltre, richiederanno ulteriore manutenzione. La coppia che abbiamo scelto si è rivelata la più vicina a

le nostre esigenze nostre esigenze:

  • supporto PHP integrato e avanzato (il nostro stack è molto vario, ma questo è indubbiamente un leader nel contesto della ricerca di alternative a New Relic);
  • costo accessibile (meno di 100 USD al mese per l'hosting);
  • strumentazione automatica;
  • integrazione con Kubernetes;
  • similitudine con l'interfaccia di New Relic — un vantaggio notevole (perché i nostri ingegneri ci sono abituati).

Pertanto, nella fase di selezione iniziale, abbiamo escluso diverse altre soluzioni popolari, in particolare:

  • Tideways, AppDynamics e Dynatrace — per il costo;
  • Stackify — bloccato in RF e mostra troppo pochi dati.

L'articolo seguente è strutturato in modo tale che inizialmente verranno brevemente presentate le soluzioni considerate, dopodiché parlerò del nostro interazione tipica con New Relic e delle esperienze/impressioni nell'eseguire operazioni simili in altri servizi.

Presentazione dei concorrenti selezionati

Non solo con New Relic: uno sguardo a Datadog e Atatus
Su New Relic, probabilmente, l'ha sentito ognuno? Questo servizio ha iniziato il suo sviluppo oltre 10 anni fa, nel 2008. Lo utilizziamo attivamente dal 2012 e non abbiamo mai riscontrato problemi nell'integrare un numero veramente elevato di applicazioni in PHP, Ruby e Python, e abbiamo anche avuto esperienza di integrazione con C# e Go. Gli autori del servizio hanno soluzioni per il monitoraggio delle applicazioni, infrastrutture, tracciamento delle infrastrutture microservizi, sono state create applicazioni convenienti per i dispositivi degli utenti e molto altro.

Tuttavia, l'agente di New Relic funziona con protocolli proprietari, non supporta OpenTracing. Per una strumentazione avanzata, è necessario apportare modifiche specifiche per New Relic. Infine, il supporto per Kubernetes ha attualmente uno status sperimentale.

Non solo con New Relic: uno sguardo a Datadog e Atatus
Avviato nel 2010 Datadog si presenta decisamente più interessante di New Relic proprio in termini di applicazione negli ambienti Kubernetes. In particolare, supporta integrazioni con NGINX Ingress, raccolta di log, protocolli statsd e OpenTracing, che consente di tracciare la richiesta dell'utente dall'istante della connessione fino al completamento dell'operazione, oltre a trovare i log relativi a questa richiesta (sia dal lato del server web che dal lato dei consumer).

Utilizzando Datadog, abbiamo riscontrato che a volte costruiva in modo errato la mappa dei microservizi e presentava alcuni difetti tecnici. Ad esempio, identificava erroneamente il tipo di servizio (ha scambiato Django per un servizio di caching) e causava errori 500 in un'applicazione PHP che utilizzava la popolare libreria Predis.

Non solo con New Relic: uno sguardo a Datadog e Atatus
Atatus — il più giovane strumento; il servizio è stato lanciato nel 2014. Il suo budget di marketing è chiaramente inferiore a quello dei competitor elencati, e le menzioni sono significativamente più rare. Tuttavia, lo strumento in sé è molto simile a New Relic, non solo nelle funzionalità (APM, Browser monitoring, ecc.), ma anche nell'aspetto.

Un notevole svantaggio è il supporto limitato a Node.js e PHP. D'altra parte, è implementato in modo notevolmente migliore rispetto a Datadog. A differenza dell'ultimo, Atatus non richiede modifiche alle applicazioni o l'aggiunta di etichette extra nel codice.

Come lavoriamo con New Relic

Ora facciamo chiarezza su come utilizziamo generalmente New Relic. Supponiamo di avere un problema che necessita di soluzione:

Non solo con New Relic: uno sguardo a Datadog e Atatus

Nel grafico è facile notare un picco — analizziamolo. In New Relic per l'applicazione web sono selezionate immediatamente le transazioni web, nel grafico delle performance sono indicati tutti i componenti, ci sono i pannelli error-rate, request-rate... La cosa importante è che da questi pannelli si può navigare tra le varie parti dell'applicazione (per esempio, un clic su MySQL porterà alla sezione dei database).

Poiché nell'esempio considerato vediamo un picco di attività PHP, facciamo clic su questo grafico e passeremo automaticamente a Transazioni:

Non solo con New Relic: uno sguardo a Datadog e Atatus

L'elenco delle transazioni, che sono fondamentalmente controller del modello MVC, è già ordinato per Le più dispendiose in termini di tempo, il che è molto comodo: vediamo subito cosa sta facendo l'applicazione. Qui ci sono anche esempi di richieste lunghe, che vengono raccolte automaticamente da New Relic. Cambiando l'ordinamento, è facile trovare:

  • il controller dell'applicazione più sollecitato;
  • il controller più frequentemente richiesto;
  • il più lento dei controller.

Inoltre, è possibile espandere ogni transazione e vedere cosa stava facendo l'applicazione al momento dell'esecuzione del codice:

Non solo con New Relic: uno sguardo a Datadog e Atatus

Infine, nell'applicazione vengono salvati esempi dei trace delle richieste lunghe (che richiedono più di 2 secondi). Ecco il pannello per una lunga transazione:

Non solo con New Relic: uno sguardo a Datadog e Atatus

È evidente che due metodi richiedono molto tempo, e viene mostrato anche il tempo in cui è stata eseguita la richiesta, il suo URI e il dominio. Questo aiuta molto a trovare la richiesta nei log. Passando a Dettagli del Trace, è possibile vedere da dove vengono chiamati questi metodi:

Non solo con New Relic: uno sguardo a Datadog e Atatus

E a Query del database — valutare le richieste ai database che sono state eseguite durante il funzionamento dell'applicazione:

Non solo con New Relic: uno sguardo a Datadog e Atatus

Armati di queste conoscenze, possiamo valutare la causa del rallentamento dell'applicazione e collaborare con lo sviluppatore per elaborare una strategia di risoluzione del problema. In realtà, New Relic non sempre fornisce un quadro chiaro, ma aiuta a scegliere la direzione dell'indagine:

  • lungo PDO::Construct ci ha portato a un funzionamento strano di pgpoll;
  • instabilità nel tempo Memcache::Get ha suggerito una configurazione errata della macchina virtuale;
  • un tempo di elaborazione del modello sospettosamente aumentato ha portato a un ciclo nidificato che controlla la presenza di 500 avatar nello storage degli oggetti;
  • e così via…

Può anche accadere che, invece di eseguire codice sullo schermo principale, emerga qualcosa legato a storage esterno — e non importa se sia Redis o PostgreSQL, — tutti si nascondono nella scheda Database.

Non solo con New Relic: uno sguardo a Datadog e Atatus

È possibile selezionare un database specifico per l'analisi e ordinare le query — in modo simile a come si fa in Transactions. Passando alla scheda delle query, è possibile vedere quante volte appare questa query in ciascuno dei controller dell'applicazione e anche valutare quanto spesso viene chiamata. È molto comodo:

Non solo con New Relic: uno sguardo a Datadog e Atatus

Dati simili sono disponibili nella scheda Servizi Esterni, che contiene le richieste verso i servizi HTTP esterni, come accessi allo storage degli oggetti, invio di eventi a sentry o simili. Il contenuto della scheda è completamente analogo a Databases:

Non solo con New Relic: uno sguardo a Datadog e Atatus

Competitor: funzionalità e impressioni

Ora arriva il momento interessante: confrontiamo le funzionalità di New Relic con quelle offerte dai competitor. Purtroppo, non siamo riusciti a testare tutti e tre gli strumenti sulla stessa versione di un'applicazione funzionante in produzione. Tuttavia, abbiamo cercato di confrontare situazioni/configurazioni il più identiche possibile.

1. Datadog

Datadog ci accoglie con un pannello e una wall dei servizi:

Non solo con New Relic: uno sguardo a Datadog e Atatus

Cerca di suddividere le applicazioni in componenti/microservizi, quindi nell'applicazione Django fornita come esempio vedremo 2 connessioni a PostgreSQL (defaultdb e postgres), e anche Celery, Redis. Lavorare con Datadog richiede da parte vostra conoscenze minime dei principi MVC: è necessario capire dove vanno a finire le richieste degli utenti. Di solito, questo è facilitato da una mappa dei servizi:

Non solo con New Relic: uno sguardo a Datadog e Atatus

A proposito, qualcosa di simile è disponibile anche in New Relic:

Non solo con New Relic: uno sguardo a Datadog e Atatus

… e la loro mappa, a mio avviso, è fatta in modo più semplice e chiaro: mostra solo specifici servizi o microservizi, invece dei componenti di un'applicazione (il che la renderebbe eccessivamente dettagliata, come nel caso di Datadog).

Torniamo a Datadog: dalla mappa dei servizi si vede che le richieste degli utenti arrivano a Django. Passiamo al servizio Django e finalmente vedremo ciò che ci aspettavamo:

Non solo con New Relic: uno sguardo a Datadog e Atatus

Sfortunatamente, qui non c'è un grafico per impostazione predefinita. Tempo di transazione web, simile a quello che vediamo nella dashboard principale di New Relic. Tuttavia, può essere configurato al posto del grafico. % del tempo speso. È sufficiente commutarlo in Tempo medio per richiesta per tipo… e voilà, il grafico familiare ci guarda!

Non solo con New Relic: uno sguardo a Datadog e Atatus

Perché in Datadog è stato scelto un grafico diverso è un mistero per noi. Ci ha anche deluso che il sistema non memorizza la scelta dell'utente (a differenza di entrambi i concorrenti), quindi l'unica soluzione è creare pannelli personalizzati.

Tuttavia, abbiamo apprezzato la possibilità in Datadog di passare da questi grafici alle metriche dei server associati, leggere i log e valutare il carico dei gestori del server web (Gunicorn). È tutto quasi come in New Relic… e anche un po' di più (i log)!

Sotto i grafici ci sono le transazioni, del tutto analoghe a New Relic:

Non solo con New Relic: uno sguardo a Datadog e Atatus

In Datadog le transazioni sono chiamate risorse. È possibile ordinare i controller in base al numero di richieste, al tempo medio di risposta e al tempo massimo speso in un intervallo di tempo selezionato.

La risorsa può essere espansa per vedere tutto ciò che abbiamo già osservato in New Relic:

Non solo con New Relic: uno sguardo a Datadog e Atatus

Sono disponibili statistiche sulla risorsa, un elenco riassuntivo delle chiamate interne e esempi di richieste che possono essere ordinate per codice di risposta… Questa ordinazione è piaciuta molto ai nostri ingegneri.

Qualsiasi esempio di risorsa in Datadog può essere aperto e studiato:

Non solo con New Relic: uno sguardo a Datadog e Atatus

Sono presentati i parametri della richiesta, un diagramma riassuntivo del tempo speso per ciascun componente e un diagramma a cascata che mostra la sequenza delle chiamate. È anche disponibile il passaggio a una visualizzazione ad albero del diagramma a cascata:

Non solo con New Relic: uno sguardo a Datadog e Atatus

E la cosa più interessante è la visualizzazione del carico dell'host su cui è stata eseguita la richiesta e la visualizzazione dei log della richiesta.

Non solo con New Relic: uno sguardo a Datadog e Atatus

Ottima integrazione!

Può sorgere la domanda, dove sono le schede Database e Servizi Esterni, come in New Relic. Qui non ci sono: poiché Datadog analizza l'applicazione in componenti, PostgreSQL sarà considerato un servizio separato, mentre invece dei servizi esterni si dovranno cercare aws.storage (analogamente sarà per ogni altro servizio esterno a cui l'applicazione può fare riferimento).

Non solo con New Relic: uno sguardo a Datadog e Atatus

Ecco un esempio con postgres:

Non solo con New Relic: uno sguardo a Datadog e Atatus

In sostanza, c'è tutto ciò che volevamo:

Non solo con New Relic: uno sguardo a Datadog e Atatus

È evidente da quale 'servizio' è arrivata la richiesta.

Non è superfluo ricordare che Datadog si integra perfettamente con NGINX Ingress e permette di eseguire un tracciamento end-to-end dal momento in cui la richiesta entra nel cluster, oltre a raccogliere metriche statsd, log e metriche degli host.

Un grande vantaggio di Datadog è che il suo prezzo è composto da monitoraggio dell'infrastruttura, APM, Log Management e Synthetics test, ovvero è possibile scegliere un piano flessibile.

2. Atatus

Il team di Atatus sostiene che il loro servizio è 'come New Relic, ma migliore'. Vediamo se è davvero così.

La dashboard sembra effettivamente simile, ma non siamo riusciti a identificare Redis e memcached utilizzati nell'applicazione.

Non solo con New Relic: uno sguardo a Datadog e Atatus

APM seleziona per impostazione predefinita tutte le transazioni, anche se di solito servono solo quelle Web. Come in Datadog, non c'è la possibilità di passare al servizio desiderato direttamente dalla dashboard principale. Inoltre, le transazioni si trovano nell'elenco dopo gli errori, il che per APM non appare molto logico.

Nelle transazioni, Atatus è molto simile a New Relic. Un contro è che non si vedono immediatamente le dinamiche di ciascun controller. Bisogna cercarle nella tabella dei controller, ordinando per Most Time Consumed:

Non solo con New Relic: uno sguardo a Datadog e Atatus

L’elenco dei controllori a noi familiare è disponibile nella scheda Esplora:

Non solo con New Relic: uno sguardo a Datadog e Atatus

Questa tabella ricorda in qualche modo Datadog e risulta più piacevole rispetto a quella simile di New Relic.

Ogni transazione può essere espansa per vedere cosa ha fatto l'applicazione:

Non solo con New Relic: uno sguardo a Datadog e Atatus

La dashboard ricorda piuttosto Datadog: mostra il numero di richieste e un quadro generale delle chiamate. La parte superiore della dashboard fornisce una scheda con gli errori HTTP Failures e esempi di richieste lente Session Traces:

Non solo con New Relic: uno sguardo a Datadog e Atatus

Se si passa a una transazione, si vede un esempio di trace, è possibile ottenere un elenco delle richieste al database e vedere gli header della richiesta. È completamente analogo a New Relic:

Non solo con New Relic: uno sguardo a Datadog e Atatus

In generale, Atatus ha impressionato con trace dettagliati, senza le tipiche unificazioni di chiamate in un blocco di promemoria di New Relic:

Non solo con New Relic: uno sguardo a Datadog e Atatus
Non solo con New Relic: uno sguardo a Datadog e Atatus

Tuttavia, manca un filtro che (come in New Relic) escluda le richieste ultra-veloci (<5ms). D'altro canto, mi è piaciuta la visualizzazione della risposta finale della transazione (successo o errore).

Pannello Database aiuterà a esaminare le richieste ai database esterni fatte dall'applicazione. Ricordo che Atatus ha trovato solo PostgreSQL e MySQL, anche se nel progetto sono coinvolti anche Redis e memcached.

Non solo con New Relic: uno sguardo a Datadog e Atatus

Le query vengono ordinate secondo criteri familiari: frequenza di attivazione, tempo medio di risposta e così via. È particolarmente utile notare la scheda con le query più lente: è molto comodo. Inoltre, i dati in questa scheda per PostgreSQL sono coincisi con i dati dell'estensione pg_stat_statements — ottimo risultato!

Non solo con New Relic: uno sguardo a Datadog e Atatus

Scheda Richieste esterne è completamente identica a Databases.

Conclusioni

Entrambi gli strumenti presentati hanno mostrato buone prestazioni come APM. Ognuno di essi può offrire il minimo necessario. Possiamo riassumere le nostre impressioni in questo modo:

Datadog

Pro:

  • griglia tariffaria comoda (l'APM costa 31 USD per host);
  • ha funzionato eccellentemente con Python;
  • possibilità di integrazione con OpenTracing
  • integrazione con Kubernetes;
  • integrazione con NGINX Ingress.

Contro:

  • l'unico APM che ha causato l'indisponibilità dell'applicazione a causa di un errore del modulo (predis);
  • debole auto-instrumentazione PHP;
  • in parte strano nella definizione dei servizi e dei loro scopi.

Atatus

Pro:

  • profonda strumentazione PHP;
  • interfaccia utente simile a New Relic.

Contro:

  • non funziona su sistemi operativi datati (Ubuntu 12.05, CentOS 5);
  • debole auto-instrumentazione;
  • supporto per soli due linguaggi di programmazione (Node.js e PHP);
  • lentezza nell'interfaccia.

Considerando il prezzo di Atatus di 69 USD al mese per server, utilizzeremmo piuttosto Datadog, che si integra ottimamente con le nostre esigenze (applicazioni web in K8s) e offre molte funzionalità utili.

P.S.

Leggi anche nel nostro blog:

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster