Blog

  • Accueil
  • Blog
  • Azure Monitor : Monitoring Avancé dans Power Platform

Azure Monitor : Monitoring Avancé dans Power Platform

18 August 2024
Azure Monitor : Surveillance Avancée dans Power Platform

Dans tout écosystème applicatif moderne, la surveillance est essentielle pour assurer le bon fonctionnement et la résolution proactive des problèmes. Au sein de Power Platform, où des composants tels que les plugins personnalisés, les flux Power Automate, le JavaScript dans Dynamics 365 et les solutions Power Apps fonctionnent ensemble, une surveillance efficace peut faire la différence entre une expérience utilisateur fluide et des temps d'arrêt coûteux. C'est là qu'intervient Azure Monitor, avec Azure Application Insights comme allié puissant pour un suivi complet des données en temps réel.

Pourquoi la Surveillance est Importante

Les points suivants mettent en évidence pourquoi la surveillance est essentielle pour garantir des opérations sans faille, permettre aux équipes d'optimiser continuellement leurs systèmes et favoriser le succès à long terme.

1. Détection Proactive des Problèmes : En observant les événements de l'application, la télémétrie et les métriques de performance, vous pouvez détecter des anomalies avant qu'elles ne provoquent des temps d'arrêt.
2. Réduction du Temps Moyen de Résolution (MTTR) : Des journaux détaillés et des alertes vous permettent de localiser rapidement la cause première, réduisant ainsi le temps où votre système est vulnérable.
3. Amélioration Continue : Les insights de surveillance vous aident à optimiser l'utilisation des ressources, à affiner votre architecture et à améliorer la satisfaction des utilisateurs.
4. Fiabilité Renforcée : Grâce aux alertes et tableaux de bord en temps opportun, les équipes peuvent réagir plus rapidement aux perturbations potentielles, atténuer les dommages et protéger les opérations critiques.

Azure Monitor & Application Insights

Azure Monitor est une solution complète pour surveiller la performance et la disponibilité des applications, de l'infrastructure et des réseaux en collectant et en analysant les données de télémétrie. Application Insights, qui fait partie d'Azure Monitor, est spécifiquement conçu pour surveiller les applications, détecter les erreurs, analyser la performance et suivre l'expérience utilisateur. Il fournit une vue détaillée du comportement des applications en temps réel, aidant ainsi à optimiser continuellement les applications.
Il offre :

- Métriques en Temps Réel : Suivez les requêtes, les temps de réponse, les exceptions et les événements personnalisés.
- Alertes Proactives : Soyez notifié lorsque les seuils de performance ou les taux d'erreur dépassent les limites définies.
- Diagnostics Alimentés par l'IA : Exploitez les insights pilotés par l'IA pour repérer les anomalies et identifier rapidement les causes.
- Intégration Transparente : Grâce aux connecteurs de Power Platform, l'envoi de télémétrie vers Application Insights est simple pour les projets à base de code ou en low-code.

Utilisation d'Azure Monitor dans les Plugins, Flows et JavaScript (Dynamics 365 & Power Apps)

1. Plugins dans Dynamics 365

Avec l'intégration de Azure Application Insights, vous pouvez enregistrer toute action à partir de vos plugins C#. Qu'il s'agisse d'une erreur ou d'un autre élément à suivre, c'est possible. L'exemple ci-dessous montre comment implémenter ce comportement, en envoyant des journaux du plugin vers Azure App Insights.
Hypothèse : La clé d'instrumentation est stockée comme variable d'environnement.

  • Installer et Configurer le SDK : Référencez le package NuGet Microsoft.ApplicationInsights dans votre projet de plugin.
  • Initialiser TelemetryClient : Ajoutez votre clé d'instrumentation (souvent appelée chaîne de connexion) dans le constructeur du plugin ou dans la configuration.
  • Envoyer des Événements Personnalisés : Dans votre code de plugin, vous pouvez enregistrer des événements ou des exceptions spécifiques :
  • Surveiller dans Azure : Dans le portail Azure, vous verrez des événements, des métriques de performance et des détails d'erreur en temps réel.

using System; using System.Text; using Microsoft.Xrm.Sdk; using Microsoft.ApplicationInsights; using Microsoft.ApplicationInsights.Extensibility; using Microsoft.Xrm.Sdk.Query; public class MyAppInsightsPlugin : IPlugin { private readonly TelemetryClient telemetryClient; // Constructeur du Plugin public MyAppInsightsPlugin(string unsecureConfig, string secureConfig) { var instrumentationKey = GetEnvironmentVariable("APPINSIGHTS_INSTRUMENTATIONKEY"); if (string.IsNullOrEmpty(instrumentationKey)) { throw new InvalidPluginExecutionException("La clé d'instrumentation pour Application Insights est absente des variables d'environnement."); } var telemetryConfig = TelemetryConfiguration.CreateDefault(); telemetryConfig.InstrumentationKey = instrumentationKey; telemetryClient = new TelemetryClient(telemetryConfig); } // Méthode Execute, exécutée lorsqu'un événement est déclenché (ex : création, mise à jour ...) public void Execute(IServiceProvider serviceProvider) { ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService)); IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext)); IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory)); IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); try { tracingService.Trace("Exécution du plugin démarrée"); Entity targetEntity = (Entity)context.InputParameters["Target"]; if (targetEntity.LogicalName == "account") { telemetryClient.TrackEvent("Création de compte", new Dictionary { { "AccountId", targetEntity.Id.ToString() }, { "UserId", context.UserId.ToString() }, { "MessageName", context.MessageName } }); telemetryClient.TrackTrace($"Compte créé avec l'ID : {targetEntity.Id}"); // Écrit un message dans Azure App Insights } tracingService.Trace("Exécution du plugin terminée avec succès"); // Écrit un message dans les journaux de suivi du plugin } catch (Exception ex) { tracingService.Trace($"Exception : {ex.Message}"); // Écrit un message dans les journaux de suivi du plugin telemetryClient.TrackException(ex); // Écrit un message dans Azure App Insights throw new InvalidPluginExecutionException($"Une erreur s'est produite : {ex.Message}"); } } // Récupérer la valeur d'une variable d'environnement Power Platform par son nom private string GetEnvironmentVariable(string variableName) { IOrganizationService service = (IOrganizationService)ServiceLocator.GetService(typeof(IOrganizationService)); QueryExpression query = new QueryExpression("environmentvariablevalue") { ColumnSet = new ColumnSet("value") }; query.Criteria.AddCondition("schemaname", ConditionOperator.Equal, variableName); EntityCollection result = service.RetrieveMultiple(query); if (result.Entities.Count > 0) { return result.Entities[0]["value"].ToString(); } else { throw new InvalidPluginExecutionException($"La variable d'environnement '{variableName}' n'est pas définie."); } } }


2. Flux Power Automate

La plupart du temps, lorsque vous utilisez Dynamics 365, les flux cloud s'exécutent en arrière-plan et ne sont pas déclenchés manuellement. Cependant, il est toujours important de journaliser pour les mêmes raisons mentionnées ci-dessus.
Pour écrire un message dans App Insights depuis Power Automate, vous pouvez suivre les étapes ci-dessous :

  • Utilisez le connecteur Azure Log Analytics Data Collector : Microsoft fournit ce connecteur qui vous permet de journaliser directement des données depuis un flux vers l'espace de travail log analytics.
  • Logique de journalisation personnalisée : Lorsqu'une étape du flux s'achève (ou échoue), ajoutez une action avec le connecteur mentionné ci-dessus pour capturer les données pertinentes (par ex. statut d'exécution, paramètres utilisés).
  • Surveillance planifiée : Implémentez un flux planifié de nuit ou chaque heure pour vérifier la santé du système ou journaliser les statistiques opérationnelles (comme le nombre d'enregistrements traités). Ces données peuvent ensuite apparaître dans vos tableaux de bord Application Insights pour une analyse approfondie.



3. JavaScript dans Dynamics 365 et les applications basées sur des modèles

Dans vos formulaires, vous avez également la possibilité de suivre différents types d'événements grâce à Application Insights. Pour ce faire, vous pouvez utiliser le SDK JavaScript pour Azure App Insights.

  • Insérer le code de télémétrie : Dans vos ressources web, ajoutez l'extrait de code JavaScript d'Application Insights.
  • Initialiser l'instance App Insights
  • Suivre les événements ou les vues de page
  • Gérer les exceptions : Encapsulez la logique clé dans des blocs try-catch et envoyez les exceptions à Application Insights :
  • Analyser les interactions utilisateur : Les événements journalisés peuvent révéler quels formulaires ou composants sont les plus utilisés et quelle est leur stabilité.

L'exemple de script ci-dessous peut être attaché à l'événement onload d'un formulaire, et permettra de suivre les vues de page ainsi que de suivre un événement personnalisé.

function logToAppInsights(executionContext) { // Clé d'instrumentation Azure Application Insights var instrumentationKey = "YOUR_INSTRUMENTATION_KEY"; // Initialisation de l'objet App Insights var appInsights = window.appInsights || (function(config) { function s(config) { t[config] = function() { var i = arguments; t.queue.push(function() { t[config].apply(t, i); }); }; } var t = { config: config }, r = document, f = window, e = "script", o = r.createElement(e), i, u; for (o.src = config.url || "https://js.monitor.azure.com/scripts/b/ai.2.min.js", r.getElementsByTagName(e)[0].parentNode.appendChild(o), t.queue = [], i = ["Event", "Exception", "Metric", "PageView", "Trace", "DependencyData", "Flush"], u = 0; u < i.length; u++) s("track" + i[u]); return t; })({ instrumentationKey: instrumentationKey }); window.appInsights = appInsights; appInsights.trackPageView(); }

Vous pouvez également aller plus loin que la simple journalisation d'événements. Il est possible de suivre les exceptions depuis JavaScript en utilisant le même SDK, comme dans l'exemple ci-dessous :

try { // Opération critique } catch (ex) { appInsights.trackException({ exception: ex }); }


4. Applications Canvas et Portails Power Apps

- Utilisez les fonctionnalités de surveillance intégrées de Power Apps : Les applications canvas peuvent tirer parti de la surveillance intégrée pour les performances et les erreurs. Vous pouvez également incorporer des connecteurs personnalisés qui envoient des événements à Azure Monitor.
- Suivez les événements dans les portails : Pour les portails Power Apps basés sur le web, intégrez le JavaScript d'Application Insights afin de capturer le comportement des utilisateurs et de résoudre les problèmes.

Meilleures Pratiques

  • Définir des seuils d'alerte : Déterminez ce qui constitue des conditions normales ou critiques pour les temps de réponse, les taux d'erreur ou les modèles d'utilisation.
  • Assurer la sécurité et la conformité : Vérifiez que toutes les données journalisées respectent les exigences de conformité et de confidentialité, en évitant de journaliser des données personnelles lorsque cela n'est pas approprié.
  • Révision régulière des tableaux de bord : Surveillez activement les tableaux de bord Application Insights pour détecter les problèmes tôt, au lieu d'attendre les plaintes des utilisateurs.
  • Automatiser la gestion des incidents : Intégrez avec Azure DevOps ou d'autres systèmes de ticketing pour créer automatiquement des éléments de travail lorsque des alertes critiques sont déclenchées.
  • Combiner avec d'autres services : Exploitez Log Analytics pour des requêtes avancées et Power BI pour la visualisation des données.


Conclusion

Avec la croissance continue de Power Platform en termes de portée et de complexité, une surveillance robuste n'a jamais été aussi essentielle. Azure Monitor et Application Insights offrent une méthode holistique et polyvalente pour suivre les performances, détecter les erreurs et maintenir une approche proactive de la santé du système. Que vous personnalisiez des plugins, automatisiez des workflows avec Power Automate ou intégriez du JavaScript dans Dynamics 365 et Power Apps, l'intégration de ces outils peut considérablement réduire les temps d'arrêt et améliorer la satisfaction des utilisateurs. En configurant des alertes en temps réel, en exploitant l'analytique et en suivant les meilleures pratiques, vos solutions Power Platform resteront résilientes, optimisées et prêtes à évoluer.