Skip to content

Logging ve Monitoring

Giriş

Logging ve Monitoring, modern uygulamaların vazgeçilmez bileşenleridir. Uygulama davranışını izleme, hata ayıklama ve performans optimizasyonu için kritik öneme sahiptir.

Logging'in Önemi

  1. Hata Ayıklama
  2. Hata kaynaklarını belirleme
  3. Sorunları hızlı tespit etme
  4. Debugging sürecini kolaylaştırma

  5. İzlenebilirlik

  6. İş akışlarını takip etme
  7. Kullanıcı davranışlarını analiz etme
  8. Sistem durumunu anlama

  9. Güvenlik

  10. Güvenlik olaylarını kaydetme
  11. Yetkisiz erişimleri tespit etme
  12. Audit trail oluşturma

Monitoring'in Önemi

  1. Performans İzleme
  2. Sistem kaynaklarını izleme
  3. Yanıt sürelerini ölçme
  4. Bottleneck'leri tespit etme

  5. Sağlık Kontrolü

  6. Sistem durumunu kontrol etme
  7. Hizmet kullanılabilirliğini izleme
  8. Proaktif sorun tespiti

  9. Kapasite Planlama

  10. Kaynak kullanımını analiz etme
  11. Ölçeklendirme ihtiyaçlarını belirleme
  12. Maliyet optimizasyonu

Logging Türleri

  1. Structured Logging
  2. JSON formatında loglar
  3. Kolay analiz edilebilir
  4. Machine-readable format

  5. Unstructured Logging

  6. Serbest metin logları
  7. İnsan tarafından okunabilir
  8. Geleneksel format

  9. Event Logging

  10. Önemli olayların kaydı
  11. İş mantığı olayları
  12. Sistem olayları

Monitoring Türleri

  1. Application Monitoring
  2. Performans metrikleri
  3. Hata oranları
  4. İş metrikleri

  5. Infrastructure Monitoring

  6. CPU kullanımı
  7. Memory kullanımı
  8. Disk I/O
  9. Network trafiği

  10. Business Monitoring

  11. Kullanıcı davranışları
  12. İş metrikleri
  13. KPI'lar

Logging ve Monitoring Best Practices

  1. Log Seviyeleri
  2. Debug
  3. Info
  4. Warning
  5. Error
  6. Critical

  7. Context Bilgisi

  8. Correlation ID
  9. User context
  10. Request context
  11. Environment bilgisi

  12. Log Rotation

  13. Boyut limitleri
  14. Zaman limitleri
  15. Arşivleme stratejileri

  16. Alerting

  17. Threshold'lar
  18. Notification kanalları
  19. Escalation politikaları

Mülakat Soruları

Temel Sorular

  1. Logging nedir ve neden önemlidir?
  2. Cevap: Logging, uygulama davranışlarının ve olaylarının kaydedilmesidir. Hata ayıklama, izlenebilirlik ve güvenlik için kritik öneme sahiptir.

  3. Structured ve Unstructured logging arasındaki farklar nelerdir?

  4. Cevap:

    • Structured: JSON format, makine tarafından okunabilir
    • Unstructured: Serbest metin, insan tarafından okunabilir
    • Analiz kolaylığı
    • Arama ve filtreleme
  5. Log seviyeleri nelerdir ve ne zaman kullanılır?

  6. Cevap:

    • Debug: Geliştirme aşamasında
    • Info: Normal işlemler
    • Warning: Potansiyel sorunlar
    • Error: Hatalı durumlar
    • Critical: Sistem çöküşleri
  7. Monitoring nedir ve neden önemlidir?

  8. Cevap: Monitoring, sistem performansı ve sağlığının sürekli izlenmesidir. Proaktif sorun tespiti ve performans optimizasyonu için önemlidir.

  9. Application ve Infrastructure monitoring arasındaki farklar nelerdir?

  10. Cevap:
    • Application: Uygulama metrikleri, iş mantığı
    • Infrastructure: Sistem kaynakları, donanım
    • Farklı metrikler
    • Farklı araçlar

Teknik Sorular

  1. Serilog kullanımı nasıl yapılır?
  2. Cevap:

    public class LoggingService
    {
        private readonly ILogger _logger;
    
        public LoggingService()
        {
            _logger = new LoggerConfiguration()
                .MinimumLevel.Information()
                .WriteTo.Console()
                .WriteTo.File("logs/log.txt", rollingInterval: RollingInterval.Day)
                .CreateLogger();
        }
    
        public void LogInformation(string message, object data)
        {
            _logger.Information("{Message} {@Data}", message, data);
        }
    
        public void LogError(Exception ex, string message)
        {
            _logger.Error(ex, "{Message}", message);
        }
    }
    

  3. Application Insights entegrasyonu nasıl yapılır?

  4. Cevap:

    public class ApplicationInsightsService
    {
        private readonly TelemetryClient _telemetryClient;
    
        public ApplicationInsightsService(TelemetryClient telemetryClient)
        {
            _telemetryClient = telemetryClient;
        }
    
        public void TrackRequest(string name, TimeSpan duration, bool success)
        {
            _telemetryClient.TrackRequest(name, DateTimeOffset.Now, duration, "200", success);
        }
    
        public void TrackException(Exception ex)
        {
            _telemetryClient.TrackException(ex);
        }
    
        public void TrackMetric(string name, double value)
        {
            _telemetryClient.TrackMetric(name, value);
        }
    }
    

  5. OpenTelemetry kullanımı nasıl yapılır?

  6. Cevap:

    public class OpenTelemetryService
    {
        private readonly Tracer _tracer;
        private readonly Meter _meter;
    
        public OpenTelemetryService()
        {
            var tracerProvider = Sdk.CreateTracerProviderBuilder()
                .AddSource("MyApplication")
                .AddConsoleExporter()
                .Build();
    
            var meterProvider = Sdk.CreateMeterProviderBuilder()
                .AddMeter("MyApplication")
                .AddConsoleExporter()
                .Build();
    
            _tracer = tracerProvider.GetTracer("MyApplication");
            _meter = meterProvider.GetMeter("MyApplication");
        }
    
        public async Task TrackOperation(string name, Func<Task> operation)
        {
            using var span = _tracer.StartActiveSpan(name);
            try
            {
                await operation();
            }
            catch (Exception ex)
            {
                span.RecordException(ex);
                throw;
            }
        }
    }
    

  7. Log aggregation nasıl yapılır?

  8. Cevap:

    public class LogAggregationService
    {
        private readonly ILogger _logger;
        private readonly ElasticClient _elasticClient;
    
        public LogAggregationService(ILogger logger, ElasticClient elasticClient)
        {
            _logger = logger;
            _elasticClient = elasticClient;
        }
    
        public async Task IndexLog(LogEntry log)
        {
            try
            {
                await _elasticClient.IndexDocumentAsync(log);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Failed to index log: {@Log}", log);
            }
        }
    
        public async Task<IEnumerable<LogEntry>> SearchLogs(string query)
        {
            var response = await _elasticClient.SearchAsync<LogEntry>(s => s
                .Query(q => q
                    .QueryString(qs => qs
                        .Query(query)
                    )
                )
            );
    
            return response.Documents;
        }
    }
    

  9. Performance monitoring nasıl yapılır?

  10. Cevap:
    public class PerformanceMonitor
    {
        private readonly ILogger _logger;
        private readonly Stopwatch _stopwatch;
    
        public PerformanceMonitor(ILogger logger)
        {
            _logger = logger;
            _stopwatch = new Stopwatch();
        }
    
        public async Task<T> MeasureOperation<T>(string operationName, Func<Task<T>> operation)
        {
            _stopwatch.Restart();
            try
            {
                var result = await operation();
                return result;
            }
            finally
            {
                _stopwatch.Stop();
                _logger.LogInformation(
                    "Operation {OperationName} completed in {ElapsedMilliseconds}ms",
                    operationName,
                    _stopwatch.ElapsedMilliseconds
                );
            }
        }
    }
    

İleri Seviye Sorular

  1. Distributed tracing nasıl uygulanır?
  2. Cevap:

    • Correlation ID
    • Trace context
    • Span propagation
    • Context injection
    • Trace visualization
  3. Log sampling stratejileri nelerdir?

  4. Cevap:

    • Rate-based sampling
    • Adaptive sampling
    • Priority-based sampling
    • Dynamic sampling
    • Cost-based sampling
  5. Alerting stratejileri nelerdir?

  6. Cevap:

    • Threshold-based alerts
    • Anomaly detection
    • Trend analysis
    • Composite alerts
    • Alert routing
  7. Log retention stratejileri nelerdir?

  8. Cevap:

    • Time-based retention
    • Size-based retention
    • Cost-based retention
    • Compliance requirements
    • Archive strategies
  9. Monitoring scalability nasıl sağlanır?

  10. Cevap:
    • Sampling
    • Aggregation
    • Downsampling
    • Data partitioning
    • Storage optimization