Intégrer les logs Nginx dans Azure OMS – Log Analytics

Nginx

Pour héberger votre site web, vous utilisez peut-être le serveur web Nginx qui propose des fonctionnalités intéressantes notamment pour des sites à fort trafic : load balancing, cache, performances élevées, faible consommation mémoire, reverse proxy. On peut d’ailleurs noter l’utilisation de Nginx par des noms connus tels que Netflix et Uber.

Nginx est surtout connu pour sa faible consommation mémoire et son efficacité pour gérer du contenu statique. Il est donc fréquemment utilisé pour servir des fichiers statiques et comme proxy pour les requêtes dynamiques à acheminer vers des serveurs applicatifs.

Puisque Nginx fonctionne rarement seul pour héberger votre site web, les visites sur ce dernier ont des répercussions sur d’autres briques de votre SI. Afin de faire des analyses sur l’utilisation ou la performance de votre site web il est important d’exploiter les logs remontés par Nginx mais aussi de les corréler avec logs des autres briques du SI.

Log Analytics – OMS

Si vous utilisez déjà Azure, vous avez peut-être connaissance de Log Analytics, service d’OMS (Operation Management Suite), qui vous permet de collecter simplement les données générées par vos ressources Azure, aussi bien IaaS que PaaS. Vous avez également la possibilité de remonter les données issues de vos environnements On-Premise sans plus de difficultés. C’est donc l’outil qui vous permettra, dans Azure, de centraliser vos logs.

Nous allons donc voir comment configurer Log Analytics pour remonter les logs Nginx, en extraire les données intéressantes et comment faire des requêtes sur ses logs.

Installation de l’agent sur vos VMs

La première chose à faire est de configurer les VMs sur lesquelles Nginx est installé (Linux) pour que celles-ci apparaissent dans Log Analytics. Cette opération est très simple et la documentation Microsoft est suffisante :

Après cette opération, les compteurs de performance de vos machines doivent remonter dans Log Analytics.

Configuration de custom logs

Afin d’ajouter des logs contenus dans des fichiers plats, tels que ceux de Nginx, il faut configurer des « Custom Logs » dans Log Analytics.

Attention : La fonctionnalité « Custom Logs » étant encore en preview, il faut au préalable activer cette fonctionnalité dans la partie « Settings » puis « Preview Features ».

Lorsque la fonctionnalité est bien activée, dans la partie « Settings » du portail OMS, vous pourrez accéder à la partie « Data » et vous pourrez configurer ces « Custom Logs » en cliquant sur « Add + ».

Sélectionnez ensuite un fichier de logs d’exemple.

Sélectionnez alors le type de délimiteur puis vous pourrez visualiser le rendu.

  • Le délimiteur « New Line » est utilisé dans le cas où vous avez une entrée par ligne.
  • Le délimiteur « Timestamp » peut être utilisé dans les cas où vos entrées sont sur plusieurs lignes. Dans ce cas, elles doivent être délimitées par une date et une heure en début de ligne.

Remarque: Le champ « TimeGenerated » remonté dans OMS dépend du délimiteur choisi. On aura :

  • La date et l’heure à laquelle l’entrée est stockée dans OMS pour le délimiteur « New Line ».
  • La date et l’heure indiquées dans le fichier pour chaque entrée pour le délimiteur « Timestamp ».

Configurez ensuite le chemin dans lequel l’agent pourra récupérer le fichier des logs.

Pour finir, choisissez un nom et une description pour votre nouveau type de données. Le nom sera forcément suffixé « _CL » comme… Custom Logs 🙂

Vous pouvez maintenant patienter un bon moment (jusqu’à 1h) avant de voir apparaître vos logs Nginx. Dans le champs de recherche Log Analytics, exécutez la requête suivante pour voir les logs.

Extraction des champs

Maintenant que les logs Nginx remontent dans Log Analytics, vous devez voir les champs suivants :

  • SourceSystem
  • TimeGenerated
  • ManagementGroupName
  • ComputerName
  • RawData

Le contenu des lignes du fichier de logs est inséré dans le champ « RawData » sans aucun formatage. Dans le but de simplifier nos requêtes, nous allons extraire des informations de ce contenu brut et créer de nouveaux champs.

Nginx remonte des logs des requêtes http, nous pouvons donc prendre les mêmes informations que l’on retrouve dans les logs IIS (gérés automatiquement par OMS). Prenons par exemple :

  • Client Referer : l’URL visitée par le client. Cette URL fournissait un lien vers notre site
  • Client IP : adresse IP du client
  • Client Statut : statut http
  • Client Uri Stem : l’URI de la cible, l’action
  • Client Method : méthode http
  • User Agent : le navigateur utilisé par le client

Afin de créer de nouveaux champs à partir de ces informations contenues dans le champ « RawData », partez de la requête faite dans Log Analytics. En cliquant sur les « … » à côté du champ « RawData », vous pourrez cliquer sur « Extract fields from… ».

Une vue va s’afficher pour vous permettre de faire vos extractions. Pour extraire vos champs, voici comment procéder :

  • Sélectionner la portion du champ « RawData » qui vous intéresse. Celle-ci doit être en surbrillance dans le panneau de gauche.
  • Un encart s’affichera pour que vous puissiez indiquer le nom souhaité pour ce nouveau champ ainsi que le format de la donnée.
  • Dans le panneau du milieu, vous aurez alors un aperçu de la valeur extraite pour chaque entrée. Si certains résultats sont incorrects, sélectionnez les entrées concernées puis redéfinissez la valeur souhaitée pour l’extraction en la passant en surbrillance. Un nouveau calcul sera effectué et affiché dans le panneau du milieu.
  • Une fois que le résultat est correct, sauvegardez votre extraction.

Vous avez votre nouveau champ 🙂

Faites la même manipulation pour tous les champs souhaités.

Requêtes

Le champs de recherche « Log Search » vous permettra évidemment d’effectuer des requêtes sur ces données.

Une mise à jour importante mais facultative est proposée au niveau du workspace OMS. Cette mise à jour a un impact sur le langage utilisé pour effectuer vos requêtes. Si vous avez déjà des dashboards personnalisés, les requêtes seront traduites dans la plupart des cas mais des ajustements seront sûrement nécessaires.

En revanche, si vous n’avez pas encore d’éléments personnalisés, je vous conseille de passer directement à la nouvelle version qui offre plusieurs avantages :

  • Un accès au portail Analytics (le même que celui proposé avec Applications Insights jusque-là).
  • Utilisation du langage « Azure Log Analytics Query Language » : langage utilisé dans le portail Analytics, même si vous restez dans le portail OMS. Ce qui vous évite de devoir maîtriser un langage supplémentaire si vous utilisez déjà Application Insights.
  • Bénéficier de la puissance de recherche de ce nouveau langage. La différence en termes de temps de calcul entre l’ancienne et la nouvelle version est flagrante !
  • Profiter de toutes les nouvelles fonctionnalités offertes par ce langage : traitement sur les champs (extraction, concaténation…), jointures, fonctions de date et d’heure…
  • Meilleure intégration avec PowerBI

Note : Ne pas confondre Log Analytics et Analytics. Analytics est un outil de recherche et de requête utilisé jusque-là pour Application Insights uniquement. La nouvelle version du workspace OMS permet de bénéficier de cet outil avec Log Analytics également. Pour plus d’informations : Azure Log Analytics Query Language

Note : vous trouverez plus d’informations sur Application Insights Introduction à Application Insights

Exemple de recherche simple dans le portail Analytics lié au workspace OMS :

Les jointures proposées par ce nouveau langage vous permettront de faire des corrélations entre vos logs issus de Nginx et les logs remontés dans OMS par vos autres serveurs applicatifs, applications etc… et ainsi faire des analyses plus fines.

Conclusion

Cet exemple vous montre comment remonter les logs Nginx dans OMS, mais surtout comment remonter des logs de n’importe quel fichier plat dans OMS pour une meilleure exploitation de ces derniers 🙂

livre blanc From Zero to Hero 1 Infra as code

Pas de commentaire

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *