web-dev-qa-db-fra.com

Suivi des applications Web Meilleures pratiques

Nous terminons notre application Web et notre planification de déploiement. Un aspect très important du déploiement de la production est de surveiller la santé du système. Avoir une petite équipe de développeurs/support rend très critique pour que nous obtenons la notifications précoces des problèmes potentiels et les résoudre avant d'avoir une incidence sur les utilisateurs.

Utiliser des coutures Nagios comme une bonne option, mais je voulais obtenir plus d'opinions sur quels sont les meilleurs outils/pratiques de surveillance de l'application Web en général et spécifiquement pour Django application? Aussi les recommandations sur ce qui devrait Soyez surveillé à part de la CPU évidente, de la mémoire, de l'espace disque, de la connectivité de la base de données.

Notre application Web est écrite à Django, nous exécutons sur Linux (Ubuntu) sous Apache + Fast CGI avec la base de données PostgreSQL.

ÉDITER Nous avons un environnement complètement virtualisé sous Linode.

ÉDITER Nous utilisons Django-Logging afin que nous ayons une façon de séparer des informations, des erreurs, des problèmes critiques, etc.

76
Sergey Golovchenko

Nagios est bon, il est bon de pouvoir avoir des tests système (sélénium) en cours d'exécution régulièrement.

EDIT: HYPERIC et Taux de base aussi intéressant.

Il y a probablement un système de suites de test qui peut également utiliser la pression tout aussi pour vous. Je ne me souviens pas du nom du sommet de ma tête, peut-être que quelqu'un peut en parler un ci-dessous.

D'autres choses que j'aime faire:

La meilleure devise pour l'infrastructure est toujours corrigée, détecte, réparation. Obtenez-le, arrivez à la racine de celui-ci et guérir/l'empêcher si vous le pouvez.

Étant donné qu'un système existe à plusieurs niveaux, nous devrions tester à de nombreux niveaux:

EDIT: Ayez toutes les erreurs ou avertissements postés directement à votre gestionnaire de cas par courrier électronique. De cette façon, vous pouvez suivre les événements au même endroit.

1) connexion : Surveillez votre connectivité Internet du serveur et de l'extérieur. Connectez-vous quelque part

2) serveur : Surveillez tous les processus nécessaires pour vous assurer qu'ils sont en cours d'exécution et ne pas épingler le serveur. Utilisez un serveur HP ou quelque chose d'équivalent avec une notification d'échec du matériel qu'il peut faire à partir d'un niveau de BIOS. Notifier et se connecter s'ils sont.

3) logiciel : Identifiez le logiciel clé qui doit toujours être en cours d'exécution. Définissez les niveaux de performance le cas échéant, puis sur le surveiller. Nagios devrait être capable d'aider avec cela. Sous Windows, il peut être un peu plus. Lorsqu'une exception se produit, vous devriez pouvoir exécuter un script à partir de celui-ci pour redémarrer les processus automatiquement. Mon système de rêve me permet d'interagir avec des serveurs via SMS Si le serveur le voit comme une exception que je dois soit une exception, ou une autre qui se produira automatiquement à moins que je n'annule pas par SMS. Un jour ..

4) Remote Power : Assurez-vous que les capacités de réinitialisation de courant distante sont dans votre main. Vous voudrez peut-être planifier des redémarrages hebdomadaires si vous utilisez déjà Windows pour quoi que ce soit.

5) Test de la logique d'entreprise : Vous pouvez utiliser régulièrement des scripts testant le flux de travail de votre système. Le sélénium peut probablement en réaliser une partie de cela, mais j'aime bien connecter les résultats pour dire que cela a couru à cette époque et ces fichiers avaient des erreurs. Si possible n'importe où, faites surveiller le système sur vos scripts.

6) Backups : Faites une sauvegarde que vous pouvez définir et oublier. Si vous pouvez obtenir des choses dans des machines virtuelles, il serait idéal que vous pouvez accabler, bouger ou déployer une partie de votre infrastructure n'importe où. J'ai eu des instances où j'ai déplacé un serveur mort sur mon ordinateur portable, laissez-le courir dans VMware pendant que je corrige un problème.

37
Jas Panesar

Surveillance du nombre de connexions à votre serveur Web et votre base de données est une autre bonne chose à suivre. Les chances sont si on tire à travers le toit, quelque chose meurt de faim pour les ressources et le site est sur le point de descendre.

Assurez-vous également de disposer d'une demande régulière d'une URL qui est un test de bout en bout raisonnable du système. Si votre site prend en charge la recherche, alors Nagios exécute une recherche - qui devrait s'assurer que l'index de recherche est sain, le serveur Web et le serveur de base de données.

Assurez-vous également que vos applications vous envoient un courrier électronique à tout moment à vos utilisateurs de voir une erreur ou une exception non gérée. De cette façon, vous savez comment l'application échoue sur le terrain.

13
Cameron Pope

Si je devais choisir un type de test, il serait de tester la fonctionnalité de l'utilisateur final du système. La chose importante à considérer est l'utilisateur. Tout en testant des éléments tels que la disponibilité de la base de données, le poste de serveur, etc., sont tous importants, testez les flux de travail via votre système via un système de test UI distant couvre toutes ces bases. Si vous savez que les parties critiques de votre système sont disponibles pour l'utilisateur final, vous savez que votre système est prolongé.

  1. Identifiez les importants flux de travail de votre système. Par exemple, si vous avez écrit un site de commerce électronique, vous pouvez identifier un flux de travail de "Recherche d'un produit, mettre le produit dans le panier d'achat et acheter du produit" .
  2. prioriser les flux de travail et construire d'abord des tests de priorité plus élevés. Vous pouvez toujours ajouter des tests supplémentaires après avoir déployé la production.
  3. Construisez des tests d'interface utilisateur à l'aide de l'un des cadres de test d'interface utilisateur disponibles. Il existe un certain nombre de cadres de test d'interface utilisateur gratuite et commerciaux pouvant être exécutés de manière automatisée. Construisez d'abord un ensemble de tests de base qui répondent aux flux de travail critiques.
  4. Configurez au moins un emplacement distant à partir de laquelle exécuter des tests. Vous souhaitez tester tous les aspects de votre système, ce qui signifie le tester à distance. La connexion Internet est-elle up? Le serveur Web est-il exécuté? La connexion au serveur de base de données fonctionne-t-elle? Etc, etc. Si vous testez à distance, vous vous assurez que votre système est disponible pour le monde extérieur, ce qui signifie qu'il fonctionne très probablement de bout en bout. Vous pouvez également exécuter ces tests en interne, mais je pense qu'il est essentiel de les exécuter de manière externe.
  5. Assurez-vous que votre solution inclut à la fois des rapports et une notification. Si l'un de vos tests critiques de travail de travail échoue, vous voulez que quelqu'un sache à ce sujet pour résoudre le problème dès que possible. Si une tâche non critique échoue, vous ne voulez peut-être que des rapports afin que vous puissiez résoudre les problèmes hors bande.

Ce test d'utilisateur final ne devrait pas éliminer la surveillance du système dans votre centre de données, mais je souhaite réitérer que le test d'utilisateur final est le type de test le plus important que vous puissiez faire pour une application Web.

12
Jason Jackson

Ahhh, surveillance. Comment je t'aime et vos vibrations à 3h du matin.

Essentiellement, vous avez besoin d'un moyen d'inspecter l'état interne de votre application, à la fois à un moment donné, ainsi que sur des effectifs de temps (ce dernier est très important pour la détection des problèmes avant de se produire). Une autre façon d'y penser est comme des essais unitaires glorifiés.

Nous avons notre propre système de surveillance (très agréable), donc je ne peux pas commenter sur Nagios ou d'autres applications. Notre cas d'utilisation est similaire à celui de la vôtre, mais (CGI App sur Apache).

  1. Ajouter une méthode de type Logging.Monitor (), qui connectera les informations sur le disque. Cela devrait en prendre en charge, au minimum, les numéros simples et les dicts de nombres (la clé => peut être incroyablement pratique).
  2. Avoir un processus qui racle les journaux de surveillance et les stocke dans une base de données.
  3. Avoir un processus qui prend les informations de base de données, les vérifie contre les règles et envoie des alertes. Gardez à l'esprit que quelque chose peut être flaky. Ce n'est pas parce que vous avez un 404 ne fois ne signifie pas l'application.
  4. Avoir un moyen de couper les alertes (très utile pour la maintenance ou de lire votre email).

C'est tout assez élevé. L'important est que vous ayez une histoire de l'état de l'application au fil du temps. À partir de là, vous pouvez ensuite créer des règles (peut-être que des requêtes SQL brutes que vous mettez dans une configuration quelque part), qui disent "si les requêtes par seconde ont doublé, envoyez une alerte SLASHDOTTED" ou "si 50% des réponses sont 404, envoyez une alerte". Il lit également la gestion parce que vous pouvez quantifier tout commentaire sur la question de savoir si elle est haut, bas, rapide ou lente.

Les activités suivantes comprennent (d'autres personnes les ont probablement mentionnées également): État HTTP, port accessible à HTTP, charge HTTP, charge de la base de données, connexion ouverte, latence de la requête, accessibilité du serveur (ssh, ping), requêtes par seconde, nombre de processus de travail, pourcentage d'erreur , taux d'erreur.

Des tests simples de bout en bout sont également très utiles, bien qu'ils puissent être fragiles. Il est préférable de les garder simples, mais vous devez en avoir un qui tente de toucher les pièces de base de l'application (mise en cache, base de données, authentification).

8
Richard Levasseur

J'utilise munin et Monit et ont été très heureux avec les deux.

6
Carl Meyer

La journalisation interne est fine et dandy, mais lorsque toute votre application diminue ou votre boîte/Enviro vous bloque, vous avez également besoin d'un chèque extérieur. http://www.pressdom.com/ a été très fiable pour moi.

Mon seul autre conseil est que je ne passerais pas Trop Temps à ce sujet. Mon meilleur exemple est Twitter, quelle quantité d'énergie a-t-elle été mise dans le système pouvant être capable de devenir à moitié mortelle au lieu d'investir ce temps et de l'énergie à jeter plus de matériel/à l'échec.

Les chances sont ce qui finit par vous enlever, vos systèmes de journalisation et de santé auront quand même manqué.

5

Le moyen le plus important de surveiller tous les sites en ligne est de surveiller l'extérieur. L'objectif devrait être de surveiller votre site d'une manière qui reflète le mieux la façon dont vos utilisateurs utilisent le site. Dans 99% des cas, dès que vous savez que votre site est à l'extérieur, il est relativement facile de trouver la cause racine. La chose la plus importante est de savoir le plus tôt possible que vos clients ne parviennent pas à charger votre site.

Cela signifie généralement l'utilisation d'un service de surveillance de la performance externe. Ils très du très bas de gamme (mon.itor.us, Pingdom) à l'extrémité supérieure (Webmetrics, Gomez, Keynote). Et comme toujours, vous obtenez ce que vous payez. Les choses à chercher lorsque vous magasinez pour un service de surveillance comprennent:

  • La taille et la distribution du réseau de surveillance
  • Que ce soit ou non la solution de surveillance est en mesure de surveiller votre site en utilisant un navigateur réel (sinon vous ne testez pas votre site comme un utilisateur réel serait)
  • Le langage de script (à un script pour les transactions contre votre site)
  • Le service d'assistance pour vous aider sur le chemin, et fournir une expertise sur la façon de surveiller correctement

Bonne chance!

4
lennysan

Surveillance Web par Patrol IP ou SitesEntry ont été utiles pour nous. La seconde est un peu comme le site confiance mais légèrement plus jolie lol.

3
greg84

En plus de ce qu'il faut surveiller, qui a déjà été répondu, vous devez vous assurer que vous utilisez uniquement - que vous obtenez seulement une notification d'une erreur qui se produit plusieurs fois, sur chaque demande. Ou votre boîte de réception va sortir de la mémoire :) plus, c'est un simple ennuyeux ...

Divisez les changements de secours parmi l'équipe Support/Dev, une personne ne doit donc pas nécessairement être appelée chaque soir. Cela portera des gens vers le bas. La surveillance est un bonne chose, mais tout le monde a besoin d'avoir une chance d'avoir une vie de temps en temps. Votre téléphone portable bourdonnant à 2 heures du matin pendant quelques nuits obtiendrez très vieille belle bientôt, croyez-moi. Et tous les développeurs ne sont pas utilisés pour le support 24/7, vous devez donc trouver l'équilibre entre utiliser la surveillance et la suppression de la surveillance.

Fondamentalement, avoir des niveaux d'escalade distincts, et si le ciel ne tombe pas, définissez une " sérénité maintenant " La fenêtre la nuit où des niveaux d'escalade plus petits ne sortent pas.

2
Andrei Taranchenko

Avez-vous pensé à surveiller la fonctionnalité aussi? Un script (soit dans un langage de script comme Perl ou Pyton ou à l'aide de certains outils comme WebTest ) qui parle à votre application et fait quelques étapes importantes comme la connexion à la journalisation, de faire un achat, etc. est très agréable d'avoir .

2
innaM

J'utilise Nagios + Cruisecontrol + sélénium pour exécuter des tests de haut niveau sur des applications Web critiques. J'ai été brûlé assez fort par une simple erreur de jQuery qui empêchait les utilisateurs de procéder à un formulaire d'inscription en ligne.

http://www.agileatwork.com/tholy-trinity-Of-Web-2-0-Application-Monitoring/

2
Mike Valenty

Vous pouvez jeter un coup d'œil à AlertGrid . Cette application Web vous permet de filtrer et de transférer des alertes à votre équipe (dans le monde entier). Il a également une bonne capacité à surveiller si quelque chose ne s'est pas produit.

2
dzida

il est bon d'avoir peut-être des tests système (sélénium) en cours d'exécution régulièrement.

=> 100% ack. Nous utilisons http://www.alertfox.com pour cela. Avec notre compte Pro2, ils gèrent un test de régression jamais 1H qui est génial. Vous pouvez même le faire avec leur compte gratuit, mais ne sont limités qu'à un seul capteur de transaction.

1
TimReiner

Pour paraphraser Richard Levasseur: Ah, outils de surveillance, comment vos imperfections me frustre. Il ne semble pas y avoir un outil parfait; Nagios est assez facile à mettre en place, mais l'interface utilisateur est un peu vieux jeu et vous devez avoir un démon en cours d'exécution sur chaque serveur surveillé. ZENOSS a une interface utilisateur beaucoup plus agréable, y compris des graphiques de tendance d'utilisation des ressources, mais il utilise SNMP afin que vous puissiez avoir une certaine familiarité avec cela pour le faire fonctionner correctement et que la documentation n'est pas la meilleure - il y a des centaines des pages mais il est vraiment difficile de trouver uniquement les informations dont vous avez besoin pour commencer.

Les amis de la mine ont également recommandé cacti et hyperic , mais je n'ai pas d'expérience personnelle avec ceux-ci.

Une dernière chose - l'une des autres réponses suggérées à exécuter un outil qui souligne votre site. Je ne recommanderais pas de faire cela sur votre site en direct, sauf si vous avez une période de calme fiable lorsque personne ne le frappe; Même alors, vous pourriez l'amener inopinément. Bien mieux d'avoir un serveur de mise en scène dans lequel vous pouvez exécuter des tests de charge avant de mettre des modifications à la production.

1
gareth_bowles

J'ajouterais simplement que vous pouvez prédire un peu de probabilité d'erreur en fonction de l'histoire des erreurs passées et de les avoir réparées. Avec des tests internes à petite échelle si vous deviez graphiquement graphiquement la fréquence et la gravité des problèmes qui ont été corrigés à ce point, vous aurez un aperçu des nouveaux problèmes prévisibles. Si tout a fonctionné sans erreur pendant un certain temps, les deux sources de problèmes seraient des changements récents ou des problèmes d'évolutivité.

De ce qui précède, cela ressemble à l'évolutivité est votre seul inquiétude, mais je mentionne simplement le test de fréquence des erreurs passées, car les équipes que j'ai constatées sont invariablement pensées qu'ils ont obtenu la dernière erreur corrigée et qu'il n'y en a plus. Jusqu'à ce qu'il y ait.

0
Qualsmith

Un de nos clients utilise Techout (www.techout.com) et est très satisfait du service.

Il n'y a pas de frais pour les alertes, quel que soit le genre ou le nombre quelconque, et ils offrent un email, une messagerie vocale et SMS Alertes - et si quelque chose de major se produit, un appel téléphonique d'une personne vivante pour aider tu sors.

Tout est basé sur le service - vous n'installez pas le logiciel et vous avez un consultant qui travaille avec vous pour déterminer la meilleure approche pour votre entreprise. C'est l'un des services les plus pratiques surveillance des applications Web car ils s'occupent de tout.

0
onthecloud

Changer la ligne un peu, quelque chose que je pense vraiment est utile et changé beaucoup comment je surveillez mes applications consiste à enregistrer des exceptions javascript quelque part. Il y a une très belle implémentation qui se connecte directement à partir de navigateurs d'utilisateurs à Google Analytics. Ceci est un must pour les applications Web centrées sur JavaScript et peut vous donner des résultats basés directement sur les navigateurs de l'utilisateur Ce qui peut conduire à des erreurs très inattendues (c'est-à-dire et navigateur mobile.

Disclaimer: mon post ci-dessous

http://www.directperformance.com.br/fr/javascript-debug-simples-com-google-analytics

0
Eduardo