web-dev-qa-db-fra.com

Quelle est la meilleure façon de surveiller votre REST API?

J'ai créé une API basée sur le modèle RESTful et je me demandais quelle était la meilleure façon de la surveiller? Puis-je en quelque sorte recueillir des statistiques sur chaque demande et à quelle profondeur pourrais-je surveiller les demandes?

En outre, cela pourrait-il être fait en utilisant un logiciel open source (peut-être en créant mon propre service de surveillance) ou dois-je acheter un logiciel tiers?

Si cela pouvait être réalisé en utilisant un logiciel open source, par où commencer?

24
0x1ad2

Commencez par identifier les besoins essentiels que vous pensez que la surveillance résoudra. Essayez de répondre aux deux questions "Qu'est-ce que je veux savoir?" et "Comment puis-je donner suite à ces informations?".

Exemples de "Qu'est-ce que je veux savoir?"

  • Performance dans le temps
  • Les plus grands utilisateurs d'API
  • Fonctions API les plus couramment utilisées
  • Occurrence d'erreur dans l'API

Exemples de "Comment puis-je agir sur ces informations?"

  • Examiner un tableau de bord des mesures connues
  • Soyez alerté lorsque quelque chose change au-delà des limites attendues
  • Exécution de trace qui a conduit à cet état
  • Revoir les mesures pendant toute la durée de vie du système

Si vous pouvez répondre à ces questions, vous pouvez soit trouver la bonne solution tierce qui capture les métriques qui vous intéressent, soit injecter des sondes de surveillance dans la bonne section de votre API qui vous diront ce que vous devez savoir. J'ai remarqué que vous êtes principalement un utilisateur Laravel , il est donc probable que de nombreuses mesures que vous souhaitez connaître puissent être capturées en ajoutant avant ( Enregistrement avant les filtres sur un contrôleur ) et après ( Enregistrement d'un filtre après application ) avec votre application, pour mesurer le temps de réponse et la réussite de la réponse. C'est là que les réponses à la première série de questions sont les plus importantes ("Qu'est-ce que je veux savoir?"), Car elles guideront où et ce que vous mesurez dans votre application.

Une fois que vous savez où vous pouvez capturer les données, sélectionner le bon outil revient à choisir entre (approximativement) deux classes d'applications de surveillance: des applications de surveillance hautement spécialisées qui sont étroitement liées au fonctionnement de votre application et un logiciel de surveillance généralisé qui est plus semblable à une base de données de séries chronologiques.

Il n'y a pas d'exemples populaires (à ma connaissance) de cas hautement spécialisés qui sont open source. De nombreuses solutions commerciales existent cependant: NewRelic, Ruxit, DynaTrace, etc. etc. etc. Leur fonction pourrait facilement être décrite comme similaire à un profileur distant, avec de nombreuses autres fonctions en plus. (N'oubliez pas non plus qu'un profileur plus traditionnel peut être utile pour collecter certaines des informations dont vous avez besoin - bien qu'il ne supplantera certainement pas la surveillance de votre application, il existe de nombreuses informations précieuses qui peuvent être glanées du profilage avant même de partir). à la production.)

Sur le plan général, il y a beaucoup plus d'options open source que je connais personnellement. La plus longue durée de vie est le graphite (une grande introduction à laquelle on peut lire ici: Mesurer tout, mesurer tout ), qui est assez utilisé par beaucoup. Le graphite est cependant de loin la seule option, et vous pouvez trouver de nombreuses autres options comme Kibana et InfluxDB si vous souhaitez vous héberger.

Beaucoup de ces options open source ont également des options hébergées disponibles auprès de plusieurs fournisseurs. De plus, vous constaterez qu'il existe de nombreuses options entièrement commerciales disponibles dans ce camp (j'en suis le fondateur, en fait :) - Instrumental ).

La plupart de ces options commerciales existent parce que les propriétaires d'applications ont trouvé assez coûteux d'exécuter leur propre infrastructure de surveillance en plus d'exécuter leur application réelle; le maintien de la disponibilité d'un autre système distribué n'est pas une priorité dans les listes de souhaits de nombreux opérateurs. :)

27
Chris Zelenak

(Je suis clairement partisan de répondre à cette question depuis que j'ai cofondé Runscope qui, je crois, est le leader de la surveillance des API, vous pouvez donc tout prendre avec un grain de sel ou faire confiance à mes années d'expérience de travail avec des milliers de clients spécifiquement sur ce problème :)

Je ne connais aucun outil OSS spécifique à la surveillance de l'API REST (ful). Les outils de surveillance des métriques OSS à usage général (comme Graphite) peuvent certainement aider à garder un œil sur des morceaux de votre pile d'API, mais n'ont pas de fonctionnalités spécifiques à l'API.

Les outils commerciaux de surveillance des métriques (comme Datadog) ou les outils de surveillance des performances des applications (APM) comme (New Relic ou AppDynamics) ont quelques fonctionnalités supplémentaires spécifiques aux cas d'utilisation des API, mais aucune n'est centrée sur celui-ci. Ceux-ci sont une partie utile de ce que nous appelons une "approche de surveillance en couches": commencez par une surveillance d'API de haut niveau et utilisez ces autres outils (trackers d'exceptions, APM, journaux bruts) pour plonger dans les problèmes lorsqu'ils surviennent.

Alors, quelles fonctionnalités spécifiques à l'API devriez-vous rechercher dans un outil de surveillance d'API? Nous les classons en fonction des trois facteurs que vous surveillez généralement: disponibilité/disponibilité, performances/vitesse et exactitude/validation des données.

Surveillance de la disponibilité

Au niveau de base, vous voudrez savoir si vos API sont même disponibles pour les clients qui ont besoin de les atteindre. Pour "public" (c'est-à-dire disponible sur Internet public, pas nécessairement publicisé ... une API de backend mobile est publique mais pas nécessairement publicisée) 'vais vouloir simuler autant que possible les clients qui les appellent. Si vous avez une application mobile, il est probable que l'API soit disponible dans le monde entier. Donc, au minimum, votre outil de surveillance d'API devrait vous permettre d'exécuter des tests à partir de plusieurs emplacements. Si votre API n'est pas accessible depuis un emplacement, vous aurez besoin de notifications par e-mail, Slack, etc.

Si votre API se trouve sur un réseau privé (pare-feu d'entreprise, environnement de transfert, machine locale, etc.), vous voudrez également la "voir". Il existe une variété d'approches pour cela (agents, VPN, etc.) assurez-vous simplement d'en utiliser une sur laquelle votre service informatique se connecte.

La distribution mondiale d'agents de test est une configuration coûteuse si vous êtes auto-hébergé, que vous construisez en interne ou utilisez un outil OSS. Vous devez vous assurer que chaque emplacement distant que vous configurez (de préférence en dehors de votre cluster principal) est également hautement disponible et entièrement surveillé. Cela peut devenir très coûteux en temps et en argent.

Suivi de la performance

Une fois que vous avez vérifié que vos API sont accessibles, vous devez commencer à mesurer la vitesse à laquelle elles s'exécutent pour vous assurer qu'elles ne ralentissent pas les applications qui les consomment. Le temps de réponse brut est la métrique minimale que vous devriez suivre, mais pas toujours la plus utile. Considérez les cas où plusieurs appels d'API sont agrégés dans une vue pour l'utilisateur, ou les actions de l'utilisateur génèrent des données dynamiques ou rarement appelées qui peuvent ne pas encore être présentes dans une couche de mise en cache. Ces tâches ou flux de travail en plusieurs étapes peuvent être difficiles à surveiller avec APM ou des outils basés sur des métriques car ils n'ont pas les capacités de comprendre le contenu des appels d'API, seulement leur existence.

La surveillance externe de la vitesse est également importante pour obtenir la représentation la plus précise des performances. Si l'agent de surveillance se trouve à l'intérieur de votre code ou sur le même serveur, il est peu probable qu'il prenne en compte tous les facteurs qu'un client réel éprouve lors d'un appel. Des choses comme la résolution DNS, la négociation SSL, l'équilibrage de charge, la mise en cache, etc.

Exactitude et validation des données

À quoi sert une API qui fonctionne rapidement si elle renvoie des données erronées? Ce scénario est très courant et constitue finalement une expérience utilisateur bien pire. Les gens comprennent "vers le bas" ... ils ne comprennent pas pourquoi une application leur montre les mauvaises données. Un bon outil de surveillance d'API vous permettra de faire une inspection approfondie des charges utiles des messages dans les deux sens. L'analyse JSON et XML, les assertions complexes, la validation de schéma, les extractions de données, les variables dynamiques, les moniteurs à plusieurs étapes et plus sont nécessaires pour valider entièrement les données envoyées d'avant en arrière.

Il est également important de valider la façon dont les clients s'authentifient auprès de votre API. De bons outils de surveillance spécifiques aux API comprendront OAuth, l'authentification mutuelle avec les certificats clients, l'authentification par jeton, etc.


Espérons que cela vous donne une idée de la raison pour laquelle la surveillance des API est différente des mesures "traditionnelles", des APM et des outils de journalisation, et comment ils peuvent tous jouer ensemble pour obtenir une image complète de votre application.

25
John Sheehan

J'utilise runscope.com pour mon entreprise. Si vous voulez quelque chose de gratuit apicombo.com peut également le faire. Fondamentalement, vous pouvez créer un test pour votre point de terminaison API pour valider la charge utile, le temps de réponse, le code d'état, etc. Ensuite, vous pouvez planifier l'exécution du test. Ils fournissent également des statistiques de base.

4
Andy Mok

J'ai essayé plusieurs applications et méthodes pour ce faire, et le meilleur (pour mon entreprise et nos projets connexes) est de consigner les paires clé = valeur (entrées atomiques avec toutes les informations associées à cette opération comme la source IP, le résultat de l'opération, écoulé heure, etc ... sur des fichiers journaux spécifiques pour chaque nœud/serveur), puis surveillez avec Splunk . Avec vos données REST et json, votre approche sera peut-être différente, mais elle est également bien prise en charge.

C'est assez facile à installer et à configurer. Vous pouvez surveiller (presque) des données en temps réel (temps de réponse, résultats des opérations), envoyer des notifications sur les événements et faire du DWH (et bien d'autres choses, il y a beaucoup de plugins).

Ce n'est pas open source, mais vous pouvez l'essayer gratuitement si vous utilisez moins de 50 Mo de journaux par jour (c'est ainsi que cela fonctionnait il y a quelque temps, car maintenant je suis sous licence d'entreprise, je ne suis pas sûr à 100%).

Voici un petit tutoriel expliquant comment réaliser ce que vous recherchez: http://blogs.splunk.com/2013/06/18/getting-data-from-your-rest-apis-into-splunk /

1
exoddus