ASP.NET Elasticsearch, Kibana, Serilog ile Loglama

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

  1. Elasticsearch'ün windows sürümünü bu link üzerinden indiriyoruz.
  2. Zip dosyasını bir klasöre çıkartıyoruz.
  3. cmd.exe "cd \elasticsearch\bin" ile komut dizinini değiştiriyoruz.
  4. 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 

  1. Kibana'yı bu link üzerinden indiriyoruz.
  2. Zip dosyasını bir klasöre çıkartıyoruz.
  3. cmd.exe "cd \kibana\bin" ile komut dizinini değiştiriyoruz.
  4. 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..

 

 

 

Yorumlar kapalı