Takip et

Serilog ile .NET Uygulamalarında Datadog Entegrasyonu

Modern yazılım projelerinde performansı izlemek, hataları hızla tespit etmek ve genel sistem sağlığını anlamak kritik öneme sahiptir. Peki, .NET uygulamalarınızdaki logları ve performansı merkezi bir platformda etkili bir şekilde nasıl yönetebilirsiniz? Bu makale, popüler loglama kütüphanesi Serilog’u kullanarak .NET projelerinizi Datadog ile sorunsuz bir şekilde entegre etmenin adım adım yollarını ve en iyi uygulamalarını açıklıyor. Hazır mısınız?

Günümüzün dağıtık sistem mimarilerinde, uygulamanın her bir bileşeninden gelen verileri tek bir merkezde toplamak ve analiz etmek, operasyonel görünürlük (observability) sağlamanın temelidir. İşte tam bu noktada Datadog ve Serilog ikilisi devreye giriyor. Datadog, sunucularınızdan, kapsayıcılarınızdan, sunucusuz işlevlerinizden ve tabii ki uygulamalarınızdan metrikleri, logları ve izlemeleri (tracing) toplayarak kapsamlı bir gözlem platformu sunar. Uygulama Performans İzleme (APM) yetenekleri sayesinde kod seviyesindeki darboğazları tespit edebilir, log yönetimi ile hataların kök nedenlerini bulabilir ve sistem genelindeki metriklerle eğilimleri izleyebilirsiniz. Kısacası, Datadog, sisteminize yukarıdan bir kuşbakışı görünüm sağlarken, aynı zamanda en ince ayrıntılara kadar inmenize olanak tanır.

Serilog ise .NET ekosisteminde yapılandırılmış loglama (structured logging) konusunda öne çıkan, esnek ve güçlü bir kütüphanedir. Geleneksel düz metin loglarının aksine, Serilog logları JSON veya benzeri yapılandırılmış formatlarda üretir. Bu sayede log mesajları sadece insanlar tarafından değil, makineler tarafından da kolayca okunabilir ve sorgulanabilir hale gelir. Örneğin, bir hata logu sadece “Beklenmeyen bir hata oluştu” demek yerine, “Hata Kodu: 500, Kullanıcı ID: 123, İstek URL: /api/urunler, Hata Mesajı: Veritabanı bağlantısı kesildi” gibi zengin ve sorgulanabilir veriler içerebilir. Serilog’un bu yapılandırılmış yapısı, logları Datadog gibi güçlü bir izleme platformuna gönderdiğinizde paha biçilmez faydalar sağlar. Datadog’da bu yapılandırılmış loglar üzerinde filtreleme, arama ve analiz yapmak çok daha kolay ve verimli olur.

Bu iki güçlü aracın bir araya gelmesiyle, .NET uygulamanızda üretilen tüm önemli olaylar ve performans verileri merkezi bir Datadog panosunda toplanır. Uygulamanızda bir yavaşlama yaşandığında, Datadog’un APM özelliği size hangi metodun yavaş çalıştığını gösterirken, Serilog ile gönderdiğiniz yapılandırılmış loglar tam o anda ne olduğunu, hangi parametrelerle çağrıldığını ve olası hata mesajlarını detaylı bir şekilde ortaya koyar. Bu entegrasyon, hata ayıklama süreçlerinizi hızlandırır, operasyonel maliyetleri düşürür ve uygulamanızın genel sağlığı hakkında derinlemesine içgörüler sunar. Merkezi bir loglama ve izleme çözümü olmadan, özellikle mikroservis mimarilerinde, sorun giderme bir kabusa dönüşebilir. Serilog’un esnek “sink” (hedef) mekanizması sayesinde, logları Datadog’a göndermek son derece basittir ve bu da geliştiricilerin uygulamanın iş mantığına odaklanmasına olanak tanır.

Uzman İpucu: Serilog’un yapılandırılmış loglama özelliği, Datadog’daki log analiz yeteneklerini maksimuma çıkarır. Loglarınızda özel alanlar (örneğin, TransactionId, UserId) tanımlayarak, bu alanlar üzerinden karmaşık filtreler oluşturabilir ve belirli olayların korelasyonunu kolayca yapabilirsiniz.

.NET Projesinde Serilog Kurulumu ve Temel Yapılandırma Nasıl Yapılır?

Bir .NET uygulamasında Serilog’u devreye almak, projenize birkaç NuGet paketi eklemek ve ardından basit bir yapılandırma ile başlar. Bu bölümde, ister bir konsol uygulaması olsun ister bir ASP.NET Core web uygulaması, Serilog’u temel düzeyde nasıl kuracağınızı ve yapılandıracağınızı adım adım inceleyeceğiz. İlk olarak, projenizin csproj dosyasına veya NuGet Paket Yöneticisi aracılığıyla gerekli paketleri eklemeniz gerekecektir. Temel bir Serilog kurulumu için genellikle Serilog ve Serilog.AspNetCore (ASP.NET Core uygulamaları için) paketlerine ihtiyacınız olur. Loglarınızı konsola veya bir dosyaya yazmak isterseniz Serilog.Sinks.Console ve Serilog.Sinks.File gibi sink paketlerini de eklemeniz gerekebilir.

Serilog Gerekli NuGet Paketleri

Install-Package Serilog
Install-Package Serilog.AspNetCore
Install-Package Serilog.Sinks.Console
Install-Package Serilog.Sinks.File

Paketleri yükledikten sonra, Serilog'u ASP.NET Core uygulamanızda yapılandırmak için genellikle Program.cs dosyasını kullanırız. Yeni .NET 6+ şablonlarında, uygulamanın ana başlatma noktası olan Program.cs içinde builder objesini yapılandırırken Serilog'u entegre edebilirsiniz. Aşağıdaki örnek, temel bir Serilog yapılandırmasını göstermektedir. Bu yapılandırmada, loglar hem konsola hem de bir dosyaya yazılacaktır.

Program.cs (ASP.NET Core) içinde Serilog Yapılandırması

using Serilog;
using Serilog.Events;

var builder = WebApplication.CreateBuilder(args);

// Serilog yapılandırması
builder.Host.UseSerilog((context, services, configuration) => configuration
    .MinimumLevel.Debug() // En düşük log seviyesi
    .MinimumLevel.Override("Microsoft", LogEventLevel.Warning) // Microsoft loglarını azalt
    .Enrich.FromLogContext() // Log bağlamındaki özelliklerle zenginleştir
    .WriteTo.Console() // Konsola yaz
    .WriteTo.File("logs/myapp.txt", rollingInterval: RollingInterval.Day) // Dosyaya yaz
    .ReadFrom.Configuration(context.Configuration)); // appsettings.json'dan okuma

// Diğer servisler ve yapılandırmalar
builder.Services.AddControllers();
// ...

var app = builder.Build();

app.UseSerilogRequestLogging(); // HTTP isteklerini loglama

// Uygulama pipeline'ı
app.UseAuthorization();
app.MapControllers();

app.Run();

Bu yapılandırma, Serilog'un nasıl başladığını ve logları nereye göndereceğini tanımlar. MinimumLevel.Debug() ile en düşük debug seviyesindeki logların bile işlenmesini sağlarken, MinimumLevel.Override("Microsoft", LogEventLevel.Warning) ile framework'ten gelen çok fazla bilginin logları boğmasını engelliyoruz. Enrich.FromLogContext() özelliği, log bağlamına eklenen özel özelliklerin her log mesajına dahil edilmesini sağlar, bu da daha zengin loglar anlamına gelir. WriteTo.Console() ve WriteTo.File() ise logları sırasıyla konsola ve bir dosyaya yazmak için kullanılan sink'lerdir. Son olarak, ReadFrom.Configuration(context.Configuration) ile Serilog yapılandırmasının appsettings.json dosyasından okunmasına olanak tanırız, bu da yapılandırmanın daha esnek olmasını sağlar.

appsettings.json dosyasında Serilog yapılandırması genellikle şu şekilde görünür:

appsettings.json içinde Serilog Yapılandırması

{
  "Serilog": {
    "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ],
    "MinimumLevel": {
      "Default": "Debug",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning"
      }
    },
    "WriteTo": [
      { "Name": "Console" },
      {
        "Name": "File",
        "Args": {
          "path": "logs/applog.txt",
          "rollingInterval": "Day",
          "formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact"
        }
      }
    ],
    "Enrich": [ "FromLogContext", "WithMachineName", "WithProcessId", "WithThreadId" ]
  }
}

Bu dosya tabanlı yapılandırma, uygulama kodunu değiştirmeden loglama davranışını dinamik olarak ayarlamanıza olanak tanır. Artık uygulamanızda ILogger arayüzünü kullanarak log mesajları oluşturabilirsiniz.

Loglama Örneği

using Microsoft.Extensions.Logging;

public class MyService
{
    private readonly ILogger _logger;

    public MyService(ILogger logger)
    {
        _logger = logger;
    }

    public void ProcessData(string data)
    {
        _logger.LogInformation("Veri işlenmeye başlandı: {Data}", data);

        try
        {
            // Veri işleme mantığı
            if (data == "hata")
            {
                throw new InvalidOperationException("Geçersiz veri girişi!");
            }
            _logger.LogDebug("Veri başarıyla işlendi.");
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "Veri işlenirken bir hata oluştu: {Data}", data);
        }
    }
}

Bu yapılandırma ve kullanım ile Serilog, uygulamanızda güçlü ve yapılandırılmış loglama için hazır hale gelmiş olur. Şimdi sırada bu logları Datadog'a göndermek var.

Datadog APM ve Log Toplayıcı Kurulumu: Adım Adım Entegrasyon

Serilog'u .NET projenizde yapılandırdıktan sonra, sıra bu yapılandırılmış logları ve APM izlemelerini Datadog'a göndermeye gelir. Bu entegrasyon için iki ana bileşenle çalışacağız: Datadog Agent ve Serilog'un Datadog'a özel bir sink'i. İlk olarak, Datadog'un uygulamanızdan ve sunucunuzdan veri toplayabilmesi için Datadog Agent'ın kurulumu gereklidir. Datadog Agent, sunucunuzda (sanal makine, fiziksel sunucu, Docker konteyneri veya Kubernetes kümesi) çalışan hafif bir yazılımdır. Görevi, sistem metriklerini toplamak, logları iletmek ve APM izlemelerini Datadog platformuna göndermektir. Datadog web sitesinden işletim sisteminize uygun kurulum talimatlarını takip ederek Agent'ı kurabilirsiniz. Kurulum sırasında size verilen Datadog API anahtarınızı kullanmayı unutmayın; bu anahtar Agent'ın verileri doğru hesaba göndermesini sağlar.

Datadog Agent Kurulumu (Örnek - Linux)

DD_API_KEY="YOUR_DATADOG_API_KEY" DD_SITE="datadoghq.com" bash -c "$(curl -L https://install.datadoghq.com/agent/install.sh)"

Agent kurulduktan ve çalışır duruma geldikten sonra, uygulamanızdaki Serilog loglarını Datadog'a yönlendirmek için Serilog.Sinks.Datadog.Logs NuGet paketini projenize eklememiz gerekiyor.

Datadog Log Sink NuGet Paketi

Install-Package Serilog.Sinks.Datadog.Logs

Bu paketi ekledikten sonra, Serilog yapılandırmanıza yeni bir "sink" ekleyeceğiz. Bu, logların konsola veya dosyaya yazıldığı gibi Datadog'a da gönderilmesini sağlayacaktır. Program.cs veya appsettings.json dosyanızı güncelleyerek Datadog sink'ini ekleyebilirsiniz.

Program.cs içinde Datadog Sink Entegrasyonu

using Serilog;
using Serilog.Events;
using Serilog.Sinks.Datadog.Logs; // Yeni using ifadesi

var builder = WebApplication.CreateBuilder(args);

builder.Host.UseSerilog((context, services, configuration) => configuration
    .MinimumLevel.Debug()
    .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
    .Enrich.FromLogContext()
    .Enrich.WithProperty("ApplicationName", "MyDotNetApp") // Uygulama adı ekleyin
    .WriteTo.Console()
    .WriteTo.File("logs/myapp.txt", rollingInterval: RollingInterval.Day)
    .WriteTo.DatadogLogs(
        apiKey: context.Configuration["Datadog:ApiKey"], // API Key appsettings.json'dan okunur
        service: "my-dotnet-service", // Datadog'da gözükecek servis adı
        source: "csharp", // Logların kaynağı
        host: Environment.MachineName, // Logların geldiği host
        configuration: context.Configuration, // appsettings.json ayarlarını kullan
        logEventLevel: LogEventLevel.Information // Datadog'a gönderilecek minimum log seviyesi
    )
    .ReadFrom.Configuration(context.Configuration));

// ... (Diğer yapılandırmalar) ...

var app = builder.Build();
app.UseSerilogRequestLogging();
// ...
app.Run();

appsettings.json dosyanızda Datadog API Key'i ve diğer ayarları şu şekilde tanımlayabilirsiniz:

appsettings.json içinde Datadog Ayarları

{
  "Datadog": {
    "ApiKey": "YOUR_DATADOG_API_KEY", // Datadog API Anahtarınızı buraya girin
    "Site": "datadoghq.com" // Bölgenize göre değişebilir (ör: eu.datadoghq.com)
  },
  "Serilog": {
    "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File", "Serilog.Sinks.Datadog.Logs" ],
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning"
      }
    },
    "WriteTo": [
      { "Name": "Console" },
      {
        "Name": "File",
        "Args": {
          "path": "logs/applog.txt",
          "rollingInterval": "Day"
        }
      },
      {
        "Name": "DatadogLogs",
        "Args": {
          "apiKey": "YOUR_DATADOG_API_KEY", // Bu alanı appsettings.json'dan doğrudan almak yerine, Production ortamında Environment Variable olarak ayarlamak daha güvenlidir.
          "service": "my-dotnet-service",
          "source": "csharp",
          "host": "my-dotnet-app-host",
          "logEventLevel": "Information"
        }
      }
    ],
    "Enrich": [ "FromLogContext", "WithMachineName", "WithProcessId", "WithThreadId", "WithProperty:ApplicationName:MyDotNetApp" ]
  }
}

APM Entegrasyonu: Logları Datadog'a göndermenin yanı sıra, .NET uygulamanızın performans izlemesini (APM) etkinleştirmek için Datadog.Trace kütüphanesini kullanabilirsiniz. Bu kütüphane, uygulamanızın içine "instrumentation" ekleyerek metod çağrılarını, veritabanı sorgularını, HTTP isteklerini ve diğer işlemleri izler. Genellikle, uygulamanızı Datadog Tracer ile başlatarak otomatik enstrümantasyonu etkinleştirebilirsiniz. Bunun için Datadog.Trace.AspNet veya Datadog.Trace.OpenTracing gibi paketler ve ilgili başlatma ayarları kullanılır. Çoğu durumda, Datadog Agent'ın kurulu olduğu bir ortamda uygulamanızı çalıştırırken, .NET Tracer otomatik olarak yüklenecek ve izlemeleri Agent üzerinden Datadog'a göndermeye başlayacaktır.

Datadog Tracer ile Otomatik Enstrümantasyon (Örnek)

// Uygulamanızı Datadog Trace ile başlatmak için genellikle
// environment değişkenleri kullanılır. Örneğin:
// DD_PROFILING_ENABLED=true
// DD_TRACE_AGENT_URL=http://localhost:8126
// DD_SERVICE=my-dotnet-service
// DD_ENV=production
// DD_VERSION=1.0.0

// Bu ayarlar, Datadog'un .NET Tracer'ını uygulamanızla birlikte
// otomatik olarak başlatmasını sağlar ve kodunuzda ekstra bir
// değişiklik yapmanıza gerek kalmaz.

Vaka Analizi: Mikroservislerde Uçtan Uca İzleme
Bir mikroservis mimarisinde, bir isteğin birden fazla servisten geçmesi yaygındır. Örneğin, bir kullanıcı talebi ilk olarak API Gateway'e, ardından bir Sipariş servisine, oradan da bir Envanter servisine gidebilir. Serilog ile her serviste logları zenginleştirirken, Datadog APM'in distributed tracing özelliği sayesinde bu yolculuğun tamamını tek bir "trace" içinde görebilirsiniz. Her servisin hangi metodları ne kadar sürede çalıştırdığını, hangi logların üretildiğini ve olası hataları tek bir grafiksel arayüzde incelemek, sorunları çok daha hızlı tespit etmenizi sağlar. Serilog'a ekleyeceğiniz Correlation ID'ler, trace'leri loglarla ilişkilendirmenin anahtarıdır.

Datadog Logları ve Metrikleri Nasıl İzlenir ve Görselleştirilir?

Datadog'a loglarınızı ve APM izlemelerinizi göndermeye başladıktan sonra, bu verileri anlamlı içgörülere dönüştürmenin zamanı gelir. Datadog platformu, toplanan verileri güçlü bir şekilde izlemenizi, görselleştirmenizi ve bu verilere dayanarak alarmlar kurmanızı sağlar.

Log Explorer Kullanımı: Datadog'daki Log Explorer, gönderdiğiniz tüm logları tek bir merkezi konumda görüntülemenizi ve aramanızı sağlar. Serilog ile yapılandırılmış loglar gönderdiğinizde, her bir log kaydının ek özelliklerini (örneğin, UserId, TransactionId, ApplicationName) Datadog'da "facets" olarak görebilirsiniz. Bu facets'leri kullanarak loglarınızı kolayca filtreleyebilir, belirli bir kullanıcıya ait tüm olayları veya belirli bir hata koduna sahip logları hızla bulabilirsiniz. Örneğin, service:my-dotnet-service status:error gibi basit bir sorgu ile uygulamanızdaki tüm hata loglarını listeleyebilir ve ardından @ApplicationName:MyDotNetApp gibi bir facet ile sadece belirli bir uygulamaya ait hataları izleyebilirsiniz.

Custom Dashboards Oluşturma: Loglar, APM izlemeleri ve sistem metrikleri gibi farklı veri türlerini bir araya getirerek özel panolar (dashboards) oluşturmak, Datadog'un en güçlü özelliklerinden biridir. Kendi iş akışınıza ve operasyonel ihtiyaçlarınıza göre panolar tasarlayabilirsiniz. Örneğin, bir panoda şunları bir araya getirebilirsiniz:

  • APM grafiği: Uygulamanızın genel istek gecikme süresi.
  • Log grafiği: Son bir saatteki hata loglarının sayısı.
  • Metrik grafiği: CPU ve bellek kullanımı.
  • Log stream: Belirli bir servisten gelen gerçek zamanlı loglar.

Bu sayede, uygulamanızın sağlığını tek bir bakışta görebilir ve herhangi bir anormallik durumunda ilgili loglara veya izlemelere hızla geçiş yapabilirsiniz. Grafikler, log patternleri ve metrik göstergeleri sayesinde veri setlerindeki eğilimleri kolayca fark edebilir, potansiyel sorunları daha ortaya çıkmadan tespit edebilirsiniz.

Monitoring ve Alerting: Uygulamanızın kritik eşiklerini belirleyerek Datadog'da alarmlar (monitors) kurabilirsiniz. Örneğin:

  • Son 5 dakikada hata logu sayısı belirli bir eşiği aşarsa.
  • Uygulamanın ortalama yanıt süresi belirli bir süreyi geçerse.
  • Belirli bir sunucunun CPU kullanımı %90'ın üzerine çıkarsa.

Bu alarmlar e-posta, Slack, PagerDuty gibi çeşitli kanallar aracılığıyla ilgili ekiplere bildirim gönderebilir. Proaktif izleme sayesinde, kullanıcılar etkilenmeden önce sorunları fark edip müdahale edebilirsiniz.

Vaka Analizi: Hata Trendlerini İzleme ve Proaktif Önlemler
Bir e-ticaret uygulamasında, ödeme işlemleri sırasında oluşan belirli bir hata kodunun (örneğin, PaymentGatewayError_503) sayısında ani bir artış olduğunu varsayalım. Datadog'da oluşturduğunuz bir dashboard, bu hata kodunun son 30 dakikadaki grafiğini anlık olarak gösterir ve belirlenen bir eşiği aştığında otomatik olarak bir alarm tetikler. Geliştirme ekibi bu alarmı alır almaz, Datadog Log Explorer'a giderek bu hata koduna sahip logları filtreler. Log detaylarında, hatanın belirli bir üçüncü parti ödeme sağlayıcısından kaynaklandığı ve belirli bir sunucu grubunda yoğunlaştığı ortaya çıkar. Bu bilgilerle, ekip hızla ödeme sağlayıcısıyla iletişime geçebilir veya alternatif bir ödeme yönlendirmesi devreye alabilir. Bu proaktif yaklaşım, müşteri deneyimini ciddi şekilde etkileyecek büyük bir kesintiyi önlemiş olur. Datadog'un bu görselleştirme ve uyarı yetenekleri, uygulamanızın istikrarlı çalışmasını sağlamak için hayati önem taşır.

Gelişmiş Entegrasyon Senaryoları ve En İyi Uygulamalar

Datadog ve Serilog entegrasyonundan maksimum faydayı sağlamak için bazı gelişmiş senaryoları ve en iyi uygulamaları göz önünde bulundurmak önemlidir. Yapılandırılmış loglamanın gücünden tam olarak yararlanmak, izleme verilerini doğru şekilde korele etmek ve hassas bilgileri korumak bu sürecin kritik parçalarıdır.

Structured Logging ile Daha Derin İçgörüler: Serilog'un en büyük avantajı olan yapılandırılmış loglama, Datadog'da loglarınızı sorgularken ve analiz ederken size benzersiz bir esneklik sunar. Her log mesajına eklediğiniz özel özellikler (örneğin, TenantId, RequestId, UserId, CorrelationId) Datadog'da otomatik olarak "facets" haline gelir. Bu sayede, belirli bir kiracıya veya isteğe ait tüm logları kolayca filtreleyebilir, hatta bu özellikler üzerinden metrikler oluşturarak iş süreçlerinizin sağlığını izleyebilirsiniz. Örneğin, @TenantId:abc status:error sorgusuyla belirli bir kiracıdaki tüm hataları görebilirsiniz. Loglarınızdaki değer tiplerini Datadog'un anlayacağı şekilde doğru biçimlendirmek (örneğin, tarihleri ISO 8601 formatında göndermek) de önemlidir.

Correlation ID'ler ile Uçtan Uca Takip: Dağıtık sistemlerde, bir isteğin yaşam döngüsünü farklı servisler ve log kayıtları arasında takip etmek zor olabilir. Bu sorunu çözmek için "Correlation ID" veya "Trace ID" kullanmak en iyi uygulamadır. Gelen her bir isteğe benzersiz bir kimlik atayarak ve bu kimliği log bağlamına ekleyerek (LogContext.PushProperty("CorrelationId", Guid.NewGuid().ToString())), isteğin geçtiği tüm servislerdeki logları bu kimlik üzerinden bir araya getirebilirsiniz. Datadog APM, bu trace ID'lerini otomatik olarak toplar ve loglarınıza bağlamanız durumunda, bir trace'in detaylarına bakarken o trace'le ilişkili logları da görebilirsiniz. Bu, hata ayıklama sürecini inanılmaz derecede hızlandırır.

Correlation ID Kullanımı

using Serilog.Context;

public class RequestProcessingMiddleware
{
    private readonly RequestDelegate _next;

    public RequestProcessingMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task InvokeAsync(HttpContext context)
    {
        // Benzersiz bir Correlation ID oluştur
        var correlationId = Guid.NewGuid().ToString();
        context.Response.Headers.Add("X-Correlation-ID", correlationId);

        // Correlation ID'yi log bağlamına ekle
        using (LogContext.PushProperty("CorrelationId", correlationId))
        {
            await _next(context);
        }
    }
}

Hassas Veri Maskeleme: Loglara müşteri bilgileri, kredi kartı numaraları veya şifreler gibi hassas verilerin sızması ciddi güvenlik riskleri oluşturabilir. Serilog, log verilerini göndermeden önce hassas alanları maskelemek veya tamamen çıkarmak için çeşitli zenginleştiriciler (enrichers) ve filtreler sunar. Datadog tarafında da hassas verileri otomatik olarak maskeleyebilen log işleme kuralları (log processing pipelines) tanımlayabilirsiniz. Örneğin, "password": "my_secret_password" gibi bir ifadeyi "password": "[MASKED]" şeklinde değiştirecek bir kural belirleyebilirsiniz. Bu, hem güvenlik hem de uyumluluk açısından kritik öneme sahiptir.

Performans İpuçları: Batching ve Async Logging: Yüksek trafikli uygulamalarda her bir log mesajını anında Datadog'a göndermek performans darboğazlarına neden olabilir. Serilog.Sinks.Datadog.Logs sink'i genellikle logları biriktirip toplu (batch) olarak gönderme yeteneğine sahiptir. Bu, ağ trafiğini ve G/Ç yükünü azaltarak uygulamanızın performansını artırır. Ayrıca, loglama işlemlerini ana iş parçacığından ayırarak asenkron hale getirmek (async logging), uygulamanın daha hızlı yanıt vermesine yardımcı olur. Serilog'un dahili tamponlama ve asenkron yazma mekanizmalarını doğru şekilde yapılandırmak önemlidir.

Docker/Kubernetes Ortamlarında Datadog Agent ve Serilog: Mikroservislerin ve kapsayıcılaştırmanın yaygınlaşmasıyla birlikte, Datadog Agent'ı Docker konteynerleri veya Kubernetes kümeleri içinde çalıştırmak standart bir uygulama haline gelmiştir. Datadog Agent, bir DaemonSet olarak Kubernetes'te dağıtılarak her düğümde çalışabilir ve düğümdeki tüm pod'lardan logları, metrikleri ve izlemeleri toplayabilir. Serilog ile logları stdout'a (standart çıktı) yazacak şekilde yapılandırdığınızda, Datadog Agent bu logları otomatik olarak algılayıp Datadog'a iletebilir. Bu, log yönetimini basitleştirir ve her konteyner için ayrı bir yapılandırmaya gerek kalmaz. Container metrikleri için de Agent'ın uygun şekilde yapılandırılması gerekir.

Docker'da Datadog Agent Yapılandırması (Örnek docker-compose.yml)

version: '3.8'
services:
  datadog-agent:
    image: datadog/agent:latest
    environment:
      - DD_API_KEY=${DATADOG_API_KEY}
      - DD_SITE=${DATADOG_SITE}
      - DD_LOGS_ENABLED=true
      - DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL=true # Tüm konteyner loglarını topla
      - DD_APM_ENABLED=true
      - DD_APM_NON_LOCAL_TRAFFIC=true
      - DD_DOGSTATSD_NON_LOCAL_TRAFFIC=true
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /proc/:/host/proc/:ro
      - /sys/fs/cgroup/:/host/sys/fs/cgroup/:ro
    ports:
      - "8126:8126/tcp" # APM portu
      - "8125:8125/udp" # Dogstatsd (metrikler) portu

Sonuç ve Sıkça Sorulan Sorular

Bu makale boyunca, .NET uygulamalarınızı Serilog kullanarak Datadog ile nasıl entegre edebileceğinizi ayrıntılı bir şekilde ele aldık. Gördüğümüz gibi, Serilog'un yapılandırılmış loglama yetenekleri ve Datadog'un kapsamlı izleme platformu bir araya geldiğinde, uygulamalarınızın performansı, sağlığı ve operasyonel görünürlüğü konusunda güçlü içgörüler elde edebilirsiniz. Adım adım kurulumdan başlayarak, temel loglama yapılandırmalarını, Datadog Agent entegrasyonunu ve APM izlemelerini nasıl etkinleştirebileceğinizi öğrendiniz. Ayrıca, logları ve metrikleri Datadog arayüzünde nasıl izleyip görselleştireceğinize dair pratik bilgiler edindik. Son olarak, yapılandırılmış loglamanın önemi, Correlation ID'ler, hassas veri maskeleme ve Docker/Kubernetes gibi gelişmiş senaryoları ve en iyi uygulamaları inceleyerek entegrasyonunuzu daha da sağlamlaştırmanın yollarını keşfettik. Bu entegrasyon, uygulamanızın yaşam döngüsünü daha şeffaf hale getirerek, sorunları proaktif bir şekilde tespit etmenize ve daha hızlı çözmenize olanak tanır.

Sıkça Sorulan Sorular

1. Datadog API Key'imi neden appsettings.json yerine Environment Variable olarak tutmalıyım?
Hassas bilgiler olan API Key'leri ve diğer sırları doğrudan appsettings.json gibi dosyalarda tutmak güvenlik açığı oluşturabilir, özellikle bu dosyalar versiyon kontrol sistemlerine yüklenirse. Environment Variable'lar, sırlarınızı kod tabanından ayırmanın ve farklı ortamlarda (geliştirme, test, üretim) farklı değerler kullanmanın daha güvenli bir yoludur. Bu sayede, uygulamanızı dağıtırken veya Docker gibi kapsayıcı ortamlarında çalıştırırken sırlarınızı kolayca yönetebilirsiniz.
2. Serilog ile Datadog'a hangi tür verileri gönderebilirim?
Serilog ile Datadog'a temel olarak log mesajları gönderebilirsiniz. Bu log mesajları, uygulamanızın çalışma zamanında oluşan olayları (bilgilendirici mesajlar, uyarılar, hatalar, hata ayıklama bilgileri) içerir. Yapılandırılmış loglama sayesinde, log mesajlarınızın yanında özel özellikler (örneğin, UserId, TransactionId, CorrelationId, RequestPath) de gönderebilirsiniz. Bu özellikler, Datadog'da loglarınızı filtrelemek ve analiz etmek için paha biçilmezdir. Doğrudan metrikleri Serilog üzerinden göndermek yerine, Datadog Agent'ın DogStatsD arayüzünü veya Datadog.Trace kütüphanesini kullanmanız daha uygun olacaktır.
3. Datadog APM'i kullanmak için Serilog entegrasyonu zorunlu mu?
Hayır, Datadog APM ve Serilog entegrasyonu birbirini tamamlayan ama zorunlu olarak bağlı olmayan iki farklı yetenektir. Datadog APM, uygulamanızın metod çağrılarını, veritabanı sorgularını ve HTTP isteklerini otomatik olarak izler. Serilog entegrasyonu ise kodunuzda manuel olarak yazdığınız log mesajlarını Datadog'a gönderir. Bu ikisini birlikte kullanmak, APM'in tespit ettiği performans sorunlarının kök nedenlerini, Serilog ile gönderdiğiniz detaylı log mesajları üzerinden daha hızlı anlamanızı sağlar. Yani, APM size "ne oldu" sorusunun cevabını verirken, Serilog "nasıl ve neden oldu" sorusuna daha detaylı yanıtlar sunar.
4. Mobil uyumlu HTML için hangi CSS yaklaşımlarını önerirsiniz?
Mobil uyumlu HTML için genellikle "Responsive Web Design" prensipleri kullanılır. Bu prensipler, CSS Media Queries, akışkan (fluid) ızgaralar (grid systems) ve esnek görsellerin bir kombinasyonunu içerir. Media Queries, ekran boyutuna, cihaz yönüne veya çözünürlüğe göre farklı stiller uygulamanızı sağlar. Örneğin, küçük ekranlarda öğelerin tek sütun halinde listelenmesi veya yazı tipi boyutlarının ayarlanması gibi. Esnek görseller için max-width: 100%; height: auto; gibi CSS kuralları kullanılır. Flexbox ve CSS Grid gibi modern düzenleme yöntemleri de karmaşık responsive tasarımları çok daha kolay ve verimli hale getirir. Mobil öncelikli (mobile-first) tasarım yaklaşımı, küçük ekranlar için temel stilleri tanımlayıp, daha sonra daha büyük ekranlar için stilleri üzerine ekleyerek geliştirme sürecini kolaylaştırır.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.