Sentry ve OpenTelemetry: Rakip Değil, Birlikte Çalışan Araçlar
Sentry, mevcut OpenTelemetry altyapınızı değiştirmeden OTLP üzerinden entegre olabiliyor. Frontend'de Sentry SDK, backend'de OpenTelemetry ile trace bağlantısı nasıl kurulur?
OpenTelemetry ile enstrümante edilmiş bir backend'i olan ekipler Sentry'yi değerlendirirken genellikle mevcut yapıyı Sentry SDK ile değiştirmeleri gerektiğini düşünüyor. Oysa asıl yaklaşım, backend'de OpenTelemetry'yi olduğu gibi bırakıp, frontend'de tarayıcı izleme, hata yakalama, Session Replay ve log toplama gibi ek bağlam sağlayan Sentry SDK'sını kullanmak ve OTLP (OpenTelemetry Protocol) olaylarını Sentry'ye göndermek. Şu an Sentry'nin OTLP desteği trace ve logları kapsıyor, metrikler henüz desteklenmiyor.
Burada birbirinden ayrılması gereken iki karar var: frontend ve backend arasında trace bağlantısının nasıl kurulacağı (W3C traceparent başlıkları ile) ve backend'den üretilen OTLP olaylarının Sentry'ye nasıl aktarılacağı. İkinci karar için iki yol mevcut: backend'den doğrudan Sentry'nin OTLP uç noktasına gönderim ya da bir OpenTelemetry Collector üzerinden iletme. Tek servisli kurulumlarda doğrudan gönderim daha az bileşen gerektirirken, birden fazla servisin olduğu ortamlarda Collector merkezi yönlendirme, toplu işleme ve örnekleme imkanı sunuyor; ayrıca mevcut bir gözlemlenebilirlik sağlayıcısına paralel olarak Sentry'ye de veri akıtarak karşılaştırma yapılabiliyor.
Çok projeli kurulumlarda dikkat edilmesi gereken bir nokta var: standart bir OTLP HTTP exporter'ı tek bir Sentry proje anahtarına bağlı olduğundan tüm servisler aynı projeye düşer. Bunun yerine service.name gibi kaynak niteliklerine göre olayları farklı projelere yönlendirebilen ve gerekli izinlerle eksik projeleri otomatik oluşturabilen Sentry exporter'ı kullanılması öneriliyor.
Örnek bir mimaride React + @sentry/react frontend'i, fetch üzerinden traceparent başlığı göndererek FastAPI + OpenTelemetry backend'ine bağlanıyor, backend ise OTLP olaylarını bir Collector üzerinden Sentry'ye iletiyor. Böylece her katman farklı bir SDK kullansa da aynı dağıtık trace'e katılıyor ve backend logları bu debugging bağlamına eklenmiş oluyor.