Skip to content

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

  1. Merkezi Yönetim
  2. Tüm logların tek noktada toplanması
  3. Kolay erişim ve analiz
  4. Tutarlı log formatı
  5. Merkezi yapılandırma

  6. Performans ve Ölçeklenebilirlik

  7. Dağıtık log toplama
  8. Yük dengeleme
  9. Buffer yönetimi
  10. Batch işlemler

  11. Analiz ve İzleme

  12. Gerçek zamanlı analiz
  13. Trend analizi
  14. Anomali tespiti
  15. Alerting

Log Aggregation Araçları

  1. ELK Stack (Elasticsearch, Logstash, Kibana)
  2. Elasticsearch: Log depolama ve arama
  3. Logstash: Log toplama ve işleme
  4. Kibana: Görselleştirme ve analiz

  5. Fluentd

  6. Hafif ve esnek
  7. Zengin plugin ekosistemi
  8. Yüksek performans
  9. Kolay yapılandırma

  10. Graylog

  11. Gerçek zamanlı analiz
  12. Alerting
  13. Role-based erişim
  14. Dashboard özellikleri

Log Aggregation Kullanımı

  1. 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());
        }
    }
    

  2. 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);
        }
    }
    

  3. 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);
            }
        }
    }
    

  4. 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

  1. Log Tasarımı
  2. Yapılandırılmış loglar
  3. Anlamlı log seviyeleri
  4. Context bilgileri
  5. Unique identifier'lar

  6. Performans

  7. Asenkron loglama
  8. Batch işlemler
  9. Buffer yönetimi
  10. Sampling stratejileri

  11. Güvenlik

  12. Hassas veri filtreleme
  13. PII veri yönetimi
  14. Erişim kontrolü
  15. Log rotasyonu

  16. Monitoring

  17. Log hacmi takibi
  18. Error rate monitoring
  19. Performance metrics
  20. Alert kuralları

Mülakat Soruları

Temel Sorular

  1. Log Aggregation nedir ve neden önemlidir?
  2. 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.

  3. Popüler Log Aggregation araçları nelerdir?

  4. Cevap:

    • ELK Stack (Elasticsearch, Logstash, Kibana)
    • Fluentd
    • Graylog
    • Splunk
    • Datadog
  5. Log Aggregation'ın temel bileşenleri nelerdir?

  6. Cevap:

    • Log toplama
    • Log depolama
    • Log analizi
    • Görselleştirme
    • Alerting
  7. Yapılandırılmış loglama nedir?

  8. 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.

  9. Log rotasyonu nedir?

  10. 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

  1. ELK Stack nasıl yapılandırılır?
  2. 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());
        }
    }
    

  3. Log enrichment nasıl yapılır?

  4. 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);
        }
    }
    

  5. Asenkron loglama nasıl yapılır?

  6. 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);
        }
    }
    

  7. Log sampling nasıl yapılandırılır?

  8. 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);
            }
        }
    }
    

  9. Log rotasyonu nasıl yapılandırılır?

  10. 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

  1. Log Aggregation performans optimizasyonu nasıl yapılır?
  2. Cevap:

    • Asenkron loglama
    • Batch işlemler
    • Buffer yönetimi
    • Sampling stratejileri
    • Compression
  3. Log Aggregation güvenliği nasıl sağlanır?

  4. Cevap:

    • Hassas veri filtreleme
    • PII veri yönetimi
    • Erişim kontrolü
    • Log rotasyonu
    • Audit logging
  5. Log Aggregation monitoring ve alerting nasıl yapılır?

  6. Cevap:

    • Log hacmi takibi
    • Error rate monitoring
    • Performance metrics
    • Alert kuralları
    • Dashboard tasarımı
  7. Log Aggregation ile distributed tracing nasıl entegre edilir?

  8. Cevap:

    • Correlation ID
    • Context propagation
    • Span ve trace yönetimi
    • End-to-end tracing
    • Performance analysis
  9. Log Aggregation ile log analizi nasıl yapılır?

  10. Cevap:
    • Pattern recognition
    • Anomali tespiti
    • Trend analizi
    • Machine learning
    • Predictive analytics