Bu yazıda Elastischsearch, Kibana ve Serilog kullanarak, Asp.Net üzerinde log tutmayı nasıl yapacağımıza bakacağız.
İlk olarak Elasticsearch, Kibana ve Serilog Nedir? ona bakalım.
Örnek projeyi github üzerinden indirmek veya görüntülemek için https://github.com/ayzdru/AspNetLoggingWithElasticsearch adresine gidebilirsiniz.
Elasticsearch Nedir?
Basitçe ifade etmek gerekirse, Elastiksearch logları ve analitik verileri indekslemek için çok uygun olan açık kaynaklı bir veri tabanıdır.
Serilog Nedir?
Serilog, loglamayı kolaylaştıran ASP.NET için bir kütüphanedir. Serilog için çeşitli Sinkler (logu nereye aktaracağınız ek paketler) vardır.
Örneğin, File, SQL ve Elasticsearch Sinkleri
Kibana Nedir?
Kibana, Elasticsearch için açık kaynaklı bir veri görselleştirme ve kullanıcı arabirimidir. Elasticsearch'ü veritabanı olarak ve Kibana'yı Elasticsearch'de grafikler, sorgular, indeksler oluşturmak için kullanabileceğimiz web kullanıcı arayüzü olarak düşünebiliriz.
Neden Elasticsearch Kullanıyoruz?
- Ücretsiz ve Açık kaynak kodlu
- RESTful API
- Basit Sorgulama
- Çok hızlı
- Ölçeklenebilir
- Kolay Kurulum
Windows üzerine Elastichsearch ve Kibana Kurulumu
Kodlamaya başlamadan önce Elasticsearch ve Kibana'yı bilgisayarımıza kurmamız gerekiyor.
Elasticsearch Kurulumu
- Elasticsearch'ün windows sürümünü bu link üzerinden indiriyoruz.
- Zip dosyasını bir klasöre çıkartıyoruz.
- cmd.exe "cd \elasticsearch\bin" ile komut dizinini değiştiriyoruz.
- elasticsearch.bat yazıp çalıştırıyoruz.
Son olarak tarayıcımıza http://localhost:9200/ urlsini yazıyoruz.

Bu çıktıyı alıyorsak, Elasticsearch kurulumumuz tamamlanmıştır.
Kibana Kurulumu
- Kibana'yı bu link üzerinden indiriyoruz.
- Zip dosyasını bir klasöre çıkartıyoruz.
- cmd.exe "cd \kibana\bin" ile komut dizinini değiştiriyoruz.
- kibana.bat yazıp çalıştırıyoruz. (Nodejs kurulumu gerekebilir. Nodejs kurup tekrar deniyoruz.)
Son olarak tarayıcımıza http://localhost:5601/app/kibana urlsini yazıyoruz.

Bu çıktıyı alıyorsak, Kibana kurulumumuz tamamlanmıştır.
Nuget Paketlerini Projeye Ekleme
- Serilog.AspNetCore
- Serilog.Enrichers.Environment
- Serilog.Sinks.Debug
- Serilog.Sinks.ElasticSearch
- Serilog.Exceptions
Program.cs dosyasını düzenliyoruz
public class Program
{
public static void Main(string[] args)
{
var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile(
$"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json",
optional: true)
.Build();
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.Enrich.WithExceptionDetails()
.Enrich.WithMachineName()
.WriteTo.Debug()
.WriteTo.Console()
.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri(configuration["Elasticsearch:Uri"]))
{
CustomFormatter = new ExceptionAsObjectJsonFormatter(renderMessage: true),
ModifyConnectionSettings = c => c.ServerCertificateValidationCallback(
(o, certificate, arg3, arg4) => { return true; }),
AutoRegisterTemplate = true,
IndexFormat = $"{Assembly.GetExecutingAssembly().GetName().Name.ToLower().Replace(".", "-")}-{environment?.ToLower().Replace(".", "-")}-{DateTime.UtcNow:yyyy-MM}"
})
.Enrich.WithProperty("Environment", environment)
.ReadFrom.Configuration(configuration)
.CreateLogger();
try
{
CreateHostBuilder(args).Build().Run();
}
catch (System.Exception ex)
{
Log.Fatal($"Failed to start {Assembly.GetExecutingAssembly().GetName().Name}", ex);
throw;
}
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
}).UseSerilog();
}
Projeyi Çalıştırma
Loglamayı başlatmak için projemizi Visual Studio üzerinden çalıştırıyoruz.

Kibana üzerinden Index Pattern oluşturarak Loglarımızı Görüntüleme
http://localhost:5601/app/kibana#/management/kibana/index_patterns/ adresinden index pattern oluşturuyoruz.

Time Filter olarak @timestamp değerini seçip Create index pattern ile Index Pattern'i oluşturuyoruz.

Navigasyon panelinde Kibana > Discover alanından loglarımızı görüntüleyebiliriz.

Sağlıcakla kalın..