Pas seulement avec New Relic : un aperçu de Datadog et Atatus

Pas seulement avec New Relic : un aperçu de Datadog et Atatus

Dans le milieu des ingĂ©nieurs SRE/DevOps, il n'est pas surprenant qu'un jour un client (ou un systĂšme de surveillance) apparaisse en disant que « tout est perdu » : le site ne fonctionne pas, les paiements ne passent pas, la vie est morose... Bien qu'on souhaite aider dans une telle situation, le faire sans un outil simple et clair est souvent trĂšs compliquĂ©. Souvent, le problĂšme est cachĂ© dans le code mĂȘme de l'application — il suffit juste de le localiser.

Dans le malheur comme dans la joie


Il se trouve que nous avons aimĂ© New Relic depuis trĂšs longtemps. Il a Ă©tĂ© et reste un excellent outil pour la surveillance de la performance des applications, et permet Ă©galement de mettre en Ɠuvre une architecture de microservices (grĂące Ă  son agent) et bien d'autres choses. Et tout pourrait ĂȘtre merveilleux, si ce n'Ă©tait pour les changements de politique tarifaire du service : son le coĂ»t depuis 2013 a augmentĂ© de plus de 3 fois. De plus, depuis l'annĂ©e derniĂšre, pour obtenir un compte d'essai, il faut communiquer avec un gestionnaire personnel, ce qui complique la prĂ©sentation du produit Ă  un client potentiel.

Situation classique : New Relic n'est pas nĂ©cessaire sur une « base permanente », on n'y pense que lorsque le problĂšme commence. Mais il faut quand mĂȘme payer rĂ©guliĂšrement (140 USD par serveur par mois), et dans une infrastructure cloud Ă©volutive, les sommes s'accumulent rapidement. Bien qu'il existe une option « Pay-As-You-Go », l'activation de New Relic nĂ©cessitera un redĂ©marrage de l'application, ce qui pourrait entraĂźner la perte de la situation problĂ©matique pour laquelle tout cela a Ă©tĂ© mis en place. RĂ©cemment, New Relic a lancĂ© un nouveau tarif — Essentials, qui semble au premier abord ĂȘtre une alternative raisonnable au Professional
 mais en y regardant de plus prĂšs, il s'avĂšre que certaines fonctions importantes sont absentes (notamment, il n'y a pas de Transactions ClĂ©s, Traçage d'Application CroisĂ©e, Traçage DistribuĂ©).

En conséquence, nous avons commencé à chercher une alternative moins chÚre, et notre choix s'est porté sur deux services : Datadog et Atatus. Pourquoi exactement ceux-là ?

Sur les concurrents

Je prĂ©cise immĂ©diatement qu'il existe d'autres solutions sur le marchĂ©. Nous avons mĂȘme envisagĂ© des options Open Source, mais tous les clients n'ont pas la capacitĂ© libre pour hĂ©berger des solutions de type self-hosted... — de plus, elles nĂ©cessiteront une maintenance supplĂ©mentaire. Le duo que nous avons choisi s'est avĂ©rĂ© ĂȘtre le plus proche de nos besoins:

  • support intĂ©grĂ©e et dĂ©veloppĂ©e pour les applications PHP (la stack de nos clients est trĂšs variĂ©e, mais c'est clairement un leader dans le contexte de la recherche d'alternatives Ă  New Relic);
  • tarifs abordables (moins de 100 USD par mois pour l'hĂ©bergement);
  • instrumentation automatique;
  • intĂ©gration avec Kubernetes;
  • ressemblance avec l'interface de New Relic — un avantage notable (car nos ingĂ©nieurs y sont habituĂ©s).

C'est pourquoi, lors de la premiÚre sélection, nous avons écarté plusieurs autres solutions populaires, notamment :

  • Tideways, AppDynamics et Dynatrace — Ă  cause du coĂ»t;
  • Stackify — bloquĂ© en RF et ne montre que trop peu de donnĂ©es.

L'article suivant est construit de maniÚre à d'abord présenter briÚvement les solutions considérées, aprÚs quoi je parlerai de notre interaction type avec New Relic et de notre expérience/des impressions concernant la réalisation d'opérations similaires sur d'autres services.

Présentation des concurrents sélectionnés

Pas seulement avec New Relic : un aperçu de Datadog et Atatus
À propos de New Relic, a probablement Ă©tĂ© entendu par chacun ? Ce service a commencĂ© son dĂ©veloppement il y a plus de 10 ans, en 2008. Nous l'utilisons activement depuis 2012 et n'avons pas rencontrĂ© de problĂšmes pour intĂ©grer un vĂ©ritable grand nombre d'applications en PHP, Ruby et Python, et nous avons Ă©galement eu de l'expĂ©rience d'intĂ©gration avec C# et Go. Les crĂ©ateurs du service proposent des solutions pour le suivi des applications, des infrastructures, le traçage des infrastructures de microservices, ont créé des applications conviviales pour les appareils utilisateurs et bien plus encore.

Cependant, l'agent New Relic fonctionne avec des protocoles propriétaires, il n'y a pas de support pour OpenTracing. Pour une instrumentation avancée, des modifications spéciales pour New Relic sont nécessaires. Enfin, le support de Kubernetes est encore à un stade expérimental.

Pas seulement avec New Relic : un aperçu de Datadog et Atatus
Développé en 2010 Datadog semble beaucoup plus intéressant que New Relic en termes d'application dans des environnements Kubernetes. En particulier, il prend en charge l'intégration avec NGINX Ingress, la collecte de journaux, les protocoles statsd et OpenTracing, ce qui permet de suivre la demande utilisateur depuis son initiation jusqu'à la fin du traitement, ainsi que de retrouver des journaux associés à cette demande (à la fois du cÎté du serveur web et du cÎté des consommateurs).

Lors de l'utilisation de Datadog, nous avons rencontrĂ© des problĂšmes oĂč il construisait parfois incorrectement la carte des microservices, ainsi que quelques inconvĂ©nients techniques. Par exemple, il identifiait incorrectement le type de service (prenant Django pour un service de mise en cache) et provoquait des erreurs 500 dans l'application PHP utilisant la bibliothĂšque populaire Predis.

Pas seulement avec New Relic : un aperçu de Datadog et Atatus
Atatus — l'outil le plus jeune ; le service a Ă©tĂ© lancĂ© en 2014. Son budget marketing est clairement infĂ©rieur Ă  celui des concurrents mentionnĂ©s, et ses mentions sont beaucoup plus rares. NĂ©anmoins, l'outil en soi ressemble beaucoup Ă  New Relic, non seulement par ses fonctionnalitĂ©s (APM, surveillance des navigateurs, etc.), mais aussi par son apparence.

Un inconvénient majeur est le support limité à Node.js et PHP. D'un autre cÎté, il est bien mieux réalisé que chez Datadog. Contrairement à ce dernier, Atatus ne nécessite pas de modifications des applications ni d'ajout d'étiquettes supplémentaires dans le code.

Comment nous utilisons New Relic

Voyons maintenant comment nous utilisons généralement New Relic. Imaginons que nous avons un problÚme qui nécessite une solution :

Pas seulement avec New Relic : un aperçu de Datadog et Atatus

Il est facile de remarquer une poussĂ©e — analysons-le. Dans New Relic, pour l'application web, les transactions web sont immĂ©diatement sĂ©lectionnĂ©es, le graphique de performance indique tous les composants, avec des panneaux sur le taux d'erreur et le taux de demande
 L'essentiel est que depuis ces panneaux, on peut naviguer entre diffĂ©rentes parties de l'application (par exemple, un clic sur MySQL nous amĂšne Ă  la section des bases de donnĂ©es).

Puisque dans cet exemple nous voyons une poussée d'activité PHP, clickons sur ce graphique et nous passerons automatiquement à Transactions:

Pas seulement avec New Relic : un aperçu de Datadog et Atatus

La liste des transactions, qui sont essentiellement des contrĂŽleurs du modĂšle MVC, est dĂ©jĂ  triĂ©e par Le plus consommateur de temps, ce qui est trĂšs pratique : nous voyons immĂ©diatement ce que l'application fait. Des exemples de requĂȘtes longues, qui sont automatiquement collectĂ©es par New Relic, sont Ă©galement disponibles ici. En changeant le tri, il est facile de trouver :

  • le contrĂŽleur le plus demandĂ© de l'application ;
  • le contrĂŽleur le plus souvent demandĂ© ;
  • le plus lent des contrĂŽleurs.

De plus, il est possible de développer chaque transaction et de voir ce que l'application faisait au moment de l'exécution du code :

Pas seulement avec New Relic : un aperçu de Datadog et Atatus

Enfin, l'application conserve des exemples de traces de requĂȘtes longues (qui prennent plus de 2 secondes). Voici le panneau pour une longue transaction :

Pas seulement avec New Relic : un aperçu de Datadog et Atatus

On voit que deux mĂ©thodes prennent beaucoup de temps, et en mĂȘme temps, le temps oĂč la requĂȘte a Ă©tĂ© exĂ©cutĂ©e, son URI et son domaine sont affichĂ©s. Cela aide souvent Ă  retrouver la requĂȘte dans les logs. En passant Ă  DĂ©tails de la trace, on peut voir d'oĂč ces mĂ©thodes sont appelĂ©es :

Pas seulement avec New Relic : un aperçu de Datadog et Atatus

Et dans RequĂȘtes de base de donnĂ©es — Ă©valuer les requĂȘtes aux bases de donnĂ©es qui ont Ă©tĂ© exĂ©cutĂ©es pendant le fonctionnement de l'application :

Pas seulement avec New Relic : un aperçu de Datadog et Atatus

ArmĂ©s de ces connaissances, nous pouvons Ă©valuer la cause du ralentissement de l'application et Ă©laborer avec le dĂ©veloppeur une stratĂ©gie pour rĂ©soudre le problĂšme. En rĂ©alitĂ©, New Relic ne fournit pas toujours une image claire, mais il aide Ă  choisir la direction de l'enquĂȘte :

  • long PDO::Construct nous a conduit Ă  un fonctionnement Ă©trange de pgpoll ;
  • instabilitĂ© dans le temps Memcache::Get a suggĂ©rĂ© un paramĂ©trage incorrect de la machine virtuelle ;
  • le temps de traitement de modĂšle suspectement Ă©levĂ© a conduit Ă  une boucle imbriquĂ©e vĂ©rifiant la prĂ©sence de 500 avatars dans le stockage d'objets ;
  • et ainsi de suite


Il arrive aussi que, plutĂŽt que l'exĂ©cution de code sur l'Ă©cran principal, quelque chose liĂ© au stockage externe augmente — peu importe si c'est : Redis ou PostgreSQL, — tous se cachent dans l'onglet Bases de donnĂ©es.

Pas seulement avec New Relic : un aperçu de Datadog et Atatus

Vous pouvez choisir une base de donnĂ©es spĂ©cifique pour l'analyse et trier les requĂȘtes — de la mĂȘme maniĂšre que cela se fait dans Transactions. En passant Ă  l'onglet requĂȘte, vous pouvez voir combien de fois cette requĂȘte apparaĂźt dans chacun des contrĂŽleurs de l'application, ainsi qu'Ă©valuer Ă  quelle frĂ©quence elle est appelĂ©e. C'est trĂšs pratique :

Pas seulement avec New Relic : un aperçu de Datadog et Atatus

Des donnĂ©es similaires se trouvent dans l'onglet Services externes, qui cache les requĂȘtes vers des services HTTP externes, tels que l'accĂšs au stockage d'objets, l'envoi d'Ă©vĂ©nements Ă  sentry ou quelque chose de similaire. En termes de contenu, cet onglet est totalement similaire Ă  Databases :

Pas seulement avec New Relic : un aperçu de Datadog et Atatus

Concurrents : fonctionnalités et impressions

Maintenant, la partie intĂ©ressante — comparons les capacitĂ©s de New Relic avec celles des concurrents. Malheureusement, nous n'avons pas pu tester les trois outils sur la mĂȘme version d'une application en production. Cependant, nous avons essayĂ© de comparer des situations/configurations aussi identiques que possible.

1. Datadog

Datadog nous accueille avec un tableau de bord affichant tous les services :

Pas seulement avec New Relic : un aperçu de Datadog et Atatus

Il essaie de fragmenter les applications en composants/microservices, c'est pourquoi dans l'exemple de l'application Django fourni, nous verrons 2 connexions Ă  PostgreSQL (defaultdb et postgres), ainsi que Celery et Redis. Travailler avec Datadog nĂ©cessite de vous familiariser avec les principes de MVC : il est essentiel de comprendre oĂč les requĂȘtes des utilisateurs aboutissent. En gĂ©nĂ©ral, cela est facilitĂ© par une carte des services:

Pas seulement avec New Relic : un aperçu de Datadog et Atatus

Au fait, quelque chose de similaire existe aussi dans New Relic :

Pas seulement avec New Relic : un aperçu de Datadog et Atatus


 cependant, leur carte est, à mon avis, plus simple et plus claire : elle affiche non pas les composants d'une seule application (ce qui aurait été trop détaillé, comme dans le cas de Datadog), mais uniquement des services ou microservices spécifiques.

Revenons Ă  Datadog : la carte des services montre que les requĂȘtes des utilisateurs arrivent dans Django. Passons au service Django et enfin nous verrons ce que nous attendions :

Pas seulement avec New Relic : un aperçu de Datadog et Atatus

Malheureusement, par dĂ©faut, il n'y a pas de graphique ici Temps de transaction web, similaire Ă  celui que nous voyons sur le tableau de bord principal de New Relic. Cependant, il peut ĂȘtre configurĂ© Ă  la place du graphique % de temps passĂ©. Il suffit de le basculer en Temps moyen par requĂȘte par type
 et voilĂ , le graphique familier se prĂ©sente Ă  nous !

Pas seulement avec New Relic : un aperçu de Datadog et Atatus

Pourquoi Datadog a-t-il privilĂ©giĂ© un autre graphique — cela reste un mystĂšre pour nous. Cela a aussi déçu que le systĂšme ne mĂ©morise pas le choix de l'utilisateur (contrairement aux deux concurrents), donc uniquement la crĂ©ation de tableaux de bord personnalisĂ©s nous sauve.

Cependant, nous avons Ă©tĂ© ravis de la possibilitĂ© dans Datadog de passer de ces graphiques aux mĂ©triques des serveurs associĂ©s, de lire les journaux et d'Ă©valuer la charge des gestionnaires de serveur web (Gunicorn). C'est presque comme dans New Relic
 et mĂȘme un peu plus (les journaux) !

Sous les graphiques, se trouvent les transactions, entiĂšrement similaires Ă  New Relic :

Pas seulement avec New Relic : un aperçu de Datadog et Atatus

Dans Datadog, les transactions s'appellent ressources. Les contrĂŽleurs peuvent ĂȘtre triĂ©s par le nombre de requĂȘtes, par le temps moyen de rĂ©ponse, par le temps maximum dĂ©pensĂ© pendant la pĂ©riode choisie.

Une ressource peut ĂȘtre dĂ©ployĂ©e et on peut voir tout ce que nous avons dĂ©jĂ  observĂ© dans New Relic :

Pas seulement avec New Relic : un aperçu de Datadog et Atatus

Il y a des statistiques sur la ressource, une liste rĂ©sumĂ©e des appels internes et des exemples de requĂȘtes qui peuvent ĂȘtre triĂ©s par code de rĂ©ponse
 À noter que ce tri a beaucoup plu Ă  nos ingĂ©nieurs.

Tout exemple de ressource dans Datadog peut ĂȘtre ouvert et Ă©tudiĂ© :

Pas seulement avec New Relic : un aperçu de Datadog et Atatus

Les paramĂštres de la requĂȘte sont prĂ©sentĂ©s, un diagramme rĂ©capitulatif du temps passĂ© sur chacun des composants et un diagramme en cascade, oĂč l'on voit la sĂ©quence des appels. Il est Ă©galement possible de passer Ă  une vue en arbre du diagramme en cascade :

Pas seulement avec New Relic : un aperçu de Datadog et Atatus

Et le plus intĂ©ressant — voir la charge de l'hĂŽte sur lequel la requĂȘte a Ă©tĂ© exĂ©cutĂ©e, ainsi que consulter les journaux de la requĂȘte.

Pas seulement avec New Relic : un aperçu de Datadog et Atatus

Excellente intégration !

Il peut se poser la question de savoir oĂč sont les onglets Bases de donnĂ©es et Services externes, comme dans New Relic. Ici, il n'y en a pas : Ă©tant donnĂ© que Datadog dĂ©compose l'application en composants, PostgreSQL sera considĂ©rĂ© comme un service sĂ©parĂ©, et au lieu des services externes, il faut chercher aws.storage (il en sera de mĂȘme pour chaque autre service externe auquel l'application peut faire appel).

Pas seulement avec New Relic : un aperçu de Datadog et Atatus

Voici un exemple avec postgres:

Pas seulement avec New Relic : un aperçu de Datadog et Atatus

En gros, tout ce que nous voulions est lĂ  :

Pas seulement avec New Relic : un aperçu de Datadog et Atatus

On peut voir de quel « service » est venue la requĂȘte.

Il est bon de rappeler que Datadog s'intĂšgre parfaitement avec NGINX Ingress et permet de rĂ©aliser un traçage complet depuis l'arrivĂ©e de la requĂȘte dans le cluster, tout en acceptant les mĂ©triques statsd et en collectant les journaux et les mĂ©triques des hĂŽtes.

Un énorme plus pour Datadog est que son prix se compose de la surveillance de l'infrastructure, de l'APM, de la gestion des journaux et des tests Synthetics, c'est-à-dire que l'on peut choisir un plan de maniÚre flexible.

2. Atatus

L'équipe d'Atatus affirme que leur service est « comme New Relic, mais meilleur ». Voyons si c'est vraiment le cas.

La barre supérieure ressemble effectivement à l'autre, mais il n'a pas été possible de déterminer les Redis et memcached utilisés dans l'application.

Pas seulement avec New Relic : un aperçu de Datadog et Atatus

L'APM sélectionne par défaut toutes les transactions, bien que, comme d'habitude, seules les Web soient nécessaires. Comme avec Datadog, il n'y a pas de possibilité de passer au service souhaité depuis le tableau principal. De plus, les transactions se trouvent dans la liste aprÚs les erreurs, ce qui semble peu logique pour l'APM.

Dans les transactions d'Atatus, tout ressemble beaucoup à New Relic. L'inconvénient est que la dynamique de chaque contrÎleur n'est pas immédiatement visible. Il faut la chercher dans le tableau des contrÎleurs, en triant par Most Time Consumed:

Pas seulement avec New Relic : un aperçu de Datadog et Atatus

La liste familiĂšre des contrĂŽleurs est disponible dans l'onglet Explore:

Pas seulement avec New Relic : un aperçu de Datadog et Atatus

Cette table rappelle d'une certaine maniÚre Datadog et est plus appréciée que celle de New Relic.

Chaque transaction peut ĂȘtre dĂ©veloppĂ©e pour voir ce que faisait l'application :

Pas seulement avec New Relic : un aperçu de Datadog et Atatus

Le tableau ressemble Ă©galement plutĂŽt Ă  Datadog : il y a le nombre de requĂȘtes, la vue d'ensemble des appels. La barre supĂ©rieure fournit un onglet pour les erreurs HTTP Failures et des exemples de requĂȘtes lentes Session Traces:

Pas seulement avec New Relic : un aperçu de Datadog et Atatus

Si on passe Ă  la transaction, on peut voir un exemple de traçage, obtenir une liste des requĂȘtes Ă  la base de donnĂ©es et voir les en-tĂȘtes de la requĂȘte. Tout est similaire Ă  New Relic :

Pas seulement avec New Relic : un aperçu de Datadog et Atatus

Globalement, Atatus a été ravi de fournir des traçages détaillés - sans les collages d'appels typiques de New Relic dans le bloc de rappel :

Pas seulement avec New Relic : un aperçu de Datadog et Atatus
Pas seulement avec New Relic : un aperçu de Datadog et Atatus

Cependant, il manque un filtre qui (comme dans New Relic) Ă©liminerait les requĂȘtes ultra-rapides (<5ms). D'un autre cĂŽtĂ©, l'affichage de la rĂ©ponse finale de la transaction (rĂ©ussite ou erreur) Ă©tait apprĂ©ciĂ©.

Panneau Bases de donnĂ©es aidera Ă  Ă©tudier les requĂȘtes vers les bases de donnĂ©es externes effectuĂ©es par l'application. Je rappelle qu'Atatus n'a trouvĂ© que PostgreSQL et MySQL, bien que Redis et memcached soient Ă©galement utilisĂ©s dans le projet.

Pas seulement avec New Relic : un aperçu de Datadog et Atatus

Les requĂȘtes sont triĂ©es selon des critĂšres familiers : frĂ©quence d'activation, temps de rĂ©ponse moyen, etc. Il convient de noter l'onglet prĂ©sentant les requĂȘtes les plus lentes - c'est trĂšs pratique. De plus, les donnĂ©es dans cet onglet pour PostgreSQL correspondent Ă  celles fournies par l'extension. pg_stat_statements — un excellent rĂ©sultat !

Pas seulement avec New Relic : un aperçu de Datadog et Atatus

Onglet RequĂȘtes externes est entiĂšrement identique Ă  Databases.

Conclusions

Les deux outils présentés se sont bien comportés en tant qu'APM. Chacun d'eux peut offrir le minimum nécessaire. En résumé, nous pouvons dire que :

Datadog

Avantages :

  • une grille tarifaire pratique (l'APM coĂ»te 31 USD par hĂŽte) ;
  • a trĂšs bien fonctionnĂ© avec Python ;
  • intĂ©gration avec OpenTracing
  • intĂ©gration avec Kubernetes;
  • intĂ©gration avec NGINX Ingress.

Inconvénients :

  • le seul APM qui a causĂ© une indisponibilitĂ© de l'application en raison d'une erreur de module (predis) ;
  • faible auto-instrumentation PHP ;
  • dĂ©finition partiellement Ă©trange des services et de leur but.

Atatus

Avantages :

  • instrumentation approfondie PHP ;
  • interface utilisateur similaire Ă  New Relic.

Inconvénients :

  • ne fonctionne pas sur les anciens systĂšmes d'exploitation (Ubuntu 12.05, CentOS 5) ;
  • faible auto-instrumentation ;
  • support de seulement deux langages de programmation (Node.js et PHP) ;
  • interface lente.

Étant donnĂ© le prix d'Atatus Ă  69 USD par mois pour un serveur, nous opterions plutĂŽt pour Datadog, qui s'intĂšgre parfaitement Ă  nos besoins (applications web sous K8s) et dispose de nombreuses fonctionnalitĂ©s utiles.

P.S.

Lisez aussi dans notre blog :

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster