OpenTelemetry ve Özel APM Ajanları: Hangisini Seçmeli?
OpenTelemetry ile özel APM ajanları; kilitlenme riski, log-metrik-trace kalitesi ve panolar ile uyarılar oluşturmanın gerçek maliyeti açısından karşılaştırma.

APM ile hangi problemi çözmeye çalışıyorsunuz?
Ekipler genellikle bir şeyler zaten acı veriyorken APM kurar: sayfalar yavaş, rastgele hatalar veya çökmeler nedeninin anlaşılması uzun sürüyor. İlk hafta bir zafer gibi gelebilir. Sonunda trace’leri görürsünüz, birkaç grafik ve şık bir “servis sağlığı” ekranı. Sonra bir sonraki olay olur ve yine saatler sürer, uyarılar “hiçbir şey” için çalar ve insanlar panolara güvenmeyi bırakır.
Kullanışlı gözlemlenebilirlik daha fazla veri toplamakla ilgili değildir. Hızlı cevap almakla, harekete geçmek için yeterli bağlamla ilgilidir. İyi bir kurulum tam olarak başarısız isteği bulmanıza, neyin değiştiğini görmenize ve kullanıcıların etkilenip etkilenmediğini doğrulamanıza yardımcı olur. Ayrıca yanlış alarmları azaltır, böylece ekip önemli olduğunda yanıt verir.
Çoğu zaman ajanı kurmakla geçmez. Ham sinyalleri güvenilir bir şeye dönüştürmekle geçer: neyi enstrümante edeceğinize (ve neyin gürültü olduğuna) karar vermek, environment ve version gibi tutarlı etiketleri eklemek, ekibinizin düşünme biçimiyle eşleşen panolar oluşturmak, uyarıları ayarlamak ve insanlara “iyi”nin neye benzediğini öğretmek.
İşte OpenTelemetry ile özel APM ajanları arasındaki seçim burada gerçek olur. Özel bir ajan sizi "ilk verilere" hızlıca taşıyabilir, ancak genellikle sizi o satıcının isimlendirmesine, örnekleme davranışına ve paketlemesine doğru yönlendirir. Aylar sonra yeni bir backend eklediğinizde, bulut değiştirdiğinizde veya logları nasıl ele aldığınızı değiştirdiğinizde panoların ve uyarıların satıcıya özgü davranışlara bağımlı olduğunu görebilirsiniz.
Basit bir örnek: dahili bir yönetici aracı ve bir müşteri portalı inşa ediyorsunuz. Başlangıçta çoğunlukla hatalar ve yavaş uç noktalarla görünür olmaya ihtiyacınız var. Sonra iş seviyesinde görünüm istersiniz: ödeme hataları veya bölgeye göre giriş sorunları gibi. Kurulumunuz enstrümantasyonu yeniden yapmadan ve sorguları yeniden öğrenmeden evrilemiyorsa, o maliyeti tekrar tekrar ödersiniz.
Amaç “en iyi” aracı seçmek değil. Amaç ayrıştırmayı hızlı tutan, uyarıları sakin tutan ve gelecekteki değişiklikleri uygun maliyetli yapan bir yaklaşım seçmektir.
Kısa tanımlar: OpenTelemetry ve özel ajanlar
İnsanlar OpenTelemetry ile özel APM ajanlarını karşılaştırdığında iki farklı fikir karşılaştırılır: gözlemlenebilirlik verilerini toplamak için ortak bir standart versus paketlenmiş, satıcıya ait bir izleme yığını.
OpenTelemetry (genellikle OTel) telemetri verisi üretmek ve göndermek için açık bir standart ve araç setidir. Üç temel sinyali kapsar: trace’ler (servisler arasındaki ne oldu), metrikler (bir sistemin zaman içindeki davranışı) ve loglar (bir zamanda sistemin söylediği). Önemli nokta OpenTelemetry’nin tek bir izleme satıcısı olmadığıdır. Sinyalleri üretmek ve taşımak için ortak bir yoldur, böylece verilerin nereye gideceğini seçebilirsiniz.
Özel bir APM ajanı, uygulamanıza (veya host’a) kurduğunuz satıcıya özgü bir kütüphane veya süreçtir. Verileri satıcının beklediği formatta toplar ve tipik olarak o satıcının backend’i, panoları ve uyarı sistemiyle birlikte kullanıldığında en iyi şekilde çalışır.
Collector’lar, gateway’ler ve backend’ler (basit terimlerle)
Çoğu telemetri boru hattı üç parçaya sahiptir:
- Enstrümantasyon: trace, metrik ve log oluşturan kod veya ajan.
- Collector (veya gateway): sinyalleri alan, toplu işleyen, filtreleyen ve ileten ara hizmet.
- Backend: verinin saklandığı, sorgulandığı ve panolar ile uyarılara dönüştüğü yer.
OpenTelemetry ile collector ortak olur çünkü backend’leri değiştirmeyi uygulama kodunu değiştirmeden mümkün kılar. Özel ajanlarda collector rolü ajan içinde paketlenmiş olabilir veya veri doğrudan satıcı backend’ine gidebilir.
“Enstrümantasyon” gerçekte ne anlama gelir
Enstrümantasyon yazılımınızın ne yaptığını raporlamasıdır.
Backend servisleri için bu genellikle bir SDK veya otomatik enstrümantasyonun etkinleştirilmesi ve önemli span’ların (checkout, login gibi) adlandırılmasını içerir. Web uygulamaları için sayfa yüklemeleri, frontend istekleri ve kullanıcı eylemleri (gizlilik açısından dikkatli ele alınmalı) dahil olabilir. Mobil uygulamalarda genellikle yavaş ekranlar, ağ çağrıları ve çökme raporları önemlidir.
AppMaster gibi bir platformla uygulamalar oluşturuyorsanız (Go backend’ler, Vue3 web uygulamaları ve Kotlin/SwiftUI mobil uygulamaları üretiyorsa), aynı kararlar geçerlidir. İskelet işinde daha az zaman harcarsınız ve tutarlı isimlendirme, hangi olayların önemli olduğu ve verileri hangi backend’e yönlendireceğiniz konusunda anlaşmaya daha fazla zaman ayırırsınız.
Satıcı kilitlenmesi: pratikte nasıl görünür
Kilitlenme genellikle ajanın kaldırılıp kaldırılamayışıyla ilgili değildir. Asıl mesele etrafında kurduğunuz her şeydir: panolar, uyarılar, isimlendirme kuralları ve ekibinizin olayları soruşturma biçimi.
Günlük hayatta kilitlenmenin göründüğü yerler
İlk tuzak veri taşınabilirliğidir. Ham log veya trace’leri dışa aktarabilseniz bile aylarca süren geçmişi taşımak ve panoları kullanılabilir tutmak zordur. Özel araçlar genellikle veriyi özel bir modelde saklar ve panolar satıcıya özgü sorgu dili, widget’lar veya “sihrî” alanlara dayanır. Ekran görüntülerini saklayabilirsiniz ama çalışan panoları kaybedersiniz.
İkinci tuzak kod ve konfigürasyondaki bağlanmadır. OpenTelemetry doğru kullanıldığında yine bağlanma yaratabilir eğer satıcıya özgü exporter’lar ve metadata’lara dayanırsınız; ancak özel ajanlar genellikle hata raporları, kullanıcı oturumları, RUM veya veritabanı “ekstra”ları için özel API’lerle daha ileri gider. Uygulama kodunuz bu API’leri ne kadar çok çağırırsa, daha sonra geçiş yapmak o kadar refaktör gerektirir.
Fiyatlandırma da kilitlenme yaratabilir. Paketleme değişiklikleri, yüksek kardinaliteliğe göre fiyatlama veya trace ile log arasındaki farklı oranlar kullanım büyüdüğünde maliyeti yükseltebilir. Olay müdahaleniz satıcı UI’sine bağlıysa pazarlık yapması zorlaşır.
Uyumluluk ve yönetişim de önemlidir. Verinin nereye gittiği, ne kadar süre saklandığı ve hassas alanların nasıl işlendiği konusunda net cevaplara ihtiyacınız var. Çoklu bulut kurulumları veya bölgesel kısıtlamalarla bu acil hale gelir.
Kendinizi sıkışmış hissettiğiniz işaretler:
- Panolar ve uyarılar yeniden kullanılabilir formatta dışa aktarılamıyor
- Uygulama kodu çekirdek iş akışları için satıcıya özel SDK çağrıları kullanıyor
- Ekip, başka yerde yeniden oluşturamayacağınız satıcıya özgü alanlara güveniyor
- Hizmet eklediğinizde veya trafik arttığında maliyetler fırlıyor
- Veri yerleşimi seçenekleri yönetişim ihtiyaçlarıyla uyuşmuyor
Bir çıkış stratejisi çoğunlukla erken dokümantasyondur. Ana SLO’larınızı, isimlendirme konvansiyonlarınızı ve uyarı eşiklerinizi kaydedin. Hangi sinyallerin hangi uyarıları tetiklediğinin kısa bir haritasını tutun. Ayrılmak zorunda kalırsanız, panelleri yeniden inşa etmek istersiniz; sistemi baştan yazmak değil.
Sinyal kalitesi: loglar, metrikler ve trace’ler karşılaştırması
Sinyal kalitesi araçtan ziyade tutarlılığa bağlıdır. Pratik fark kim kuralları koyuyor: bir satıcı ajanı "yeterince iyi" varsayılanlar verebilirken, OpenTelemetry kontrol verir ama konvansiyonları sizin tanımlamanızı bekler.
Loglar: yapı ve bağlam
Loglar baskı altında tutarlı olmazsa ancak yapılandırılmış ve tutarlı bağlam taşıdıklarında işe yarar. Özel ajanlar bazen logları otomatik olarak zenginleştirir (servis adı, environment, request ID) eğer kendi logging çözümünü kullanıyorsanız. OpenTelemetry de aynı şeyi yapabilir ama servisler arasında alanları standardize etmeniz gerekir.
İyi bir temel: her log satırı bir trace ID (mümkünse span ID) ve uygun olduğunda kullanıcı veya tenant tanımlayıcıları içersin. Bir servis JSON log yazarken diğeri düz metin yazıyorsa korelasyon tahmin yürütmeye döner.
Metrikler: isimlendirme ve kardinalite
Metrikler sessizce başarısız olur. Çok sayıda grafik olabilir ama olaydaki ihtiyaç duyduğunuz boyutu kaçırabilirsiniz. Satıcı ajanları genellikle stabil isimlere ve mantıklı etiketlere sahip önceden hazırlanmış metriklerle gelir. OpenTelemetry ile aynı kaliteye ulaşabilirsiniz ama ekipler arasında isimlendirme ve etiketleri zorlamanız gerekir.
İki yaygın tuzak:
- Yüksek kardinaliteli etiketler (tam kullanıcı ID’leri, e-postalar, içinde ID geçen istek yolları) maliyeti patlatır ve sorguları yavaşlatır.
- Eksik boyutlar, örneğin gecikmeyi takip etmek ama uç nokta veya bağımlılık bazında ayırmamak.
Trace’ler: kapsama, örnekleme ve bütünlük
Trace kalitesi span kapsamasına bağlıdır. Otomatik enstrümantasyon (özel ajanlarda genellikle güçlü) çabuk çok şey yakalayabilir: web istekleri, veritabanı çağrıları, yaygın framework’ler. OpenTelemetry otomatik enstrümantasyonu da güçlü olabilir, ama iş adımlarını yakalamak için manuel span’lar eklemeniz gerekebilir.
Örnekleme takımı şaşırtır. Ağır örnekleme para tasarrufu sağlar ama önemli isteğin eksik olduğu kırık hikâyelere yol açar. Pratik yaklaşım normal trafiği örneklerken hatalar ve yavaş istekleri daha yüksek oranda tutmaktır.
Servisler arası korelasyon gerçek testtir: bir uyarıdan aynı isteğe ait tam trace’e, oradan da aynı isteğin loglarına atlayabiliyor musunuz? Bu ancak propagation header’ları tutarlı olduğunda ve her servisin bunlara saygı gösterdiğinde çalışır.
Daha iyi sinyaller istiyorsanız, konvansiyonlarla başlayın:
- Standart log alanları (trace_id, service, env, request_id)
- Metrik isimleri ve izin verilen etiketler (ve yasaklı yüksek kardinaliteli etiketlerin listesi)
- Minimal tracing politikası (neyin izlenmesi gerektiği ve hatalar için örneklemenin nasıl değiştiği)
- Ortamlar arasında tutarlı servis isimlendirmesi
- Önemli iş akışlarında manuel span planı
Çaba ve bakım: kararın görünmeyen kısmı
Ekipler genellikle önce özellikleri karşılaştırır, sonra gerçek maliyeti aylardır hissederler: enstrümantasyonu kim temiz tutuyor, bozuk panoları kim düzeltiyor ve sistem değiştiğinde ne kadar hızlı cevap alıyorsunuz.
İlk değere ulaşma süresi genellikle özel ajanlara avantaj sağlar. Bir ajan kurarsınız ve hazır panolar ile uyarılar gün 1’de iyi görünür. OpenTelemetry aynı gücü sunabilir, ama erken başarı telemetriyi saklayıp görüntüleyecek bir backend’e ve mantıklı varsayılanlara bağlıdır.
Her iki yaklaşımda da enstrümantasyon nadiren %100 otomatiktir. Otomatik enstrümantasyon yaygın framework’leri kapsar, ancak boşluklar çabuk ortaya çıkar: dahili kuyruklar, özel middleware, arka plan işleri ve işe özgü adımlar. En faydalı telemetri genellikle küçük miktarda manuel işten gelir: ana iş akışları (checkout, ticket oluşturma, rapor üretimi) etrafında span eklemek ve doğru attribute’ları kaydetmek.
Servis isimlendirmesi ve attribute’lar panoların kullanılabilir olup olmayacağını belirler. Bir servis api, diğeri api-service ve üçüncüsü backend-prod ise her grafik bir bulmacaya dönüşür. Aynı sorun environment, bölge ve version etiketlerinde de çıkar.
Pratik bir isimlendirme temeli:
- Her dağıtılabilir birim için tek stabil bir servis adı seçin
environment(prod, staging, dev) veversionstandardize edin- Yüksek kardinaliteli değerleri (kullanıcı ID’leri gibi) metrik etiketlerinden uzak tutun
- Tutarlı hata alanları kullanın (type, message, status)
Operasyonel yük farklıdır. OpenTelemetry genellikle collector’ları çalıştırmak ve güncellemek, örneklemeyi ayarlamak ve düşen telemetriyi sorun gidermek anlamına gelir. Özel ajanlar bu kurulumun bir kısmını azaltır, ama yine de ajan güncellemeleri, performans yükü ve platform tuhaflıkları ile uğraşırsınız.
Ayrıca ekip değişimine de hazırlanın. En iyi seçim, orijinal sahibin gitmesinden sonra ekibin sürdürebileceği seçimdir. AppMaster gibi bir platformda uygulamalar geliştiriyorsanız, servisleri enstrümante etmenin tek bir standart yolunu dokümante etmek yeni uygulamaların aynı konvansiyonları takip etmesini kolaylaştırır.
Adım adım: sisteminizde her iki seçeneği nasıl değerlendireceksiniz
Her şeyi ilk başta enstrümante etmeyin. Veri içinde boğulursunuz ve hiçbir şey öğrenemezsiniz. Adil bir karşılaştırma, kullanıcıların sorun yaşadığı biçimde eşleşen küçük, gerçek bir sistem dilimi ile başlar.
İş açısından önemli ve bozulduğunda tanınması kolay bir veya iki kritik kullanıcı yolunu seçin; örneğin “kullanıcı giriş yapar ve panoyu yükler” veya “ödeme tamamlanır ve makbuz e-postası gönderilir”. Bu akışlar birden fazla servisi geçer ve açık başarı/başarısızlık sinyalleri oluşturur.
Daha fazla veri toplamadan önce temel bir servis haritası ve isimlendirme kurallarında anlaşın. Bir servisin ne sayılacağını, nasıl adlandırılacağını (insana yakın, stabil isimler) ve ortamları (prod vs staging) nasıl ayıracağınızı kararlaştırın. Bu tek seferlik disiplin aynı şeyin beş farklı isim altında görünmesini önler.
Filtreleyip bağlayabileceğiniz ama maliyeti şişirmeyecek minimum attribute setini kullanın: env, version, tenant (çok kiracılıysa) ve bir request ID (veya trace ID) ki bir hatadan kopyalayıp uçtan uca izleyebilesiniz.
Pratik pilot planı (1-2 hafta)
- 1-2 yolun uçtan uca enstrümantasyonunu yapın (frontend, API, veritabanı ve 1-2 ana entegrasyon).
- Servis isimleri, uç noktalar ve ana işlemler için isimlendirme kurallarını uygulayın.
- Minimum attribute setiyle başlayın: env, version, tenant ve request/trace ID.
- Bir örnekleme planı belirleyin: hatalar ve yavaş istekleri daha yüksek oranda tutun; normal trafiği örnekleyin.
- İki şeyi ölçün: teşhis süresi (time-to-diagnosis) ve uyarı gürültüsü (harekete geçirilemeyen uyarılar).
AppMaster’dan oluşturulmuş kaynak kodunu (ör. Go backend ve web uygulaması) dışarı aktarıp çalıştırıyorsanız, pilotta onu da normal bir uygulama gibi ele alın. Amaç mükemmel kapsama değil. Amaç hangi yaklaşımın sizi "bir şey yanlış" halinden "başarısız adım burada"ya en az sürekli iş ile taşıdığını öğrenmektir.
Kullanışlı panolar ve uyarılar elde etmek (sonsuz ayarlama olmadan)
Panolar ve uyarılar, olay sırasında insanların sorduğu sorulara cevap vermediğinde başarısız olur. Başlangıçta kullanıcı acısına bağlı küçük bir sinyal setiyle başlayın, altyapı ayrıntılarıyla değil.
Pratik başlangıç seti gecikme, hatalar ve doygunluktur. Eğer her uç nokta için p95 gecikmeyi, servis başına hata oranını ve bir doygunluk sinyalini (kuyruk derinliği, DB bağlantıları veya çalışan kullanımı) görebiliyorsanız genellikle problemi hızla bulabilirsiniz.
Her yeni servis için panelleri yeniden inşa etmekten kaçınmak için isimlendirme ve etiketlerde katı olun. service.name, deployment.environment, http.route ve status_code gibi tutarlı attribute’lar kullanın. Burada ekipler genellikle farkı hisseder: OpenTelemetry standart bir şekli teşvik ederken, özel ajanlar faydalı ekstralar ekleyebilir; bazen bu alanlar satıcıya özgü olur.
Panoları küçük ve tekrarlanabilir tutun. Bir “Servis genel bakış” panosu, tüm API’ler için çalışmalı eğer tüm servisler aynı temel metrikleri ve etiketleri yayıyorsa.
Kullanıcı etkisine işaret eden uyarılar
Uyarılar kullanıcıların fark ettiği durumlarda tetiklenmelidir, bir sunucu meşgul göründüğünde değil. Güçlü varsayılanlar arasında ana uç noktalarda yüksek hata oranı, 5-10 dakika boyunca kabul edilmiş eşikleri aşan p95 gecikme ve yakında arıza öngören doygunluk (kuyruk büyümesi, DB havuzu tükenmesi) bulunur. Ayrıca bir servisin raporlamayı durdurduğunu fark etmeniz için “telemetri eksik” uyarısı ekleyin.
Bir uyarı tetiklendiğinde, uyarı açıklamasına bir veya iki runbook notu ekleyin: hangi panoyu ilk açacağınız, hangi son deploy’u kontrol edeceğiniz ve hangi log alanlarıyla filtreleyeceğiniz.
Sahipliği de planlayın. Aylık kısa bir inceleme takvime koyun. Bir kişi gürültülü uyarıları kaldırır, kopyaları birleştirir ve eşikleri ayarlar. Ayrıca yeni servislerin aynı etiketleri takip ettiğinden emin olmak için iyi bir zamandır.
Zaman ve bütçe israfına yol açan yaygın hatalar
Gözlemlenebilirlikte parayı en hızlı yakan yol her şeyi aynı anda açmaktır. Ekipler her otomatik enstrümantasyon seçeneğini etkinleştirir ve sonra faturaların neden fırladığını, sorguların neden yavaşladığını ve insanların panolara neden güvenmeyi bıraktığını merak eder.
Yüksek kardinaliteli veri sık suçludur. Kullanıcı ID’leri, tam URL’ler veya ham istek gövdelerini etiketlere/attribute’lara koymak metrikleri patlatabilir ve basit grafikleri pahalı hale getirebilir.
İsimlendirme problemleri de sessizce bütçeyi öldürür. Bir servis http.server.duration raporlarken başka bir servis request_time_ms raporlasın; bunları karşılaştıramazsınız ve her pano özel işe dönüşür. Aynı sorun span adları ve rota şablonları için de çıkar.
Araç varsayılanları haftalarınızı boşa harcatabilir. Birçok ürün hazır uyarılarla gelir, ama bunlar genellikle küçük dalgalanmalarda bildirim gönderir veya gerçek olaylarda sessiz kalır. Ortalamalara dayalı uyarılar müşterilerin hissettiği kuyruk gecikmesini kaçırır.
Eksik bağlam soruşturmaların uzamasına neden olur. Telemetriye version etiketi koymazsanız, hataları ve gecikmeyi bir release’e bağlayamazsınız. Bu, sık sık dağıtan veya kodu yeniden üreten ekipler için daha da önemlidir.
Ayrıca trace’ler logların yerine geçmez. Trace’ler yol ve zamanlamayı gösterir, ama loglar genellikle insan detayını barındırır: doğrulama hataları, üçüncü taraf yanıtları ve iş kuralları.
Hızlı düzeltmeler genellikle çabuk fayda sağlar:
- Küçük bir uç nokta seti ve bir kritik kullanıcı yoluyla başlayın
- Servisler, rotalar, span adları ve durum kodları için isimlendirme kurallarında anlaşın
- Panoları kurmadan önce her yerde version ve environment etiketleri ekleyin
- Uyarıları kullanıcı hissediyor dediği semptomlara göre ayarlayın (hata oranı, p95 gecikme), her metriğe değil
- Logları ve trace’leri ortak bir request veya trace ID ile bağlayın
Örnek: küçük bir ürün ve bir dahili araç için seçim
Beş kişilik bir ekip iki şeyi çalıştırıyor: ödemeli müşteriler tarafından kullanılan halka açık bir API ve destek/operasyon tarafından kullanılan haftalık değişen bir dahili yönetici aracı. API hızlı olay müdahalesi gerektirir. Yönetici aracı ihtiyaçlar değiştikçe her hafta değişir.
Bu durumda daha iyi seçim teknolojiye kıyasla günlük operasyonu kimin üstleneceğine daha çok bağlıdır.
Seçenek A: özel ajanla başlayın (şimdi hız)
Bu, “bugün hataları ve yavaş uç noktaları görebiliyoruz”e en hızlı yoldur. Ajanı kurarsınız, yaygın framework’leri otomatik algılar ve hızlıca panolar ve temel uyarılar elde edersiniz.
Sonrasında genellikle zorlaşan şey geçiş yapma süreçleri olur. Panolar, uyarı eşikleri ve örnekleme davranışı o satıcıya bağlanabilir. Yönetici aracı değiştikçe (yeni uç noktalar, arka plan işleri), satıcıya özgü ayarları yeniden ayarlamak ve daha fazla ingestion için ödemek zorunda kalabilirsiniz.
2 hafta sonra genellikle servis haritaları, en sık hatalar ve birkaç faydalı uyarıya sahip olursunuz.
2 ay sonra kilitlenme genellikle panolar, sorgu dili ve özel enstrümantasyon etrafında görünür.
Seçenek B: OpenTelemetry ile başlayın (ileride esneklik)
Bu başlangıçta daha uzun sürer çünkü bir exporter seçer ve log, metrik ve trace için “iyi”nin ne olduğuna karar verirsiniz. Panoların anlaşılır olması için daha fazla manuel isimlendirme ve attribute tanımlamanız gerekebilir.
Ödül taşınabilirliktir. Aynı sinyalleri farklı backend’lere yönlendirebilir, API ve yönetici aracı arasında tutarlı konvansiyonlar tutabilir ve gereksinimler değiştiğinde enstrümantasyonu yeniden yazmak zorunda kalmayabilirsiniz.
2 hafta sonra daha az cilalı pano ama daha temiz trace yapısı ve isimlendirme görebilirsiniz.
2 ay sonra kararlı konvansiyonlar, yeniden kullanılabilir uyarılar ve araç değişimlerinin daha kolay olması daha olasıdır.
Basit bir karar kuralı:
- Destek mühendislerinin bu hafta cevaplara ihtiyacı varsa özel ajanla başlamak doğru olabilir.
- Ürün haftalık değişiyorsa ve satıcı değiştirme ihtimali yüksekse OpenTelemetry ile başlayın.
- Bir kişi yarı zamanlı opsu üstleniyorsa hızlı varsayılanları tercih edin.
- Bir ekip opsu sahipleniyorsa taşınabilir sinyalleri ve net konvansiyonları tercih edin.
Hızlı kontrol listesi ve sonraki adımlar
OpenTelemetry ile özel APM ajanları arasında kararsızsanız, günlük olarak neye dayanacağınızı temel alarak karar verin: taşınabilirlik, sinyaller arası temiz korelasyon ve hızlı düzeltmelere götüren uyarılar.
Kontrol listesi:
- Taşınabilirlik: Enstrümantasyonu yeniden yazmadan veya ana alanları kaybetmeden backend’leri değiştirebilir misiniz?
- Korelasyon: Yavaş bir istek trace’inden aynı isteğin loglarına ve ilgili metriklere hızla atlayabiliyor musunuz?
- Sinyal kapsamı: Temel bilgileri alıyor musunuz (HTTP rota isimleri, hata tipleri, veritabanı span’ları) yoksa boşluklar mı var?
- Uyarı faydalılığı: Uyarılar neyin değiştiğini ve nerede olduğunu söylüyor mu, yoksa sadece gürültülü eşikler mi?
- Operasyonel çaba: Güncellemeler, ajan dağıtımları, SDK değişiklikleri ve örnekleme kim tarafından ve ne sıklıkta yönetilecek?
Kilitlenme, küçük bir ekip hızlı değer istiyorsa genellikle kabul edilebilir. Birden fazla ortam, karışık teknoloji yığınları, uyumluluk kısıtları veya bütçe gözden geçirmesi sonrası satıcı değiştirme ihtimali varsa daha risklidir.
Sonsuz ayarlamayı önlemek için kısa bir pilot çalışması yürütün ve çıktıları önceden tanımlayın: kötü bir günde gerçekten yardımcı olacak üç pano ve beş uyarı. Sonra kapsamı genişletin.
Pilotu somut tutun:
- 3 pano tanımlayın (servis sağlığı, en iyi uç noktalar, veritabanı ve dış çağrılar)
- 5 uyarı tanımlayın (hata oranı, p95 gecikme, doygunluk, kuyruk birikimi, başarısız işler)
- İsimlendirme konvansiyonlarını yazın (servis isimleri, environment etiketleri, rota desenleri)
- Küçük bir attribute listesi dondurun (filtreleme ve gruplayacağınız etiketler)
- Örnekleme kurallarında anlaşın (ne tutuluyor, ne örnekleniyor ve neden)
Yeni dahili araçlar ve müşteri portalları inşa ediyorsanız, AppMaster (appmaster.io) tam uygulamaları hızlıca oluşturmanıza yardımcı olabilir. Bu size uygun bir gözlemlenebilirlik yaklaşımı seçme ve dağıtırken tutarlı uygulama şansı verir.
SSS
Proprietary tercih edin eğer bu hafta kullanılabilir panolara ve uyarılara ihtiyacınız varsa ve tek bir satıcıya bağlı kalmayı sorun etmiyorsanız. OpenTelemetry seçin eğer sisteminizin, bulutunuzun veya araçlarınızın değişmesini bekliyorsanız ve enstrümantasyonu taşınabilir tutup, tutarlı isimlendirme ve korelasyonu korumak istiyorsanız.
Her zaman değil, ama sık görülen bir durumdur. Kilitlenme genellikle panolar, uyarı kuralları, sorgu dili ve ekibin günlük olarak güvendiği satıcıya özgü alanlardan gelir. Ham veriyi dışa aktarabilseniz bile, kullanılabilir görünümleri yeniden oluşturmak ve tarihsel sürekliliği korumak zor olabilir.
Collector, sinyalleri toplamak, toplu işlem yapmak, filtrelemek, örneklemek ve birden fazla backend’e yönlendirmek için tek bir standart yol istediğinizde faydalıdır. Uygulama kodunu değiştirmeden verinin nereye gideceğini değiştirmek için de önemlidir. Sadece tek bir servis ve tek bir backend’iniz varsa doğrudan göndermeye başlayabilirsiniz, ancak ölçek veya yönetişim ihtiyaçları ortaya çıktıkça çoğu ekip collector ekler.
Hızlı değer için önce bir veya iki kritik kullanıcı yolunu izleyen izleri (traces) instrumente etmeye başlayın; bunlar olay anında teşhisi kısaltır. Ardından servis düzeyinde küçük bir metrik seti ekleyin (latency, hata oranı, bir doygunluk sinyali) ki uyarılar güvenilir şekilde tetiklesin. Logları yapılandırılmış tutup trace ID ile ilişkilendirirseniz nedeni doğrulamak ve hatanın detayını görmek daha kolay olur.
Kararlı servis isimleri kullanın, standart environment değerleri (ör. prod ve staging) ekleyin ve her sinyale version etiketi koyun ki sorunları release ile bağlayabilesiniz. Metrik etiketlerine kullanıcı ID’leri, e-postalar veya tam ham URL’ler koymaktan kaçının. Bu temel adımları erken yaparsanız panolar yeniden kullanılabilir kalır ve maliyetler öngörülebilir olur.
İzin verilen etiket ve attribute setini bir sözleşme gibi ele alın. Metrikleri düşük kardinalitede tutun ve detaylı tanımlayıcıları (kullanıcı ID’leri gibi) loglara taşıyın (ve sadece gerektiğinde). Traceler için işle ilgili önemli attribute’ları dikkatle kaydedin ve hatalar ile yavaş isteklerin daha yüksek oranda tutulduğu örnekleme kurallarına güvenin.
Normal trafiği örnekleyin, ancak hatalar ve yavaş istekler için daha yüksek örnekleme oranı tutun ki olay anında ihtiyaç duyduğunuz trace’ler mevcut olsun. Çok agresif örnekleme yaparsanız “bir şeyler yanlış” uyarısı alırsınız ama nedenini açıklayan trace eksik olur. Mühendislerin sürekli olarak başarısız isteği bulup bulamadığını ölçtükten sonra örneklemeyi yeniden gözden geçirin.
Kullanıcı etkisine bağlı uyarılara öncelik verin: ana uç noktalarda artmış hata oranı, belirlenmiş eşikleri aşan sürekli p95 gecikme ve yakında çöküşe işaret eden doygunluk sinyalleri. Ayrıca bir servis veri göndermeyi kestiğinde haber verecek "telemetri eksik" uyarısı ekleyin. Eğer bir uyarı bir işe yol açmıyorsa, insanları bildirimlere güvenmeye devam ettirmek için hızlıca kaldırın veya ayarlayın.
Traceler yolu ve zamanlamayı gösterir, ancak loglar genellikle düzeltmek için gereken tam hata mesajını, doğrulama ayrıntısını veya üçüncü taraf yanıtını içerir. Metrikler trendleri görmenizi ve uyarıları güvenilir şekilde tetiklemenizi sağlar. En hızlı hata ayıklama, üç sinyalin trace ID ile korele olduğu durumlarda olur.
Evet. Üretilen uygulamalarda bile iş, servis isimleri, rota isimlendirmesi, gerekli attribute’lar (env ve version) ve telemetrinin nereye gönderileceği gibi konvansiyonlarda anlaşmaktır. İyi bir yaklaşım, tüm oluşturulan servisler için tek bir instrumentasyon standardı belirlemek ki her yeni uygulama ilk günden tutarlı trace, metrik ve log üretsin.


