Partager via


Journalisation avec Elastic Stack

Conseil

Ce contenu est un extrait du livre électronique, Cloud Native .NET apps for Azure (Architecture d’applications .NET natives cloud pour Azure), disponible dans la documentation .NET ou au format PDF à télécharger gratuitement pour le lire hors connexion.

Cloud Native .NET apps for Azure eBook cover thumbnail.

Il existe de nombreux outils de journalisation centralisés, et ils varient en coût d’outils gratuits et open source à des options plus coûteuses. Dans de nombreux cas, les outils gratuits sont aussi bons que les offres payantes. Un tel outil est une combinaison de trois composants open source : Elasticsearch, Logstash et Kibana.

Collectivement, ces outils sont appelés Elastic Stack, ou pile ELK.

Elastic Stack

Elastic Stack est une option puissante pour collecter des informations à partir d’un cluster Kubernetes. Kubernetes prend en charge l’envoi de journaux à un point de terminaison Elasticsearch, et pour la majorité des cas, tout ce dont vous avez besoin pour commencer est de définir les variables d’environnement comme indiqué à la figure 7-5 :

KUBE_LOGGING_DESTINATION=elasticsearch
KUBE_ENABLE_NODE_LOGGING=true

Figure 7-5. Variables de configuration pour Kubernetes

Cette étape installe Elasticsearch sur le cluster et cible l’envoi de tous les journaux de cluster à celui-ci.

An example of a Kibana dashboard showing the results of a query against logs ingested from KubernetesFigure 7-6. Exemple d’un tableau de bord Kibana montrant les résultats d’une requête sur les journaux ingérés à partir de Kubernetes

Quels sont les avantages d’Elastic Stack ?

Elastic Stack fournit une journalisation centralisée de manière économique, évolutive et conviviale pour le cloud. Son interface utilisateur simplifie l’analyse des données afin que vous puissiez passer votre temps à glaner des insights à partir de vos données au lieu de lutter avec une interface confuse. Il prend en charge une grande variété d’entrées. Ainsi, à mesure que votre application distribuée s’étend sur des types de services de plus en plus nombreux et différents, vous pouvez vous attendre à pouvoir continuer à alimenter le système en données de journal et en métriques. La pile élastique prend également en charge les recherches rapides, même dans des jeux de données volumineux, ce qui permet même aux applications volumineuses de consigner des données détaillées et d’avoir toujours une visibilité sur celles-ci de manière performante.

Logstash

Le premier composant est Logstash. Cet outil permet de collecter des informations de journal à partir d’une grande variété de sources différentes. Par exemple, Logstash peut lire les journaux à partir du disque et recevoir des messages provenant de bibliothèques de journalisation comme Serilog. Logstash peut effectuer un filtrage et une expansion de base sur les journaux à mesure qu’ils arrivent. Par exemple, si vos journaux contiennent des adresses IP, Logstash peut être configuré pour effectuer une recherche géographique et obtenir un pays, une région ou même une ville d’origine pour ce message.

Serilog est une bibliothèque de journalisation pour les langages .NET qui permet de paramétrer la journalisation. Au lieu de générer un message de journal textuel qui incorpore des champs, les paramètres sont conservés séparément. Cette bibliothèque permet un filtrage et une recherche plus intelligents. Un exemple de configuration de Serilog pour l’écriture dans Logstash apparaît dans la figure 7-7.

var log = new LoggerConfiguration()
         .WriteTo.Http("http://localhost:8080")
         .CreateLogger();

Figure 7-7. Configuration de Serilog pour écrire des informations de journal directement dans Logstash sur HTTP

Logstash utilise une configuration comme celle indiquée dans la figure 7-8.

input {
    http {
        #default host 0.0.0.0:8080
        codec => json
    }
}

output {
    elasticsearch {
        hosts => "elasticsearch:9200"
        index=>"sales-%{+xxxx.ww}"
    }
}

Figure 7-8. Configuration de Logstash pour l’utilisation des journaux à partir de Serilog

Pour les scénarios où une manipulation de journaux étendue n’est pas nécessaire, il existe une alternative à Logstash appelée Beats. Beats est une famille d’outils qui peuvent collecter un large éventail de données, de journaux à des données réseau et des informations de durée de bon fonctionnement. De nombreuses applications utilisent à la fois Logstash et Beats.

Une fois que les journaux ont été rassemblés par Logstash, il lui faut un endroit où les placer. Bien que Logstash prenne en charge de nombreuses sorties différentes, l’une des plus intéressantes est Elasticsearch.

Elasticsearch

Elasticsearch est un moteur de recherche puissant qui peut indexer les journaux à mesure qu’ils arrivent. Il permet d’exécuter rapidement des requêtes sur des journaux. Elasticsearch peut gérer d’énormes quantités de journaux et, dans des cas extrêmes, être mis à l’échelle sur de nombreux nœuds.

Les messages de journaux qui ont été conçus pour contenir des paramètres ou qui ont eu des paramètres divisés par le biais du traitement Logstash, peuvent être interrogés directement à mesure que Elasticsearch conserve ces informations.

Une requête qui recherche les 10 pages les plus visitées par jill@example.com apparaît dans la figure 7-9.

"query": {
    "match": {
      "user": "jill@example.com"
    }
  },
  "aggregations": {
    "top_10_pages": {
      "terms": {
        "field": "page",
        "size": 10
      }
    }
  }

Figure 7-9. Requête Elasticsearch pour trouver les 10 pages les plus visitées par un utilisateur

Visualisation des informations avec des tableaux de bord web Kibana

Le composant final de la pile est Kibana. Cet outil est utilisé pour fournir des visualisations interactives dans un tableau de bord web. Les tableaux de bord peuvent être conçus même par les utilisateurs qui n’ont pas de connaissances techniques. La plupart des données résidant dans l’index Elasticsearch peuvent être incluses dans des tableaux de bord Kibana. Les utilisateurs individuels peuvent avoir des attentes différentes en matière de tableaux de bord, et Kibana permet cette personnalisation en offrant la possibilité d’avoir des tableaux de bord spécifiques aux utilisateurs.

Installation d’Elastic Stack sur Azure

Les éléments d’Elastic Stack peuvent être installés sur Azure de nombreuses façons. Comme toujours, il est possible de provisionner des machines virtuelles et d’installer Elastic Stack directement. Cette option est préférée par certains utilisateurs expérimentés, car elle offre le degré de personnalisation le plus élevé. Le déploiement sur l’infrastructure en tant que service introduit une surcharge de gestion significative obligeant ceux qui suivent ce chemin à prendre possession de toutes les tâches associées à l’infrastructure en tant que service, comme la sécurisation des machines et la mise à jour avec des correctifs.

Une option avec moins de surcharge consiste à utiliser l’un des nombreux conteneurs Docker sur lesquels Elastic Stack a déjà été configuré. Ces conteneurs peuvent être placés dans un cluster Kubernetes existant et s’exécuter en même temps que le code d’application. Le conteneur sebp/elk est un conteneur Elastic Stack bien documenté et testé.

Une autre option est une offre ELK en tant que service récemment annoncée.

References