Skip to main content

Sık Sorulan Sorular ve Troubleshooting

Configuration-Dependent Değerler

Bu sayfada belirtilen eşik değerleri (paket/dakika limitler, tekrar sayıları, vb.) default değerlerdir. Deployment-specific değerler Eşik Değerleri ve Konfigürasyon bölümünde environment variables ile kontrol edilebilir. Uygulamayı deploy ederken bu değişkenleri ortamınıza göre ayarladığınızdan emin olunuz.

S: Cihaz 500 yanıtı alıyor, nedenini nasıl bulabilirim?

Olası nedenler ve kontrol adımları:

HTTP 500 NedenKontrol NoktasıÇözüm
Raw DB yazım hatasıRaw tabloya yeni kayıt yoksaDB bağlantısı, table şeması, auth kontrol et; logs'ta "raw db write failed" ara
Normalize işlem hatasıRaw DB OK ama Redis boşsaCanonical şema dönüşüm loglarını kontrol et; CPS uyumluluğu doğrula
Redis yazım hatasıRaw DB + logs OK ama device_buffer emptyRedis bağlantı, key formatı (device_buffer:{device_id}), memory kontrol et
Şema doğrulama hatasıParse OK ama 500 dönüyorsaCPS validator loglarını kontrol et; payload CPS sözleşmesine uygun mu?
TimeoutHiçbir layer çıktı yokNetwork gecikmesi, DB slow query, Redis lag kontrol et

Debug adımları:

  1. Application logs'ta "500" veya "Internal Server Error" ara
  2. Layer hangi aşamada başarısız oldu kontrol et (raw/normalize/redis)
  3. Cihazın payload'ını manual test et: curl -X POST ... -d @payload.json
  4. Raw DB, Normalize service ve Redis sağlık kontrol et

S: Duplicate tespiti neden çalışmıyor? Aynı paket tekrar tekrar kabul ediliyor.

Kontrol adımları:

SorunTanıÇözüm
device_time aynı değilHer pakette device_time değişiyorsaCihaz saati senkronize mi? NTP kontrol et
Payload hash farklıWire payload boyutunda fark varsa (örn. whitespace)Normalize öncesi payload hash'in same format olduğundan emin ol
device_runtime key yokRedis'te device_runtime:{device_id} diye bir key yoksaİlk paket başarılı mı? Cihazın device_id doğru mu?
Hash algoritma uyumsuzluğuİki servis farklı hash kullanıyorsaTüm servisler SHA256 (ya da aynı algo) kullanıyor mu?
Duplicate sayaçları sıfırlanıyorSayaçlar reset ediliyor gibi görünüyorsaRedis TTL ayarları kontrol et; cache invalidation politikası gözden geçir

Debug adımları:

  1. device_runtime:{device_id} keyi Redis'te kontrol et: redis-cli GET device_runtime:{device_id}
  2. Ardışık iki paket için logs'ta hash değerlerini karşılaştır
  3. Duplicate event'i Kafka'da görülüyor mu? device.ingest_duplicate_detected.v1 ara
  4. Cihazın device_time değeri gerçekten sabit mi? Üretici firmware'de kontrol et

S: Kafka'ya yazım başarısız olursa ne yapılır? Paket kaybolur mu?

Kısa cevap: Hayır, paket kaybolmaz. Veri Raw DB + Redis'te güvenli tutulur.

Detaylı akış:

Raw DB yazıldı ✅

Normalize yapıldı ✅

Redis güncellendi ✅

Cihaza 200 OK dönüldü ✅

Kafka yazım hatası ❌

→ Çoktan 200 OK döndüğü için cihaz paket göndermez
→ Veri Raw DB + Redis'te kalır
→ Kafka error log + retry queue'ye alınır
→ Manual atau asenkron retry mekanizması devreye girer

Kafka yazım hatasında ne yapılmalı:

  1. Application logs kontrol et: "kafka emit failed" gibi mesajlar var mı?
  2. Kafka broker sağlık kontrol et: connectivity, partition availability, replication
  3. Retry/Outbox mekanizması var mı? Varsa status kontrol et
  4. Veri kaybı riski yoksa, reprocess flow başlat: raw DB'den Kafka'ya yeniden üretim
  5. Monitoring alert kur: "Kafka 5+ dakika offline" gibi

öneri: Event mekanizması başarısız olsa bile, downstream services Redis'ten payload'ı okuyabilmeli. Kafka yalnız "tetik" olarak kullanılmalı.


S: Rate limiting / Flood koruma ne zaman devreye girer?

Kontrol adımları:

DurumBeklenen DavranışKontrol Noktası
Normal trafiği gelen cihazİlk 12 paket/dakika OKLogs'ta warning yok, events normal
Şüpheli trafik (12-30 paket)warning flag set üretilirLogs'ta "suspicious rate" var mı?
Flood trafiği (>30 paket)device.ingest_flood_detected.v1 eventKafka'da flood event var mı? Dashboard'da alarm var mı?
Paket aralığı anormal< expected/4 → warning, < expected/10 → floodCihaz aralık hesaplaması yapıyor mu?
Custom Threshold'lar

Tablodaki değerler (12, 30, 1/4, 1/10) default değerlerdir. Üretim ortamında bu threshold'ları INGEST_RATE_SUSPICIOUS_PER_MINUTE ve benzeri environment variables ile özelleştirebilirsiniz. Detaylar için Eşik Değerleri ve Konfigürasyon bölümüne bakınız.

Debug adımları:

  1. events_per_1m sayaçı Redis'te var mı? Doğru güncelleniyel mi?
  2. Cihazın beklenen device_time aralığı (interval) nedir? Config kontrol et
  3. Warning events Kafka'da gözüküyor mu? device.ingest_*_detected topic ara
  4. Dashboard'da flood threshold alarmı aktif mi?

Hard protection (rate limiting) devreye almadan önce:

  • En az 1 hafta operasyonel verisi topla
  • Cihaz davranışını gözlemle (legitimate burst vs malfunction)
  • False positive risk değerlendir (ex: NTP sync burst, network reconnect)

S: Belirli bir cihaz neden devamlı duplicate uyarısı alıyor?

Tanı adımları:

  1. Cihazın firmware sürümü 1-2 diğer cihazdan farklı mı? → Yazılım hatası ihtimali
  2. Network koşulları (RSI, packet loss) → Retransmit mi?
  3. Device time source (NTP, RTC) senkron mi? → Clock drift
  4. Paket aralığı periyodik mi? → Tasarımsal sorun (stuck loop)
  5. Raw payload gerçekten aynı mı? (Status, measurements) → Sensor arızası

Operasyonel yaklaşım:

  • 1 gün süreyle paketleri kaydet (raw_data table'dan)
  • Cihazla iletişim kur: firmware güncellemesi öner
  • Stuck threshold'u düşür ve stuck event üreterek uyarı ver
  • Replay service ile paketleri yeniden işle (gerekirse)

S: Redis'te device_buffer büyüyor, sorun mu?

Normal sınırlar:

  • Bir device_buffer:{device_id} key ~1-2 KB
  • 100K cihaz × 2 KB = ~200 MB (gayet normal)
  • İğnesi 1000K cihaz × 2 KB = ~2 GB (monitor etmeli)

Buffer büyümesi neden olabilir:

NedenKontrolÇözüm
buffers.measurements boşalmıyorStream service çalışıyor mı?Downstream service health kontrol et
buffers.synthesis boşalmıyorSynthesis işlemesi durmuş mu?Service logs kontrol et, restart et
buffers.window kalıyorWindowing service neden çalışmıyor?Cron job / scheduler kontrol et
TTL yokKey'lerde TTL tanımlanmamış mı?Redis key policy kontrol et; buffer cleanup cron ekle

Tavsiye:

  • Her buffer'a inactive cleanup cron kur (24 saat sonra boşla)
  • Redis memory threshold warning kur (80% trigger)
  • Monthly buffer cleanup job (backpressure handling)

S: Hangi metrikleri izlemeliyim?

Temel monitoring dashboard:

MetrikUyarı EşiğiÖrnek Query
Ingest latency (p95)> 500mshistogram_quantile(0.95, ingest_process_duration_ms)
Raw DB yazım hataları> 10/dakikarate(raw_db_write_errors[1m])
Duplicate rate> 5% of trafficrate(duplicate_packets[1m]) / rate(total_packets[1m])
Flood detections/saat> 5rate(flood_warnings[1h])
Stuck cihaz sayısı> 10count(stuck_cihazlar)
Kafka emit başarısızlık> 1%rate(kafka_emit_errors[1m])
Redis availability< 99.9%redis_up{instance="ingest"}
Request/saniyeBaseline üstü %50+rate(http_requests_total[1m])

Önerilen alerts:

  • "p95 latency > 1s" → Infrastructure issue
  • "raw_db errors > 50/min" → Database problem
  • "duplicate rate > 10%" → Hardware/firmware issue
  • "stuck_devices > 20" → Fleet health alarm
  • "kafka offline > 5min" → Critical outage

S: Flow diyagramlarını detaylı görmek için hangisine bakmalıyım?

Her diyagram için rehber: