Start with Elasticssearch, Kibana and ASP.NET Core
Categories:
2 minute read
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:
Create a folder for your new project
Open a command prompt an run
mkdir aspnet.elk.sample
cd aspnet.elk.sample
Create a new ASP.NET Core project
dotnet new mvc
Add the following Serilog packages
You´ll send the logs to ElasticSearch using Serilog:
dotnet add package Serilog -v 2.4.0
dotnet add package Serilog.Extensions.Logging -v 1.4.0
dotnet add package Serilog.Sinks.ElasticSearch -v 5.1.0
dotnet restore
Replace the contents of the Startup.cs file
Lines 27 and 66 are key to enable Serilog and the Elasticsearch sink:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Serilog;
using Serilog.Events;
using Serilog.Sinks.Elasticsearch;
namespace aspnet.elk.sample
{
public class Startup
{
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
// Create Serilog Elasticsearch logger
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.MinimumLevel.Debug()
.WriteTo.Elasticsearch().WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("http://localhost:9200"))
{
MinimumLogEventLevel = LogEventLevel.Verbose,
AutoRegisterTemplate = true,
})
.CreateLogger();
Configuration = builder.Build();
}
public IConfigurationRoot Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
// loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
// Add serilog
loggerFactory.AddSerilog();
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
}
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:
docker pull nshou/elasticsearch-kibana
docker 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.
Run the program and navigate
Run the program
dotnet run
And navigate through some of the pages: http://localhost:5000
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!