Remote Logging — nedir, toplama araçları ve uzaktan log analizi yöntemleri

Yazar: IT Sectr Yayınlanma: 2026-05-28 Okuma süresi: 8 dk

Remote Logging, mobil cihazdan uzak bir sunucuya merkezi analiz ve izleme için log gönderme mekanizmasıdır. Verileri cihazda depolayan yerel loglamanın aksine, uzaktan toplama, tüm kullanıcı cihazlarından hataları ve anormallikleri gerçek zamanlı olarak görmeyi sağlar. Sentry Resource Library'ye göre, remote logging kullanan uygulamalar, yalnızca crash raporları kullanıldığında %15'e karşılık, sürümden sonraki ilk saat içinde üretim hatalarının %92'sini bulur. Bu, herhangi bir mobil geliştirme ekibi için zorunlu bir araçtır: Firebase Crashlytics, Sentry ve Datadog, iOS ve Android için hazır SDK'lar sağlar.

Ana noktalar

  • Remote Logging — merkezi izleme ve üretim hatalarının analizi için cihazdan sunucuya log gönderme
  • Firebase Crashlytics — Android ve iOS'te çökmeleri ve özel logları toplamak için Google'ın ücretsiz hizmeti
  • Sentry — breadcrumbs, kullanıcı bağlamı ve distributed tracing desteğiyle hata izleme platformu
  • Logcat — Android'in standart loglama sistemi, ADB ve Android Studio üzerinden uzaktan erişilebilir
  • Toplu gönderme (Batching) — pil ve trafikten tasarruf etmek için cihazda logları gruplama ve gruplar halinde gönderme

Remote Logging Nedir

Remote Logging, uzak cihazlardan log toplama ve analiz için merkezi bir sunucuya iletme sürecidir. Mobil geliştirme bağlamında, remote logging yalnızca crash raporlarını değil, aynı zamanda özel etkinlikleri, breadcrumbs'ları, performans metriklerini ve kullanıcı senaryolarını da içerir.

Remote logging ile crash reporting arasındaki temel fark proaktifliktir. Crash reporting yalnızca daha önce meydana gelmiş uygulama çökmeleri hakkında veri toplar. Remote logging, çökmeden önceki olay dizisini toplar: kullanıcının hangi ekranları açtığı, hangi istekleri yaptığı, hangi verileri girdiği. Bu, kullanıcıyla iletişim kurmadan hata senaryosunu yeniden oluşturmayı sağlar.

Apple, .logarchive aracılığıyla uzaktan log toplama için yerleşik bir mekanizma sağlar, ancak üretim uygulamaları için neredeyse her zaman üçüncü taraf hizmetler kullanılır. Android SDK, ADB üzerinden uzaktan erişilebilen Logcat'i içerir, ancak hata ayıklama modu olmayan son kullanıcı cihazları için geçerli değildir.

Uzaktan Log Toplama Mimarisi

Remote logging mimarisi üç bileşenden oluşur: cihazdaki istemci SDK'sı (logları toplar ve arabelleğe alır), veri göndermek için taşıma protokolü ve depolama ile görselleştirme için sunucu.

BileşenRolÖrnekler
İstemci SDKToplama, arabelleğe alma, toplu göndermeFirebase SDK, Sentry Cocoa, Timber
TaşımaHTTPS üzerinden veri iletimiREST, gRPC, WebSocket
SunucuDepolama, indeksleme, uyarılarSentry, Crashlytics, Datadog

İstemci SDK, logları RAM'de arabelleğe alır ve periyodik olarak gruplar halinde sunucuya gönderir. Cihaz çevrimdışıysa, loglar yerel bir dosyaya kaydedilir ve bir sonraki ağ bağlantısında gönderilir. Arabellek boyutu ve gönderme aralığı yapılandırılabilir: tipik değerler 50 olay veya 30 saniyedir.

Taşıma Protokolleri

HTTPS REST, remote logging için en yaygın protokoldür. SDK, logları JSON'a serileştirir ve sunucu uç noktasına POST istekleriyle gönderir. gRPC, ikili serileştirme (Protocol Buffers) ile bir alternatiftir, JSON'dan %30–40 daha derli topludur ve kararsız bağlantılara sahip mobil cihazlarda daha hızlıdır. WebSocket, hata ayıklamada gerçek zamanlı loglama için kullanılır ancak güç tüketimi nedeniyle üretimde nadiren kullanılır.

Firebase Crashlytics: Çökme ve Log Toplama

Firebase Crashlytics, çökme raporlarını ve özel logları toplamak için Google'ın ücretsiz hizmetidir. Firebase SDK'ya entegre edilmiştir ve ayrı bir sunucu gerektirmez. Crashlytics, çökme anında otomatik olarak yığın izlerini, cihaz durumunu, işletim sistemi sürümünü ve açık ekranları toplar.

Crashlytics'teki özel loglar log() yöntemiyle eklenir — sunucuya hemen gönderilmez, dairesel bir arabellekte saklanır ve bir sonraki çökme raporuna eklenir. Bu, her logun ayrı bir olay olduğu Sentry'den temel farktır. Crashlytics'teki özel logların maksimum hacmi çökme başına 64 KB'dir.

kotlin
// Firebase Crashlytics — Android'te özel loglar
import com.google.firebase.crashlytics.FirebaseCrashlytics

class CheckoutViewModel {
    fun processPayment(amount: Double) {
        FirebaseCrashlytics.getInstance()
            .log("Payment started: amount=$amount")
        try {
            process(amount)
        } catch (e: Exception) {
            FirebaseCrashlytics.getInstance()
                .recordException(e)
        }
    }
}

Firebase Crashlytics, çökmeleri belirli kullanıcılara bağlamak için setUserIdentifier'ı destekler. Bu, hatanın yaygın mı yoksa yalnızca bir kullanıcıyı mı etkilediğini belirlemeye yardımcı olur. setCustomKey, her rapora rastgele anahtarlar (A/B test sürümü, bölge, fiyatlandırma planı) ekler.

Sentry: breadcrumbs ve Kullanıcı Bağlamı

Sentry, yalnızca çökme raporlarını değil, tüm özel etkinlikleri (breadcrumbs) bağımsız kayıtlar olarak depolayan bir hata izleme platformudur. Crashlytics'in aksine Sentry, hatadan önceki olay dizisini kronolojik sırayla görüntülemenizi sağlar — breadcrumbs, çökme günlüğünden yeniden oluşturmaya gerek kalmadan arayüzde görünür.

Sentry'de Otomatik breadcrumbs

Sentry SDK, sistem etkinlikleri için otomatik olarak breadcrumbs toplar: UIViewController yaşam döngüsü değişiklikleri (viewDidLoad, viewWillAppear), dokunmalar, düğme basmaları, URLSession aracılığıyla HTTP istekleri. Tüm bu etkinlikler, özel breadcrumbs ile birlikte hata zaman çizelgesinde görünür. Android için, Activity ve Fragment yaşam döngüsü, onClick etkinlikleri ve OkHttp aracılığıyla ağ istekleri benzer şekilde toplanır.

iOS ve Android için Sentry SDK, UI etkinliklerinin (dokunma, gezinme, yaşam döngüsü) breadcrumbs'larını otomatik olarak toplar. Geliştiriciler, tür, kategori ve seviye belirterek addBreadcrumb() aracılığıyla özel breadcrumbs ekleyebilir. Sentry, distributed tracing'i destekler: günlükçü, istemci tarafı breadcrumbs'ları bir izleme kimliği aracılığıyla arka uç istekleriyle ilişkilendirir.

swift
import Sentry

func trackCartEvent(action: String, itemId: String) {
    let crumb = Breadcrumb()
    crumb.level = .info
    crumb.category = "cart"
    crumb.message = "Cart \(action): \(itemId)"
    crumb.data = ["action": action, "item_id": itemId]
    SentrySDK.addBreadcrumb(crumb)
}

Logcat ve ADB ile Uzaktan Erişim

Logcat, Android Debug Bridge (ADB) aracılığıyla erişilebilen Android'in standart loglama sistemidir. Logcat, tüm sistem ve uygulama mesajlarını seviyelere (V, D, I, W, E, F) ve etiketlere göre düzenleyerek toplar. Logcat'e uzaktan erişim, USB veya Wi-Fi üzerinden ADB ile çalışır, ancak yalnızca hata ayıklama modundaki cihazlar için geçerlidir — USB bağlantısı olmayan cihazlardaki üretim uygulamalarına erişilemez.

Android'de üretimde uzaktan loglama için alternatifler kullanılır: Logcat kendi başına bir sunucuya log gönderemez. Rolü yerel teşhistir. Ancak, tanıdık Log.d / Log.e API'sini korurken mesajları Firebase veya Sentry'ye yönlendiren sarmalayıcılar (Timber, LogcatLive) mevcuttur. Timber, uygulama kodunu değiştirmeden işleyicileri değiştirmeyi sağlar — bir hata ayıklama ağacı Logcat'e yazar, bir sürüm ağacı toplu gönderme ve sıkıştırma ile sunucuya gönderir.

Toplu Gönderme ve Trafik Optimizasyonu

Toplu gönderme (Batching), trafik ve pilden tasarruf etmek için birden çok logu tek bir HTTP isteğinde gruplamaktır. 50 ayrı POST isteği yerine SDK, tek bir JSON dizisi gönderir. Tipik stratejiler: zamanlanmış gönderme (her 30 saniyede bir), sayıya göre (her 50 olayda bir) veya olaya göre (yalnızca kritik hatalarda).

Milyonlarca kullanıcısı olan uygulamalar için log hacmi günde terabaytlara ulaşabilir. Toplu gönderme, istek sayısını 10–50 kat azaltır ve sunucu yükünü düşürür. Sentry, taşıma düzeyinde gzip sıkıştırması kullanarak veri hacmini ek olarak %60–70 oranında azaltır.

kotlin
// Android'te basit toplu gönderme uygulaması
class LogBatcher {
    private val buffer = mutableListOf<LogEvent>()
    private val maxSize = 50
    private val intervalMs = 30_000L

    fun append(event: LogEvent) {
        buffer.add(event)
        if (buffer.size >= maxSize) flush()
    }

    suspend fun flush() {
        val batch = buffer.toList()
        buffer.clear()
        sendToServer(batch)
    }
}

Sıkıştırma ve Yinelenen Kaldırma

gzip, logların HTTP iletimi için standart sıkıştırma yöntemidir. Sentry ve Crashlytics SDK'ları, göndermeden önce istek gövdesini otomatik olarak sıkıştırır. Yinelenen kaldırma — istemci tarafında yinelenen mesajların kaldırılması: aynı olay saniyede 100 kez meydana gelirse, SDK onu count = 100 alanıyla bir kez gönderir.

Uzaktan Loglamada Tipik Hatalar

En yaygın hata, hassas verilerin günlüğe kaydedilmesidir. Remote logging SDK'ları sunucuya veri iletir ve bir geliştirici yanlışlıkla bir parola, belirteç veya kullanıcı e-postasını günlüğe kaydederse, bu veriler bulut altyapısında sonlanır. SDK düzeyinde her zaman PII (Kişisel Olarak Tanımlanabilir Bilgi) filtrelemesi kullanın: Sentry, göndermeden önce verileri temizlemek için yerleşik bir beforeSend kancasına sahiptir.

İkinci yaygın sorun aşırı loglamadır. Her parmak hareketi sunucuya gönderilirse, veri hacmi katlanarak artar ve sunucu maliyetleri de artar. Bir loglama bütçesi belirleyin: üretimde kullanıcı başına dakikada 1–5 olaydan fazla olmamalıdır. Hata ayıklama loglarını yalnızca belirli cihazlar için etkinleştirilen bir işaretle gönderin.

Üçüncü hata, çevrimdışı senaryoyu göz ardı etmektir. SDK, ağ olmadığında logları kaybeder ve yeniden bağlanırken geri yüklemezse, remote logging, kararsız bağlantıları olan kullanıcılar için işe yaramaz. Tüm SDK'lar (Firebase, Sentry) otomatik olarak logları yerel bir dosyada önbelleğe alır ve ağ kullanılabilir olduğunda gönderir, ancak bu ayarın kontrol edilmesi gerekir.

Sıkça Sorulan Sorular

Remote Logging, crash reporting'den nasıl farklıdır?

Crash reporting yalnızca uygulama çökmeleri hakkında bilgi toplar. Remote Logging tüm olayları toplar: özel loglar, breadcrumbs, performans metrikleri, UI etkinlikleri. Crash reporting, remote logging'in bir alt kümesidir, alternatifi değildir.

Hangi hizmet seçilmeli: Firebase Crashlytics mi Sentry mi?

Crashlytics ücretsizdir ve temel çökme raporları için yeterlidir. Breadcrumbs, distributed tracing, özel panolar ve esnek uyarılar gerekiyorsa Sentry daha iyidir. Uyumluluk gereksinimleri olan kurumsal projeler için Sentry, kendi kendine barındırılan sürümde mevcuttur.

Üretimde gereksiz verileri günlüğe kaydetmekten nasıl kaçınılır?

Loglama seviyeleri kullanın: debug/info loglarını yalnızca isDebuggable işaretiyle geliştirici cihazından gönderin. beforeSend kancası aracılığıyla diğer seviyeleri (warn, error) filtreleyin, PII içeren alanları kaldırın. Oturum başına maksimum log boyutunu tanımlayın.

Logcat uzaktan log toplama için kullanılabilir mi?

Logcat, bir sunucuya uzaktan göndermeyi desteklemez. Android'de remote logging için Firebase veya Sentry'ye yönlendirmek üzere Timber kullanın ve Logcat'i USB ile hata ayıklama için bırakın. Timber, Android Log API'sini değiştirir ve eklenebilir ağaçlar ekler.

Pili etkilemeden kaç log gönderilebilir?

Cihaz başına dakikada 50 olaya kadar, toplu gönderme (tek tek değil gruplar halinde gönderme) kullanılırsa pil tüketimini belirgin şekilde etkilemez. Dakikada 200+ olayda Wi-Fi/modem sürekli aktif olacaktır — pil %15–25 daha hızlı biter.

Özet

  • Remote Logging — çökme raporları, breadcrumbs ve performans metrikleri dahil olmak üzere merkezi analiz için mobil cihazdan sunucuya log gönderme
  • Firebase Crashlytics — dairesel arabellekte özel loglarla Google'ın ücretsiz hizmeti, çökme raporlarına eklenir
  • Sentry — bağımsız breadcrumbs ve distributed tracing ile platform, çökme günlüğünden yeniden oluşturmadan hata öncesi olay dizisini görüntüleme
  • Toplu gönderme (Batching) — gzip sıkıştırmasıyla 50+ logu tek istekte gruplama, trafiği ve sunucu yükünü 10–50 kat azaltma
  • PII Filtreleme — beforeSend kancaları aracılığıyla hassas verilerin zorunlu temizliği, kişisel verilerin sunucuya sızmasını önleme
  • Loglama Bütçesi — üretimde kullanıcı başına dakikada 1–5 olaydan fazla değil, belirli cihazlarda yalnızca isDebuggable işaretiyle hata ayıklama logları

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun