article

Optimisez la gestion de vos logs .net Core avec Kibana, Elasticsearch et Serilog

18 Feb 2018, 22:00, par Loïc Deffains

Kibana est un puissant outil de visualisation permettant de filtrer et de visualiser les données stockées dans Elasicsearch. Il est particulièrement adapté à l'exploitation des logs applicatifs. Elasticsearch est un moteur d'indexation distribué basé sur Apache Lucene. Il fournit un moteur de recherche distribué via une API REST. Serilog est un framework de log .net distribué sous la forme d'un package Nugget. Il fournit un certain nombre de providers permettant de rediriger les logs dans un fichier, un mail, un moteur d'indexation, la sortie standard, etc...

Pré-requis

Configurer l'application pour rediriger les logs dans Elasticsearch

Cloner le projet .net core (web api)

<pre>_git clone https://github.com/uniteeio/dotnet-core-elasticsearch-kibana_</pre>

Lancer Elasticsearch et Kibana Placez-vous à la racine du projet et exécuter la commande suivante :

<pre>docker-compose up -d</pre>

Docker pull les images nécessaires et lance la stack. Pour accéder à Kibana : http://localhost:5601 Pour accéder à Elasticsearch : http://localhost:9200 Installer les paquets Nuggets nécessaires

Install-Package Serilog
Install-Package Serilog.Extensions.Logging
Install-Package Serilog.Sinks.Elasticsearch
Install-Package Serilog.Settings.Configuration

Modifier le fichier Startup.cs

  • Créez une instance configurée de Serilog
<pre>public Startup(IConfiguration configuration) { Configuration = configuration; Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(Configuration) .CreateLogger(); }</pre>
  • Déclarez le service Serilog dans le conteneur de services
<pre>public void ConfigureServices(IServiceCollection services) { // Serilog services.AddLogging( loggingBuilder => loggingBuilder.AddSerilog(dispose: true) ); services.AddMvc(); }</pre>

Modifiez le fichier appsettings.Development.json pour configurer Serilog

<pre>{ "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Debug", "System": "Information", "Microsoft": "Information" } }, "Serilog": { "Enrich": [ "FromLogContext", "WithMachineName" ], "Properties": { "Application": "MyApp" }, "WriteTo": [ { "Name": "Elasticsearch", "Args": { "nodeUris": "http://localhost:9200", "indexFormat": "myapp-{0:yyyy.MM}", "autoRegisterTemplate": true, "minimumLogEventLevel": "Information", "connectionGlobalHeaders": "Authorization=Basic cGFzc3dvcmQ=" } } ] } }</pre>
  • Properties.Application : le nom de votre application tel qui remontera dans Kibana
  • WriteTo.Name : le sink Serilog (middleware), dans notre cas Elasticsearch
  • WriteTo.Args.nodeUris : l'url d'accès à l'API Elasticsearch
  • WriteTo.Args.indexFormat : le pattern du nom de l'index Elasticsearch dans lequel les logs seront écrits. ATTENTION à la casse, l'index doit être en minuscule.
  • WriteTo.Args.connectionGlobalHeaders : le header d'authentification à passer dans la requête. A utiliser si vous souhaitez sécuriser Elasticsearch & Kibana avec un Nginx en reverse porxy comme expliqué ici. Le mot de passe est encodé en base64 (cGFzc3dvcmQ= équivaut à password).

Injecter une instance du logger dans le controleur ValuesController.cs

<pre>private readonly ILogger _logger; public ValuesController(ILogger<ValuesController> logger) { _logger = logger; }</pre>

Ajouter un log dans une action du controller

<pre>// GET api/values [HttpGet] public IEnumerable<string> Get() { **_logger.LogInformation("Log Get All");** return new string[] {"value1", "value2"}; }</pre>

Visualiser les logs dans Kibana

Lancez l'application (en mode Developpement) et accédez à la ressource values afin de générer le log (http://localhost:5000/api/values). Ouvrez Kibana et configurez l'index myapp-* Un fois l'index créé allez dans "Discover" pour visualiser vos logs.

Conclusion

Nous avons vu comment configurer .net core pour logger dans Elasticsearch et Kibana. Cette solution offre de nombreux avantages et je vous invite à découvrir le champ des possibles sur le site d'Elastic. Les sources sont disponibles ici : https://github.com/uniteeio/dotnet-core-elasticsearch-kibana/tree/final

@FabienPaitry

Twitter / LinkedIn / Instagram / Facebook / Meetup / SlideShare


ARTICLES PAR CATÉGORIE
NE MANQUEZ PAS NOS ACTUALITÉS
Inscrivez-vous à notre newsletter pour recevoir nos derniers articles et nos actualités.
REJOIGNEZ-NOUS !
Unitee ou l'une de ses filiales est forcément en train de recruter de nouveaux talents. Retrouvez nos offres d'emploi sur LinkedIn.