Bonjour à tous!
Notre entreprise est engagée dans le développement de logiciels et le support technique ultérieur. Dans le cadre du support technique, vous devez non seulement corriger les erreurs, mais également surveiller les performances de nos applications.
Par exemple, si l'un des services «plante», vous devez résoudre automatiquement ce problème et commencer à le résoudre, sans attendre les appels au support technique pour les utilisateurs mécontents.
Nous avons une petite entreprise, il n'y a pas de ressources pour étudier et contenir des solutions complexes pour la surveillance des applications, il fallait trouver une solution simple et efficace.

Stratégie de surveillance
Effectuer un bilan de santé des applications n'est pas facile, cette tâche n'est pas anodine, on pourrait même dire créative. Il est particulièrement difficile de tester un système multi-liens complexe.
Comment manger un éléphant? Seulement en parties! Nous utilisons cette approche pour surveiller les applications.
L'essence de notre stratégie de surveillance:
Décomposez l'application en composants.
Pour chaque composant, proposer des contrôles de contrôle.
Un composant est considéré comme sain si toutes ses vérifications de contrôle sont effectuées sans erreur. Une application est considérée comme saine si tous ses composants sont fonctionnels.
Ainsi, tout système peut être représenté comme un arbre de composants. Les composants complexes sont décomposés en composants plus simples. Les composants simples ont des contrôles.

Les vérifications de contrôle ne doivent pas effectuer de tests fonctionnels, ce ne sont pas des tests unitaires. Les vérifications de contrôle doivent vérifier comment le composant se sent au moment actuel, s'il y a toutes les ressources nécessaires à son fonctionnement, s'il y a des problèmes.
Il n'y a pas de miracles, la plupart des contrôles devront être développés indépendamment. Mais n'ayez pas peur, car dans la plupart des cas, une vérification prend 5 à 10 lignes de code, mais vous pouvez alors implémenter n'importe quelle logique et vous comprendrez clairement comment la vérification fonctionne.
Système de surveillance
Supposons que nous divisions l'application en composants, inventons et implémentions des contrôles pour chaque composant, mais que faire des résultats de ces contrôles? Comment savons-nous qu'une sorte de contrôle a échoué?
Nous aurons besoin d'un système de surveillance. Elle effectuera les tâches suivantes:
- Recevez les résultats des tests et déterminez l'état des composants à partir d'eux.
Visuellement, cela ressemble à mettre en surbrillance l'arborescence des composants. Les composants utilisables deviennent verts, les composants défectueux deviennent rouges.
- Effectuez des vérifications générales hors de la boîte.
Le système de surveillance peut effectuer lui-même certaines vérifications. Pourquoi réinventer la roue, nous les utiliserons. Par exemple, vous pouvez vérifier que la page du site s'ouvre ou que le serveur répond.
- Envoyez des notifications de problèmes aux parties intéressées.
- Visualisation des données de surveillance, fournissant des rapports, des graphiques et des statistiques.
Brève description du système ASMO
Mieux expliqué par l'exemple. Voyons comment s'organise le suivi du fonctionnement du système ASMO.
ASMO est un système d'assistance météorologique automatisé. Le système aide les spécialistes des services routiers à comprendre où et quand il est nécessaire de traiter la route avec des matériaux antigivrants. Le système collecte des données à partir des points de contrôle du trafic. Un point de contrôle routier est un endroit sur la route où l'équipement est installé: une station météo, une caméra vidéo, etc. Pour prévoir des situations dangereuses, le système reçoit des prévisions météorologiques de sources externes.

Ainsi, la composition du système est assez typique: site Web, agent, équipement. Commençons la surveillance.
Nous divisons le système en composants
Les composants suivants peuvent être distingués dans le système ASMO:
1. Compte personnelCeci est une application Web. Au minimum, vous devez vérifier que l'application est disponible sur Internet.
2. Base de donnéesLes données importantes pour les rapports sont stockées dans la base de données; il est nécessaire de vérifier que les sauvegardes de la base de données ont bien été créées.
3. ServeurPar serveur, nous entendons le matériel sur lequel les applications s'exécutent. Il est nécessaire de vérifier l'état du disque dur, de la RAM, du CPU.
4. AgentIl s'agit d'un service Windows qui effectue de nombreuses tâches planifiées différentes. Au minimum, vous devez vérifier que le service est en cours d'exécution.
5. Tâche d'agentLe simple fait de savoir que l'agent travaille ne suffit pas. Un agent peut travailler, mais pas accomplir les tâches qui lui sont assignées. Nous divisons le composant agent en tâches et vérifions si chaque tâche d'agent fonctionne correctement.
6. Points de contrôle routier (conteneur de tous les PPM)Il existe de nombreux points de contrôle routier, nous allons donc combiner tous les MPC en un seul composant. Cela facilitera la lecture des données de surveillance. Lors de la visualisation de l'état du composant "système ASMO", il sera immédiatement clair où se trouvent les problèmes: dans les applications, le matériel ou dans MPC.
7. Point de contrôle routier (un MPC)Nous considérerons ce composant comme réparable si tous les périphériques de ce MPC sont réparables.
8. AppareilIl s'agit d'une caméra vidéo ou d'une station météo installée sur le MPC. Vous devez vérifier que l'appareil fonctionne correctement.
Dans le système de surveillance, l'arborescence des composants ressemblera à ceci:

Surveillance des applications Web
Nous avons donc divisé le système en composants, nous devons maintenant proposer des vérifications pour chaque composant.
Pour surveiller l'application Web, nous utilisons les contrôles suivants:
1. Vérification de l'ouverture de la page principaleCette vérification est effectuée par le système de surveillance. Pour son exécution, nous indiquons l'adresse de la page, le fragment de réponse attendu et le temps d'exécution maximal de la requête.
2. Vérification des conditions de paiement du domaineContrôle très important. Lorsqu'un domaine est laissé sans paiement, les utilisateurs ne peuvent pas ouvrir le site. La résolution du problème peut prendre plusieurs jours. Les modifications DNS ne sont pas appliquées immédiatement.
3. Vérification du certificat SSLDésormais, presque tous les sites utilisent le protocole https pour l'accès. Pour que le protocole fonctionne correctement, vous avez besoin d'un certificat SSL valide.
Vous trouverez ci-dessous le composant "Compte personnel" dans le système de surveillance:

Toutes les vérifications ci-dessus conviennent à la plupart des applications et ne nécessitent pas d'écriture de code. C'est génial car vous pouvez commencer à surveiller n'importe quelle application Web en 5 minutes. Vous trouverez ci-dessous des vérifications supplémentaires qui peuvent être effectuées pour une application Web, mais leur implémentation est plus complexe et spécifique pour différentes applications, nous ne les analyserons donc pas dans cet article.
Que puis-je vérifier d'autre?
Pour une surveillance plus complète de l'application Web, vous pouvez effectuer les vérifications suivantes:
- Nombre d'erreurs JavaScript par période
- Le nombre d'erreurs sur le côté de l'application Web (back-end) pour la période
- Le nombre de réponses infructueuses de l'application Web (code de réponse 404, 500, etc.)
- Temps d'exécution moyen des requêtes
Surveillance du service Windows (agent)
Dans le système ASMO, l'agent agit comme un planificateur de tâches qui, en arrière-plan, exécute des tâches planifiées.
Si toutes les tâches de l'agent réussissent, l'agent fonctionne correctement. Il s'avère que pour surveiller un agent, il est nécessaire de surveiller ses tâches. Par conséquent, nous divisons le composant Agent en tâches. Nous créerons pour chaque tâche un composant distinct dans le système de surveillance, où le composant «Agent» sera le «parent».
Nous divisons le composant Agent en composants enfants (tâches):

Nous avons donc divisé un composant complexe en plusieurs composants simples. Vous devez maintenant trouver des vérifications pour chaque composant simple. Veuillez noter que le composant parent "Agent" n'aura pas une seule vérification, car le système de surveillance calculera son état sur la base de l'état de ses composants enfants. En d'autres termes, si toutes les tâches sont terminées avec succès, l'agent fonctionne également correctement.
Il y a plus d'une centaine de tâches dans le système ASMO, est-il vraiment nécessaire de proposer des contrôles uniques pour chaque tâche? Bien sûr, le contrôle sera meilleur si, pour chaque tâche de l'agent, nous inventons et mettons en œuvre nos propres contrôles spéciaux, mais dans la plupart des cas, il suffit d'utiliser des contrôles universels.
Le système ASMO n'utilise que des vérifications universelles des tâches, ce qui suffit pour surveiller les performances du système.
Vérifier l'exécutionLa vérification la plus simple et la plus efficace est une vérification des progrès. La vérification vérifie que la tâche est en cours d'exécution et sans erreur. Toutes les tâches ont cette vérification.
Algorithme de validation
Après chaque exécution de tâche, il est nécessaire d'envoyer au système de surveillance le résultat du contrôle SUCCESS si la tâche a réussi, ou ERREUR si l'exécution a échoué.
Cette vérification vous permet de détecter les problèmes suivants:
- La tâche s'exécute, mais échoue.
- La tâche a cessé de s'exécuter, par exemple, elle a gelé.
Voyons comment ces problèmes sont résolus plus en détail.
Problème 1 - La tâche s'exécute, mais échoueVous trouverez ci-dessous le cas où la tâche est effectuée, mais de 14h00 à 16h00 échoue.

La figure montre que lorsque la tâche échoue, le signal est immédiatement envoyé au système de surveillance et l'état du contrôle correspondant dans le système de surveillance devient alarme.
Veuillez noter que dans le système de surveillance, l'état du composant dépend de l'état de la vérification. L'état d'alarme de la vérification traduira tous les composants de niveau supérieur en alarme, voir la figure ci-dessous.
Problème 2 - La tâche a cessé de fonctionner (bloquée)Comment le système de surveillance comprend-il que la tâche est gelée?
Le résultat de la vérification a un temps de pertinence, par exemple 1 heure. Si une heure s'écoule et qu'il n'y a pas de nouveau résultat de vérification, le système de surveillance définira l'état d'alarme lors de la vérification.

Dans l'image ci-dessus à 14h00, les lumières ont été éteintes. À 15h00, le système de surveillance détectera que le résultat du test (à partir de 14h00) est pourri, car le temps de pertinence a expiré (une heure), mais il n'y a pas de nouveau résultat et transférera le chèque à l'état d'alarme.
À 16h00, la lumière a été rallumée, le programme terminera la tâche et enverra le résultat au système de surveillance, l'état de vérification redeviendra un succès.
Quelle est la durée de validité du chèque?
Le temps de pertinence doit être plus long que la période d'exécution de la tâche. Je recommande de définir le temps de pertinence 2-3 fois plus longtemps que la période de la tâche. Cela est nécessaire pour ne pas recevoir de fausses notifications lorsque, par exemple, la tâche a pris plus de temps que d'habitude ou lorsque quelqu'un a rechargé le programme.
Vérification des progrèsLe système ASMO a pour tâche «Télécharger une prévision», qui une fois par heure essaie de télécharger une nouvelle prévision à partir d'une source externe. L'heure exacte à laquelle une nouvelle prévision apparaît dans le système externe n'est pas connue, mais il est connu que cela se produit 2 fois par jour. Il s'avère que s'il n'y a pas de nouvelle prévision pour plusieurs heures, alors c'est normal, mais s'il n'y a pas de nouvelle prévision pour plus d'une journée, alors quelque chose s'est cassé quelque part. Par exemple, dans un système de prévisions externe, le format des données peut changer, car ASMO ne verra pas de nouvelle version des prévisions.
Algorithme de validation
La tâche envoie le résultat du contrôle SUCCESS au système de surveillance lorsqu'il est possible d'obtenir des progrès (télécharger une nouvelle prévision météo). S'il n'y a pas de progrès ou qu'une erreur s'est produite, rien n'est envoyé au système de surveillance.
L'audit doit avoir un intervalle de pertinence tel qu'il soit garanti de recevoir de nouveaux progrès pendant cette période.

Veuillez noter que nous apprenons le problème avec un retard, car le système de surveillance attend jusqu'à ce que le temps de pertinence du dernier résultat du test expire. Par conséquent, le temps de pertinence du contrôle n'a pas besoin d'être trop long.
Surveillance de la base de données
Pour contrôler la base de données dans le système ASMO, nous effectuons les vérifications suivantes:
- Vérifier les sauvegardes
- Vérification de l'espace disque libre
Vérifier les sauvegardesDans la plupart des applications, il est important de disposer de sauvegardes de base de données en cours, afin qu'en cas de défaillance d'un serveur, vous puissiez déployer le programme sur un nouveau serveur.
ASMO crée une copie de sauvegarde une fois par semaine et l'envoie au référentiel. Une fois cette procédure terminée avec succès, le résultat du contrôle de réussite est envoyé au système de surveillance. Le résultat du contrôle a une durée de validité de 9 jours. C'est-à-dire Pour contrôler la création des sauvegardes, le mécanisme de «vérification de la progression» est utilisé, que nous avons examiné ci-dessus.
Vérification de l'espace disque libreS'il n'y a pas assez d'espace libre sur le disque, la base de données ne pourra pas fonctionner normalement, il est donc important de contrôler la quantité d'espace libre.
Il est pratique d'utiliser des métriques pour vérifier les paramètres numériques.
La métrique est une variable numérique dont la valeur est transmise au système de surveillance. Le système de surveillance vérifie les seuils et calcule l'état de la métrique.
Voici une image de ce à quoi ressemble le composant «Base de données» dans le système de surveillance:

Surveillance du serveur
Pour surveiller le serveur, nous utilisons les contrôles et mesures suivants:
1. Espace disque libreSi l'espace disque est épuisé, l'application ne pourra pas fonctionner. Nous utilisons 2 valeurs de seuil: le premier niveau est AVERTISSEMENT, le deuxième niveau est ALARME.
2. La valeur moyenne de la RAM en pourcentage par heureNous utilisons la valeur moyenne par heure, comme nous ne sommes pas intéressés par les races rares.
3. La valeur moyenne du CPU en pourcentage par heureNous utilisons la valeur moyenne par heure, comme nous ne sommes pas intéressés par les races rares.
4. Vérification PingVérifie que le serveur est en ligne. Le système de surveillance est en mesure d'effectuer cette vérification, pas besoin d'écrire du code.
Voici une image de ce à quoi ressemble le composant «Serveur» dans le système de surveillance:

Surveillance des équipements
Je vais vous dire comment les données sont reçues. Pour chaque point de contrôle routier (MPC) dans le planificateur de tâches, il existe une tâche, par exemple, "Polling MPC M2 km 200". La tâche une fois toutes les 30 minutes reçoit les données de tous les périphériques MPC.
Problème de canal de communicationLa plupart des équipements sont situés en dehors de la ville, un réseau GSM est utilisé pour la transmission de données, qui ne fonctionne pas de manière stable (c'est-à-dire qu'il n'existe pas).
En raison de défaillances fréquentes du réseau, la première vérification de l'enquête MPC dans la surveillance ressemblait à ceci:

Il est devenu clair que cela ne fonctionne pas, car de nombreuses fausses alertes ont été reçues concernant les problèmes. Ensuite, il a été décidé pour chaque appareil d'utiliser un "contrôle de progression", c'est-à-dire seul le signal de réussite est envoyé au système de surveillance lorsque l'appareil est interrogé sans erreur. Le temps de pertinence a été fixé à 5 heures.

La surveillance envoie désormais une notification des problèmes uniquement lorsque l'appareil ne parvient pas à interroger pendant plus de 5 heures. Avec un degré de probabilité élevé, ce ne sont pas de fausses alarmes, mais de vrais problèmes.
Ci-dessous est une image de ce à quoi ressemble l'équipement dans un système de surveillance:
Important!Lorsque le réseau GSM cesse de fonctionner, tous les appareils MPC ne sont pas interrogés. Pour réduire le nombre de lettres du système de surveillance, nos ingénieurs souscrivent aux notifications de problèmes de composants de type "MPC", et non "Device". Cela vous permet de recevoir une notification pour chaque MAC, plutôt que de recevoir une notification distincte pour chaque appareil.
Le schéma de surveillance final ASMO
Mettons tout cela ensemble et voyons quel type de système de surveillance nous avons.

Conclusion
Résumons.
Que nous a apporté le suivi des performances de l'ASMO?
1. Temps de dépannage réduitNous avions l'habitude d'en savoir plus sur les défauts des utilisateurs, mais tous les utilisateurs ne signalent pas de défauts. Il se trouve que nous avons découvert le dysfonctionnement d'un composant du système une semaine après son apparition. Maintenant, le système de surveillance nous informe des problèmes dès que le problème est détecté.
2. Stabilité accrue du systèmeComme les défauts ont commencé à être corrigés plus tôt, le système dans son ensemble a commencé à fonctionner de manière beaucoup plus stable.
3. Réduire le nombre d'appels au support techniqueDe nombreux problèmes sont désormais résolus avant que les utilisateurs ne les découvrent. Les utilisateurs ont moins de contact avec le support technique. Tout cela a un bon effet sur notre réputation.
4. Accroître la fidélité des clients et des utilisateursLe client a remarqué des changements positifs dans la stabilité du système. Les utilisateurs sont moins susceptibles de rencontrer des problèmes avec le système.
5. Réduisez les coûts de support techniqueNous avons arrêté d'effectuer manuellement des vérifications. Désormais, tous les contrôles sont automatisés. Nous avions l'habitude de connaître les problèmes des utilisateurs, il était souvent difficile de comprendre de quel problème l'utilisateur parlait. Maintenant, la plupart des problèmes sont signalés par le système de surveillance, les notifications contiennent des données techniques, sur lesquelles il est toujours clair quoi et où il s'est cassé.
Important!Vous ne pouvez pas installer un système de surveillance sur le même serveur sur lequel vos applications s'exécutent. Si le serveur tombe en panne, les applications cesseront de fonctionner et il n'y aura personne pour envoyer une notification à ce sujet.
Le système de surveillance doit fonctionner sur un serveur distinct dans un autre centre de données.
Si vous ne souhaitez pas utiliser de serveur dédié dans le nouveau centre de données, vous pouvez utiliser le système de surveillance cloud. Notre entreprise utilise le système de surveillance cloud Zidium, mais vous pouvez utiliser tout autre système de surveillance. Le coût d'un système de surveillance cloud est inférieur à la location d'un nouveau serveur.
Recommandations:- Cassez les applications et les systèmes sous la forme d'une arborescence de composants avec autant de détails que possible, il sera donc pratique de comprendre où et ce qui s'est cassé, et le contrôle sera plus complet.
- Pour vérifier l'intégrité d'un composant, utilisez les vérifications. Il vaut mieux utiliser beaucoup de contrôles simples que complexes.
- Les valeurs métriques de seuil sont configurées sur le côté du système de surveillance et n'écrivent pas dans le code. Cela vous évitera de recompiler, de reconfigurer ou de redémarrer l'application.
- Pour les contrôles utilisateurs, utilisez le temps de pertinence avec une marge afin de ne pas recevoir de fausses notifications car certains contrôles ont pris un peu plus de temps que d'habitude.
- Essayez de vous assurer que les composants du système de surveillance ne deviennent rouges qu'en cas de problème. S'ils deviennent rouges pour rien, vous cesserez de prêter attention aux notifications du système de surveillance, sa signification sera perdue.
Si vous n'utilisez pas déjà un système de surveillance, commencez! Ce n'est pas aussi difficile qu'il y paraît. Prenez de la hauteur en regardant l'arbre des composants verts que vous avez cultivé vous-même.Bonne chance