You want to Start with Elasticssearch, Kibana and ASP.NET Core and also want to do it fast? Let’s use Docker and find out how easy it can be:

1. Create a folder for your new project#


Open a command prompt an run

1mkdir aspnet.elk.sample
2cd aspnet.elk.sample

2. Create a new ASP.NET Core project#


1dotnet new mvc

3. Add the following Serilog packages#


You´ll send the logs to ElasticSearch using Serilog:

1dotnet add package Serilog -v 2.4.0
2dotnet add package Serilog.Extensions.Logging -v 1.4.0
3dotnet add package Serilog.Sinks.ElasticSearch -v 5.1.0
4dotnet restore

4. Replace the contents of the Startup.cs file#


Lines 27 and 66 are key to enable Serilog and the Elasticsearch sink:

 1using System;
 2using System.Collections.Generic;
 3using System.Linq;
 4using System.Threading.Tasks;
 5using Microsoft.AspNetCore.Builder;
 6using Microsoft.AspNetCore.Hosting;
 7using Microsoft.Extensions.Configuration;
 8using Microsoft.Extensions.DependencyInjection;
 9using Microsoft.Extensions.Logging;
10using Serilog;
11using Serilog.Events;
12using Serilog.Sinks.Elasticsearch;
13
14namespace aspnet.elk.sample
15{
16    public class Startup
17    {
18        public Startup(IHostingEnvironment env)
19        {
20            var builder = new ConfigurationBuilder()
21                .SetBasePath(env.ContentRootPath)
22                .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
23                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
24                .AddEnvironmentVariables();
25
26            // Create Serilog Elasticsearch logger
27            Log.Logger = new LoggerConfiguration()
28               .Enrich.FromLogContext()
29               .MinimumLevel.Debug()
30               .WriteTo.Elasticsearch().WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("http://localhost:9200"))
31               {
32                   MinimumLogEventLevel = LogEventLevel.Verbose,
33                   AutoRegisterTemplate = true,
34               })
35               .CreateLogger();
36
37            Configuration = builder.Build();
38        }
39
40        public IConfigurationRoot Configuration { get; }
41
42        // This method gets called by the runtime. Use this method to add services to the container.
43        public void ConfigureServices(IServiceCollection services)
44        {
45            // Add framework services.
46            services.AddMvc();
47        }
48
49        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
50        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
51        {
52            // loggerFactory.AddConsole(Configuration.GetSection("Logging"));
53            loggerFactory.AddDebug();
54
55            if (env.IsDevelopment())
56            {
57                app.UseDeveloperExceptionPage();
58                app.UseBrowserLink();
59            }
60            else
61            {
62                app.UseExceptionHandler("/Home/Error");
63            }
64
65            // Add serilog
66            loggerFactory.AddSerilog();
67
68            app.UseStaticFiles();
69
70            app.UseMvc(routes =>
71            {
72                routes.MapRoute(
73                    name: "default",
74                    template: "{controller=Home}/{action=Index}/{id?}");
75            });
76        }
77    }
78}

5. Use Docker to start Elasticsearch and Kibana#


You’ll need to add the following address range to your docker unsafe registry: 172.19.0.2:9200

Run the following commands:

1docker pull nshou/elasticsearch-kibana
2docker run -d -p 9200:9200 -p 5601:5601 nshou/elasticsearch-kibana

It will take a while but you’ll get a working Elasticsearch + Kibana installation.

6. Run the program and navigate#

Run the program

1dotnet run

And navigate through some of the pages: http://localhost:5000

7. Setup Kibana and search your logs#


Open http://localhost:5601 and configure the Index Pattern with the default values (Click Create at the bottom of the page).

Now click Discover on the side bar and start searching your logs. Enjoy!

Get the code and related files here: https://github.com/cmendible/dotnetcore.samples/tree/main/aspnet.elk.sample

Hope it helps!