Log Aggregation¶
Giriş¶
Log Aggregation (Log Toplama), dağıtık sistemlerde logların merkezi bir noktada toplanması, depolanması ve analiz edilmesi sürecidir. Modern uygulamalarda, özellikle mikroservis mimarilerinde, logların etkili bir şekilde yönetilmesi için kritik bir bileşendir.
Log Aggregation'ın Önemi¶
- Merkezi Yönetim
- Tüm logların tek noktada toplanması
- Kolay erişim ve analiz
- Tutarlı log formatı
-
Merkezi yapılandırma
-
Performans ve Ölçeklenebilirlik
- Dağıtık log toplama
- Yük dengeleme
- Buffer yönetimi
-
Batch işlemler
-
Analiz ve İzleme
- Gerçek zamanlı analiz
- Trend analizi
- Anomali tespiti
- Alerting
Log Aggregation Araçları¶
- ELK Stack (Elasticsearch, Logstash, Kibana)
- Elasticsearch: Log depolama ve arama
- Logstash: Log toplama ve işleme
-
Kibana: Görselleştirme ve analiz
-
Fluentd
- Hafif ve esnek
- Zengin plugin ekosistemi
- Yüksek performans
-
Kolay yapılandırma
-
Graylog
- Gerçek zamanlı analiz
- Alerting
- Role-based erişim
- Dashboard özellikleri
Log Aggregation Kullanımı¶
-
ELK Stack Kurulumu
// NuGet paketleri: // Serilog // Serilog.Sinks.Elasticsearch // Serilog.Sinks.Console public class Startup { public void ConfigureServices(IServiceCollection services) { Log.Logger = new LoggerConfiguration() .MinimumLevel.Information() .WriteTo.Console() .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("http://localhost:9200")) { AutoRegisterTemplate = true, IndexFormat = "myapp-logs-{0:yyyy.MM.dd}" }) .CreateLogger(); services.AddLogging(builder => builder.AddSerilog()); } }
-
Fluentd Entegrasyonu
public class FluentdLogger { private readonly ILogger _logger; public FluentdLogger(ILogger<FluentdLogger> logger) { _logger = logger; } public void LogInformation(string message, object data = null) { _logger.LogInformation("{Message} {@Data}", message, data); } public void LogError(Exception ex, string message, object data = null) { _logger.LogError(ex, "{Message} {@Data}", message, data); } }
-
Graylog Entegrasyonu
public class GraylogLogger { private readonly ILogger _logger; public GraylogLogger(ILogger<GraylogLogger> logger) { _logger = logger; } public void LogWithContext(string message, string correlationId, object data = null) { using (_logger.BeginScope(new Dictionary<string, object> { ["CorrelationId"] = correlationId, ["Data"] = data })) { _logger.LogInformation(message); } } }
-
Log Enrichment
public class LogEnricher { private readonly ILogger _logger; public LogEnricher(ILogger<LogEnricher> logger) { _logger = logger; } public void LogWithEnrichment(string message, HttpContext context) { var enrichedData = new { RequestPath = context.Request.Path, UserAgent = context.Request.Headers["User-Agent"], ClientIp = context.Connection.RemoteIpAddress, UserId = context.User?.FindFirst("sub")?.Value }; _logger.LogInformation("{Message} {@EnrichedData}", message, enrichedData); } }
Log Aggregation Best Practices¶
- Log Tasarımı
- Yapılandırılmış loglar
- Anlamlı log seviyeleri
- Context bilgileri
-
Unique identifier'lar
-
Performans
- Asenkron loglama
- Batch işlemler
- Buffer yönetimi
-
Sampling stratejileri
-
Güvenlik
- Hassas veri filtreleme
- PII veri yönetimi
- Erişim kontrolü
-
Log rotasyonu
-
Monitoring
- Log hacmi takibi
- Error rate monitoring
- Performance metrics
- Alert kuralları
Mülakat Soruları¶
Temel Sorular¶
- Log Aggregation nedir ve neden önemlidir?
-
Cevap: Log Aggregation, dağıtık sistemlerde logların merkezi bir noktada toplanması, depolanması ve analiz edilmesi sürecidir. Özellikle mikroservis mimarilerinde logların etkili yönetimi için kritiktir.
-
Popüler Log Aggregation araçları nelerdir?
-
Cevap:
- ELK Stack (Elasticsearch, Logstash, Kibana)
- Fluentd
- Graylog
- Splunk
- Datadog
-
Log Aggregation'ın temel bileşenleri nelerdir?
-
Cevap:
- Log toplama
- Log depolama
- Log analizi
- Görselleştirme
- Alerting
-
Yapılandırılmış loglama nedir?
-
Cevap: Yapılandırılmış loglama, logların belirli bir formatta (genellikle JSON) yazılmasıdır. Bu, logların daha kolay analiz edilmesini ve işlenmesini sağlar.
-
Log rotasyonu nedir?
- Cevap: Log rotasyonu, log dosyalarının belirli bir boyuta veya süreye ulaştığında arşivlenmesi ve yeni dosyaların oluşturulması işlemidir.
Teknik Sorular¶
- ELK Stack nasıl yapılandırılır?
-
Cevap:
public class Startup { public void ConfigureServices(IServiceCollection services) { Log.Logger = new LoggerConfiguration() .MinimumLevel.Information() .WriteTo.Console() .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("http://localhost:9200")) { AutoRegisterTemplate = true, IndexFormat = "myapp-logs-{0:yyyy.MM.dd}" }) .CreateLogger(); services.AddLogging(builder => builder.AddSerilog()); } }
-
Log enrichment nasıl yapılır?
-
Cevap:
public class LogEnricher { private readonly ILogger _logger; public LogEnricher(ILogger<LogEnricher> logger) { _logger = logger; } public void LogWithEnrichment(string message, HttpContext context) { var enrichedData = new { RequestPath = context.Request.Path, UserAgent = context.Request.Headers["User-Agent"], ClientIp = context.Connection.RemoteIpAddress, UserId = context.User?.FindFirst("sub")?.Value }; _logger.LogInformation("{Message} {@EnrichedData}", message, enrichedData); } }
-
Asenkron loglama nasıl yapılır?
-
Cevap:
public class AsyncLogger { private readonly ILogger _logger; private readonly Channel<string> _logChannel; public AsyncLogger(ILogger<AsyncLogger> logger) { _logger = logger; _logChannel = Channel.CreateUnbounded<string>(); StartProcessing(); } private async void StartProcessing() { await foreach (var message in _logChannel.Reader.ReadAllAsync()) { _logger.LogInformation(message); } } public async Task LogAsync(string message) { await _logChannel.Writer.WriteAsync(message); } }
-
Log sampling nasıl yapılandırılır?
-
Cevap:
public class SampledLogger { private readonly ILogger _logger; private readonly Random _random; private readonly double _samplingRate; public SampledLogger(ILogger<SampledLogger> logger, double samplingRate = 0.1) { _logger = logger; _random = new Random(); _samplingRate = samplingRate; } public void LogWithSampling(string message) { if (_random.NextDouble() < _samplingRate) { _logger.LogInformation(message); } } }
-
Log rotasyonu nasıl yapılandırılır?
- Cevap:
public class RotatingLogger { private readonly ILogger _logger; public RotatingLogger(ILogger<RotatingLogger> logger) { _logger = logger; } public void ConfigureLogRotation(string logPath, long maxSize, int maxFiles) { Log.Logger = new LoggerConfiguration() .WriteTo.File(logPath, rollingInterval: RollingInterval.Day, rollOnFileSizeLimit: true, fileSizeLimitBytes: maxSize, retainedFileCountLimit: maxFiles) .CreateLogger(); } }
İleri Seviye Sorular¶
- Log Aggregation performans optimizasyonu nasıl yapılır?
-
Cevap:
- Asenkron loglama
- Batch işlemler
- Buffer yönetimi
- Sampling stratejileri
- Compression
-
Log Aggregation güvenliği nasıl sağlanır?
-
Cevap:
- Hassas veri filtreleme
- PII veri yönetimi
- Erişim kontrolü
- Log rotasyonu
- Audit logging
-
Log Aggregation monitoring ve alerting nasıl yapılır?
-
Cevap:
- Log hacmi takibi
- Error rate monitoring
- Performance metrics
- Alert kuralları
- Dashboard tasarımı
-
Log Aggregation ile distributed tracing nasıl entegre edilir?
-
Cevap:
- Correlation ID
- Context propagation
- Span ve trace yönetimi
- End-to-end tracing
- Performance analysis
-
Log Aggregation ile log analizi nasıl yapılır?
- Cevap:
- Pattern recognition
- Anomali tespiti
- Trend analizi
- Machine learning
- Predictive analytics