Yazılım

Observability Nedir? OpenTelemetry ile Log, Metrik ve İzleme

Talha Aslan 14 dakikalık okuma 2 görüntülenme

Observability nedir?

Observability (gözlemlenebilirlik), bir yazılım sisteminin iç durumunu, dışarıya verdiği log, metrik ve trace gibi çıktılardan anlayabilme yeteneğidir. Amaç, kodun içine bakmadan "şu an ne bozuk ve neden?" sorusuna cevap vermektir. Böylece önceden hiç düşünmediğiniz sorunları da teşhis edersiniz.

Observability nedir sorusunu bir arabanın gösterge paneliyle düşünebilirsiniz. Yakıt göstergesi tek bir bilgi verir. Ancak motor garip bir ses çıkardığında yalnızca göstergeye bakarak nedeni bulamazsınız. Sensörlerin, kayıtların ve parçaların birbirine nasıl bağlandığını gösteren zengin veriye ihtiyacınız olur. Yazılımda da durum aynıdır.

Bu yazı tek bir terimi anlatır: observability ve onun veri toplama standardı OpenTelemetry. Belirli bir ürünü övmeyiz, ürün karşılaştırması da yapmayız. Kavramı, parçalarını ve küçük bir ekibin nereden başlayabileceğini konuşuruz.

Terimin kökeni kontrol mühendisliğine uzanır. Orada mühendisler, bir sistemin iç durumunu çıktılarından çıkarabilmeye gözlemlenebilirlik der. Yazılım dünyası aynı fikri benimsedi: sistem ne kadar iyi veri üretirse, onu o kadar iyi anlarsınız.

İşletme açısından observability nedir ve neden önemlidir?

Bir işletme için observability nedir sorusunun cevabı çoğu zaman şudur: sorunu müşteri şikayet etmeden önce, ya da şikayet geldiğinde dakikalar içinde bulmak. Yavaşlayan bir ödeme sayfası, sessizce başarısız olan bir e-posta gönderimi ya da yayından sonra artan hata oranı doğrudan gelire yansır.

Ayrıca ekip içindeki iletişimi de değiştirir. Veri olmadığında teşhis toplantıları tahmin ve suçlamayla ilerler. Ortak bir veri kaynağı olduğunda ise herkes aynı grafiğe, aynı trace'e bakar. Böylece tartışma "kim hata yaptı?" sorusundan "sistem neden böyle çalıştı?" sorusuna geçer.

  • Hızlı teşhis: Sorunu aramak yerine daraltırsınız.
  • Güvenli yayın: Yeni sürümün etkisini hemen görürsünüz.
  • Kapasite planı: Kapasite ve darboğaz kararlarını veriye dayandırırsınız.
  • Sakin ekip: Ekip ne olduğunu bildiği için sakin kalır.

Observability nedir ve monitoring (izleme) ile farkı ne?

Monitoring, bildiğiniz sorunları takip etmektir. Önceden bir eşik belirlersiniz, örneğin hata oranı yükselince alarm çalar. Observability ise bilmediğiniz sorunlara soru sorabilmenizi sağlar. Yani monitoring "arıza var mı?" sorusunu, observability "arızanın sebebi ne?" sorusunu cevaplar.

İkisi rakip değildir. Observability, monitoring için gereken veriyi de üretir. İyi bir alarm tasarımı da bu veriye dayanır: kullanıcıyı etkileyen belirtiye alarm bağlarsınız, nedeni ise veriyle ararsınız. Aşağıdaki tablo farkı özetler. Örneğin bir alarm "hata oranı yükseldi" der. Observability verisi ise hatanın hangi servisten, hangi kullanıcı grubunda ve hangi sürümden sonra başladığını sorgulamanıza izin verir.

ÖlçütKlasik monitoringObservability
Temel soruSistem çalışıyor mu?Sistem neden bu şekilde çalışıyor?
Problem türüÖnceden bilinen, tanımlı sorunlarBeklenmedik, yeni sorunlar
VeriÇoğunlukla hazır paneller ve eşiklerLog, metrik ve trace birlikte, sorgulanabilir
YaklaşımAlarm gelir, siz bakarsınızVeriye soru sorar, nedeni daraltırsınız
SınırTanımlamadığınız sorunu göremezDoğru veriyi üretmezseniz o da göremez

Dolayısıyla observability, monitoring'in yerine geçmez. Onu daha derin bir teşhis katmanıyla tamamlar.

Telemetri ve üç sinyal nedir?

Telemetri, bir sistemin davranışını anlatan ve dışarı gönderdiği veridir. OpenTelemetry belgeleri bu veriyi trace, metrik ve log olarak üç ana sinyale ayırır. Her sinyal aynı olayı farklı bir mercekten gösterir.

  • Log: Bir olayın zaman damgalı kaydıdır, örneğin ödeme isteğinin reddi.
  • Metrik: Zaman içinde ölçülen sayısal değerdir, örneğin istek sayısı ya da hata oranı.
  • Trace: Tek bir isteğin servisler arasındaki yolculuğudur.
SinyalNeyi gösterir?Güçlü yanıSınırı
LogTek tek olaylarıAyrıntı ve bağlam zengindirHacim büyür, aramak zordur
MetrikZaman içindeki eğilimiUcuz ve hızlıdır, alarm için uygundurTek bir isteği anlatmaz
TraceBir isteğin servisler arasındaki yolunuDarboğazı bulurBağlam kopunca anlamsızlaşır

Belgeler ayrıca baggage, profil ve olay gibi ek kavramlardan da söz eder. Ancak başlangıç için ilk üç sinyal yeterlidir. Sonraki bölümlerde her birine ayrı ayrı bakarız. Ayrıca bu üç sinyalin tek başına değil, birbirine bağlı olduğunda güçlü olduğunu unutmayın.

Log nedir ve observability içinde ne işe yarar?

Log, bir servisin ya da bileşenin ürettiği zaman damgalı mesajdır. Hata ayrıntısı, kullanıcı işlemi ya da sistem olayı taşıyabilir. Bu yüzden ayrıntıyı en çok log verir. Örneğin bir istek neden reddedildi sorusunun cevabı çoğunlukla bir log satırında yazar.

Ancak tek başına log bağlamdan yoksundur. Bir hata mesajını görürsünüz, fakat hangi kullanıcı isteğine ait olduğunu bilemezsiniz. OpenTelemetry belgeleri de logların trace ve span ile ilişkilendirildiğinde asıl değerini kazandığını söyler.

Pratik bir öneri: log satırlarınızı düz metin yerine alanlara bölerek yazın. Böylece "hata düzeyi", "servis adı" ve "istek kimliği" gibi alanlara göre arama yaparsınız. Ayrıca kişisel veriyi loga yazmayın. Parola, kart numarası ya da kimlik bilgisi log kaydında asla yer almamalıdır.

Bir de log düzeylerini bilinçli seçin. Hata, uyarı ve bilgi düzeylerini ayırırsanız, üretimde yalnızca gerekli olanı açık tutarsınız. Böylece hem depolama maliyetini hem de aradığınız satırı bulma süresini düşürürsünüz.

Metrik nedir ve ne zaman log yerine metriğe bakmalısınız?

Metrik, zaman içinde ölçülen ve toplulaştırılan sayısal değerdir. İstek sayısı, hata oranı, işlemci kullanımı ve yanıt süresi tipik örneklerdir. Metrik ucuzdur, çünkü her olayı tek tek değil, özetini saklar.

Bu yüzden "genel durum nasıl?" sorusunda önce metriğe bakarsınız. Örneğin yanıt süresi grafiği bir saattir yükseliyorsa sorunun varlığını hemen görürsünüz. Ancak metrik, tek bir kullanıcının neden hata aldığını söylemez. Orada log ve trace devreye girer.

Pratikte metrik, alarmların da temelidir. Alarmı log aramasına değil, anlamlı bir metriğe bağlamak daha az gürültü üretir. Yani önce metrikle belirtiyi yakalar, sonra log ve trace ile nedeni ararsınız. Metrikte ayrıca "ortalama" yerine dağılıma bakmak önemlidir. Çünkü yavaş isteklerin küçük bir kısmı ortalamayı gizleyebilir, oysa kullanıcıların şikayeti tam da o kısımdan gelir.

Dağıtık izleme (trace) ve span nedir?

Trace, tek bir isteğin birden fazla servis üzerinden geçen uçtan uca yolculuğunun kaydıdır. Trace, span adı verilen küçük iş birimlerinden oluşur. Her span bir işlemi temsil eder ve ad, süre ile ek bilgi (attribute) taşır.

Örneğin bir sipariş isteği önce web uygulamasına, sonra stok servisine, ardından ödeme servisine gider. Her adım ayrı bir span olur. Trace ekranında hangi adımın ne kadar sürdüğünü sıralı görürsünüz.

Böylece "sipariş sayfası yavaş" şikayetinin sebebini tahmin etmek yerine ölçersiniz. Mikroservis ya da birden fazla bileşenli sistemlerde trace, en hızlı teşhis aracıdır. Tek parçalı küçük bir uygulamada ise iyi log ve metrik çoğu zaman yeter. Yine de trace'i erken denemek, ihtiyaç doğduğunda hazırlıklı olmanızı sağlar.

Log, metrik ve trace birlikte nasıl çalışır?

Üç sinyal birbirinin yerini almaz, birbirini bağlar. Tipik bir teşhis akışı şöyle ilerler. Önce metrik bir sapmayı gösterir, sonra trace sorunlu adımı daraltır, en sonda log ayrıntıyı açıklar.

Örnek senaryo: Bir e-ticaret sitesinde ödeme adımı bazı akşamlar yavaşlıyor olsun. Aşağıdaki akış, üç sinyalin birlikte nasıl kullanıldığını gösterir.

  1. Yanıt süresi metriği, ödeme isteklerinde artış olduğunu gösterir.
  2. Yavaş isteklerden birinin trace kaydını açarsınız.
  3. Trace, süre kaybının ödeme sağlayıcısına giden dış çağrıda olduğunu gösterir.
  4. O span'a bağlı log satırı, zaman aşımı uyarısını ve tekrar deneme sayısını açıklar.
  5. Sonuçta sorunun kendi kodunuzda değil, dış bağımlılıkta olduğunu kanıtlarsınız.

Bu bilgiyle ne yapacağınız da netleşir. Örneğin zaman aşımı süresini ayarlar, yedek bir yol kurar ya da sağlayıcıyla somut kanıtla iletişime geçersiniz.

Bu zincir, sinyallerin ortak bir istek kimliğiyle bağlanmasına dayanır. Bağlantı yoksa üç ayrı panelde üç ayrı hikaye okursunuz.

OpenTelemetry nedir?

OpenTelemetry, telemetri verisini üretmek, toplamak ve dışarı aktarmak için geliştirilen açık kaynaklı, satıcıdan bağımsız bir gözlemlenebilirlik çerçevesidir. CNCF çatısı altında yürüyen bir projedir. Trace, metrik ve log sinyallerini destekler.

Önemli bir ayrıntı: OpenTelemetry bir gözlemlenebilirlik arka ucu değildir. Veriyi saklamaz, görselleştirmez, alarm üretmez. Yalnızca uygulamanızın veriyi standart biçimde üretmesini ve istediğiniz yere göndermesini sağlar. Depolama ve görselleştirme için ayrı bir araç seçersiniz. Belgeler sinyal olarak trace, metrik ve log'u sayar; baggage ve profil gibi başlıklar da kapsamdadır.

Proje, daha önce ayrı ilerleyen OpenTracing ve OpenCensus çalışmalarının birleşmesiyle doğdu. Bu nedenle tek bir ortak dil sunar. Ayrıntıyı OpenTelemetry resmi belgelerinde okuyabilirsiniz.

OpenTelemetry neden satıcıdan bağımsızdır?

Eskiden her izleme ürünü kendi ajanını ve veri biçimini getirirdi. Ürün değiştirmek, uygulamanın içindeki ölçüm kodunu yeniden yazmak demekti. Bu duruma satıcı bağımlılığı denir.

OpenTelemetry, ölçüm kodunu ürünlerden ayırır. Uygulamanızı bir kez standart yöntemle donatırsınız, veriyi hangi arka uca göndereceğinizi yapılandırmayla belirlersiniz. Yani arka ucu değiştirmek, uygulama kodunu değiştirmeyi gerektirmez.

Bu, özellikle küçük ekipler için değerlidir. Bugün ucuz ve basit bir çözümle başlar, ileride ihtiyaç büyüdüğünde başka bir çözüme geçebilirsiniz. Ancak "bağımsız" demek "bedava" demek değildir. Depolama ve işletme maliyeti yine sizde kalır. Ayrıca bir arka uç seçerken üç noktaya bakın. Önce OpenTelemetry verisini doğrudan kabul edip etmediğini sorun. Sonra sorgu dilinin ekibinize uyup uymadığını deneyin. Son olarak saklama ve örnekleme seçeneklerinin esnekliğini görün. Güncel özellikleri sağlayıcının resmi belgesinden kontrol edin.

OpenTelemetry hangi parçalardan oluşur?

Proje birkaç temel bileşenden oluşur. Belgeler dil bazlı SDK'lar, API'ler, standart bir protokol ve anlamsal kurallar tanıtır. Aşağıdaki liste her parçanın rolünü kısaca anlatır. Bu bileşenler birbirini tamamlar ve her biri ayrı bir sorunu çözer.

  • API: Kodunuzun telemetri üretmek için çağırdığı ortak arayüzdür.
  • SDK: API'yi dile özgü şekilde çalıştıran ve veriyi işleyen kütüphanedir.
  • OTLP: Telemetri verisinin ağ üzerinde taşındığı standart protokoldür.
  • Semantic conventions (anlamsal kurallar): Alan adlarını standartlaştırır, böylece "istek yöntemi" her yerde aynı adı taşır.
  • Collector: Veriyi alan, işleyen ve ileten bağımsız bir aracıdır.

Bu parçaların hepsini ilk günde kullanmanız gerekmez. Küçük bir projede SDK ile başlayıp collector'ı sonradan eklemek mümkündür. Önemli olan, ölçüm kodunu standart yöntemle yazmanızdır; geri kalanı yapılandırmayla değiştirirsiniz.

OpenTelemetry Collector nedir ve ne işe yarar?

Collector, telemetri verisini almak, işlemek ve dışarı aktarmak için kullanılan satıcıdan bağımsız bir aracıdır. Resmi belgeler üç bileşenini anlatır: veriyi kabul eden receiver, dönüştüren processor ve hedefe ileten exporter. Böylece her sinyal için ayrı ajan çalıştırmazsınız.

Üretim ortamı için collector öneriyoruz, çünkü uygulamanız veriyi hızlıca ona teslim edip kendi işine döner. Toplu gönderme, yeniden deneme ve filtreleme gibi işleri collector yapar. Dolayısıyla uygulamanız kendi işine daha çok kaynak ayırır.

Bir benzetme yapalım. Collector, bir apartmanın ortak posta kutusu gibidir. Her daire postasını tek noktaya bırakır, dağıtımı o noktadaki görevli yapar. Ayrıntılar için Collector belgesine bakın.

Küçük bir projede collector tek bir küçük süreç olarak çalışır. İhtiyaç büyüdükçe birden fazla örnek çalıştırır, farklı sinyalleri farklı hedeflere yönlendirirsiniz. Bu esneklik, arka uç değiştirdiğinizde uygulamaya dokunmadan geçiş yapmanızın da temelidir.

Instrumentation (donatım) nedir, otomatik mi elle mi yaparsınız?

Instrumentation, uygulamanızın telemetri üretmesini sağlayan donatım işidir. Kodun içinden trace, metrik ve log sinyali çıkarmak demektir. OpenTelemetry bunun için iki yol sunar.

  • Otomatik donatım: Çoğu popüler çerçeve ve kütüphane için hazır bileşenlerle, kodu neredeyse değiştirmeden temel sinyalleri toplar.
  • Elle donatım: İş mantığına özgü adımları siz işaretlersiniz, örneğin kupon uygulama adımı için anlamlı bir span açarsınız.

Önerimiz otomatik donatımla başlamaktır. Temel istek ve veritabanı çağrılarını hızla görürsünüz. Sonra yalnızca gerçekten sorduğunuz sorulara göre elle ekleme yaparsınız.

Elle eklemede ölçü şu: bir gece yarısı sorunu çözerken "bu bilgi olsaydı işim kolaylaşırdı" dediğiniz yerleri işaretleyin. Her satıra span eklemek hem gürültü hem maliyet üretir.

Bir diğer ayrıntı da isimlendirmedir. Span adlarını "ödeme isteği gönder" gibi anlamlı ve tutarlı verin. Rastgele adlar, trace ekranında okuması zor bir yığın oluşturur. Ekip içinde kısa bir adlandırma rehberi hazırlamak, aylar sonra bile işe yarar.

Context propagation nedir ve bir isteği servisler arasında nasıl izlersiniz?

Context propagation (bağlam yayılımı), bir isteğin kimliğini servisten servise taşıma mekanizmasıdır. Her serviste aynı trace kimliği bulunduğu için ayrı ayrı üretilen spanlar tek bir trace altında birleşir. Bu olmadan dağıtık izleme parçalı kalır.

Bağlam genellikle isteğin başlık bilgisiyle bir sonraki servise geçer. OpenTelemetry bunun için standart bir biçim kullanır. Yani farklı dillerde yazdığınız servisler bile aynı isteği birlikte izler.

Pratikte en sık yapılan hata, mesaj kuyruğu ya da arka plan işi gibi asenkron geçişlerde bağlamı kaybetmektir. Bir iş kuyruğa girdiğinde trace kopuyorsa bu noktayı kontrol edin. Ayrıca log satırlarına trace kimliğini eklerseniz log ile trace arasında doğrudan geçiş yaparsınız. Bu küçük ekleme, gece yarısı teşhis süresini belirgin biçimde kısaltır.

Veri hacmini ve maliyeti nasıl yönetirsiniz?

Observability verisi hızla büyür. Her istek log, metrik ve trace üretir; trafik arttıkça depolama ve işlem maliyeti de artar. Bu yüzden maliyeti tasarımın baştan düşünmeniz gereken bir parçası olarak görün. Rakam vermiyoruz, çünkü fiyatlar sağlayıcıya göre değişir; güncel değeri seçtiğiniz sağlayıcının resmi sayfasından kontrol edin.

Maliyeti kontrol etmenin başlıca yolları şunlardır.

  • Örnekleme (sampling): Tüm trace'leri değil, temsil edici bir alt kümeyi saklarsınız.
  • Filtreleme: Sağlık kontrolü gibi gürültülü ve değersiz verileri collector'da elersiniz.
  • Saklama süresi: Ayrıntılı veriyi kısa, özet metrikleri uzun tutarsınız.
  • Etiket disiplini: Çok sayıda farklı değer alan etiketler metrik sayısını patlatır, bunları sınırlayın.

Belgeler, örneklemenin maliyeti düşürürken görünürlüğü korumanın en etkili yollarından biri olduğunu söyler. Ayrıntı için örnekleme belgesine bakabilirsiniz.

Örnekleme (sampling): head ve tail sampling arasındaki fark nedir?

Head sampling, karar vermeyi isteğin başında yapar. Basit ve ucuzdur, ancak isteğin sonunda ne olacağını bilmez. Bu nedenle hatalı tüm istekleri garanti edemez.

Tail sampling ise trace tamamlandıktan sonra karar verir. Örneğin "hata içeren her trace'i sakla" ya da "yavaş olanları sakla" diyebilirsiniz. Üstelik teşhis açısından en değerli veriyi korur. Karşılığında daha karmaşık, durum tutan bir altyapı ister.

Küçük ekipler için pratik yol, önce basit örneklemeyle başlamak ve ihtiyaç doğarsa tail sampling'e geçmektir. Her ikisini de hemen kurmak çoğu zaman fazla mühendisliktir. Örneklemenin bedeli de var: seçtiğiniz kurala uymayan nadir bir olay kaydınıza girmeyebilir. Bu yüzden hata ve yavaş istekleri ayrıca yakalayan bir kural tanımlamak iyi bir alışkanlıktır.

Etiket kardinalitesi (cardinality) nedir ve neden maliyeti büyütür?

Kardinalite, bir etiketin alabileceği farklı değerlerin sayısıdır. "Ödeme yöntemi" etiketi birkaç değer alır, yani kardinalitesi düşüktür. "Kullanıcı kimliği" etiketi ise her kullanıcıda farklıdır, kardinalitesi çok yüksektir.

Metriklerde her farklı etiket kombinasyonu ayrı bir zaman serisi demektir. Dolayısıyla kimlik, e-posta ya da tam adres gibi alanları metrik etiketi yapmak seri sayısını hızla patlatır. Sonuç: yavaş sorgular ve beklenmedik fatura.

Kural basit: ayrıntıyı log ve trace'e, genel eğilimi metriğe koyun. Kullanıcı bazlı ayrıntı gerekiyorsa onu trace içindeki bir özellik olarak taşıyın. Böylece metrik ucuz kalır, ayrıntı yine elinizin altında olur.

Observability kurarken en sık yapılan hatalar nelerdir?

Ekiplerin tekrar tekrar düştüğü birkaç tuzak var. Bunları baştan bilmek hem zaman hem para kazandırır.

  • Her şeyi loglamak: Gürültü artar, asıl sinyal kaybolur ve maliyet yükselir.
  • Sinyalleri birbirine bağlamamak: Üç ayrı panel, üç ayrı hikaye anlatır.
  • Alarmı her metriğe bağlamak: Ekip alarmlara alışır ve gerçek alarmı kaçırır.
  • Kişisel veriyi loga yazmak: Gizlilik riski doğurur.
  • Sahipsiz bırakmak: Panelleri ve alarmları kimsenin bakmadığı bir köşeye atmak.

Çözüm genellikle teknik değil, alışkanlık sorunudur. Her yeni özellikte "bunu nasıl gözleriz?" sorusunu tasarım aşamasında sorun. Yayın öncesi kontrol listesine tek bir satır eklemek bile fark yaratır.

Observability gerçek hayatta nerede işe yarar?

Birkaç tipik durumda farkı hemen görürsünüz. Aşağıdaki örnekler senaryodur, gerçek bir müşteri sonucu değildir.

  • Yavaş sayfa şikayeti: Trace, gecikmenin veritabanı sorgusunda mı yoksa dış bir servis çağrısında mı olduğunu gösterir.
  • Yayın sonrası hata artışı: Metrik, sapmanın yeni sürümle başladığını gösterir. Böylece geri alma kararını hızlı verirsiniz.
  • Aralıklı hata: Sadece belirli bir kullanıcı grubunda görülen hatayı, loglardaki ortak alanla bulursunuz.
  • Kapasite planı: Metrik eğilimleri, ne zaman sunucu ya da veritabanı büyütmeniz gerektiğini önceden söyler.

Sunucu yükünü okuma konusunda load average yazımıza, Node.js süreçlerini yönetme konusunda PM2 yazımıza göz atabilirsiniz. İkisi de gözlemlenebilirlik verisini besleyen konulardır.

Örnek senaryo: Küçük bir kargo takip uygulaması düşünün. Kullanıcılar sabah saatlerinde "sorgulama çok yavaş" diyor. Metrik, yavaşlamanın yalnızca belirli bir uç noktada olduğunu gösteriyor. Trace, süre kaybının her istekte tekrarlanan bir veritabanı sorgusunda toplandığını ortaya koyuyor. Çözüm bir indeks ya da önbellek olabilir; önemli olan, tahmin yerine kanıtla karar vermenizdir.

Observability ile sık karıştırılan terimler arasındaki fark nedir?

Alan birbirine yakın birçok terim içerir. Aşağıdaki tablo, en sık karıştırılanları ayırır.

TerimNe anlatır?Observability ile ilişkisi
MonitoringBilinen sorunlar için eşik ve alarmObservability'nin bir kullanım biçimi
LoggingOlayların metin kaydıÜç sinyalden yalnızca biri
TelemetriSistemin ürettiği ham veriObservability'nin hammaddesi
APMUygulama performansını izleyen ürün kategorisiObservability için kullanılan arka uç araçlardan biri olabilir
OpenTelemetryVeri üretme ve toplama standardıVeriyi sağlar, saklamaz ve görselleştirmez
Observability arka ucuVeriyi saklayan, sorgulayan ve gösteren araçOpenTelemetry'den gelen veriyi tüketir

Kısacası OpenTelemetry veriyi üretir, arka uç onu saklar ve gösterir, observability ise bu bütünün sağladığı yetenektir.

Avantajları, sınırları ve riskleri nelerdir?

Observability nedir sorusuna dürüst bir cevap, hem faydayı hem bedeli göstermelidir. Aşağıdaki liste ikisini yan yana koyar. Dolayısıyla karar verirken yalnızca avantajlara değil, bakım yüküne de bakın.

  • Hızlı çözüm: Sorun teşhis süresi kısalır, çünkü tahmin yerine veriyle ilerlersiniz.
  • Esneklik: Standart sayesinde araç değiştirmek kolaylaşır.
  • Emek sınırı: Veri üretmezseniz görünürlük de olmaz. Donatım emek ister.
  • Gizlilik riski: Loglara kişisel veri sızarsa KVKK ve gizlilik sorunu doğar.
  • Alarm yorgunluğu: Çok fazla alarm, ekibin alarmları görmezden gelmesine yol açar.
  • Maliyet riski: Kontrolsüz veri hacmi, maliyeti beklenmedik biçimde büyütür.

Bu nedenle observability bir kurulum değil, sürekli bakım isteyen bir alışkanlıktır. Bu yazı hukuki danışmanlık yerine geçmez; kişisel veri kurallarını kendi hukuk danışmanınızla netleştirin.

Küçük bir ekip için observability nedir ve nereden başlarsınız?

Küçük bir ekipte amaç her şeyi ölçmek değildir. En çok işinize yarayacak sinyalleri güvenilir biçimde toplamanız yeterlidir. Aşağıdaki kontrol listesi makul bir başlangıç sırasıdır.

  1. En kritik kullanıcı yolunu seçin, örneğin giriş, sipariş ya da ödeme.
  2. O yol için üç temel metriği belirleyin: istek sayısı, hata oranı ve yanıt süresi.
  3. Logları alanlara ayırarak yazın ve kişisel veriyi dışarıda bırakın.
  4. Otomatik donatımı açın ve trace'lerin servisler arasında bağlandığını doğrulayın.
  5. Log satırlarına trace kimliğini ekleyin.
  6. Veriyi doğrudan bir arka uca değil, bir collector üzerinden gönderin.
  7. Basit bir örnekleme ve saklama süresi politikası belirleyin.
  8. Yalnızca kullanıcıyı etkileyen belirtilere alarm bağlayın.
  9. Üç ayda bir veri hacmini ve maliyet trendini gözden geçirin.

Bu listeyi bir seferde bitirmeniz gerekmez. İlk üç madde bile teşhis hızınızı belirgin biçimde artırır.

Hangi sinyal hangi soruya cevap verir?

Teşhis sırasında doğru sinyale hızlı gitmek zaman kazandırır. Aşağıdaki tablo, soru tipine göre başlangıç noktasını gösterir.

Sorunuzİlk bakacağınız sinyalNeden?
Sistem genel olarak sağlıklı mı?MetrikÖzet ve eğilim sunar
Bu istek neden yavaş kaldı?TraceAdım adım süreyi gösterir
Bu hatanın ayrıntısı ne?LogOlayın bağlamını taşır
Hangi servis darboğaz?Trace ve metrikSüre dağılımını ve yükü birlikte gösterir
Yeni sürüm bir şeyi bozdu mu?Metrik, sonra traceSapmayı yakalar, sonra nedeni daraltır

Zamanla bu sıralama refleks olur. Üstelik ekip içinde ortak bir teşhis dili oluşturur.

Yazılım projenizde gözlemlenebilirliği nasıl kurarsınız?

Observability nedir sorusunu cevapladıktan sonra pratik adım şudur: ilk sinyalleri hemen toplayın. Mükemmel panel beklemeyin; küçük başlayıp ihtiyaca göre büyütün.

Mimariyle birlikte tasarlandığında en ucuz ve en etkili haline ulaşır. Sonradan eklemek mümkündür, ancak bağlam kopukları ve gürültülü loglar düzeltme maliyeti çıkarır. Bu yüzden yeni bir proje planlarken sinyal tasarımını da konuşmak mantıklıdır.

Talha Aslan ve ekibi olarak yazılım projelerinde gözlemlenebilirlik ihtiyacını mimari tartışmanın doğal bir parçası olarak ele alıyoruz. Özel yazılım projeniz için özel yazılım geliştirme hizmetimizi inceleyebilirsiniz.

Komşu konular için ayrı yazılarımız var. Özellikleri kodu yeniden yayınlamadan açıp kapatmak için feature flag yazımıza, altyapıyı kodla yönetmek için Infrastructure as Code yazımıza bakın. Üçünü birlikte düşünürseniz güvenli ve şeffaf bir yayın süreci kurarsınız.

Sitenizin sunucu tarafında yavaşlık yaşıyorsanız sunucu kaynaklı yavaşlık yazımız ve erişim kayıtlarınızı çözümlemek için log analizi aracımız iyi birer başlangıçtır.

Sıkça Sorulan Sorular

Observability ile monitoring aynı şey mi?
Hayır, aynı şey değildir ve aralarındaki fark yöntemde yatar. Monitoring bilinen sorunlar için eşik ve alarm tanımlar, yani "bozuldu mu?" sorusunu cevaplar. Observability ise beklenmedik sorunlara soru sorabilmenizi sağlar, yani "neden bozuldu?" sorusunu cevaplar. İkisi birlikte çalışır; monitoring çoğu zaman observability verisinin üzerine kurulur.
OpenTelemetry bir izleme aracı mı, yoksa bir standart mı?
OpenTelemetry bir standart ve araç takımıdır, bir izleme arka ucu değildir. API, SDK, OTLP protokolü ve collector sunar. Veriyi üretir ve iletir, ancak saklamaz ya da görselleştirmez. Bunun için ayrı bir arka uç seçersiniz. Böylece araç değiştirmek, uygulama kodunu yeniden yazmayı gerektirmez; bu da bağımsızlık sağlar.
Küçük bir ekibin collector kurması şart mı?
Zorunlu değildir, ancak üretim ortamı için önerilir. Geliştirme aşamasında veriyi doğrudan arka uca gönderebilirsiniz. Ne var ki collector, uygulamanın veriyi hızlıca teslim etmesini, filtreleme ve yeniden deneme gibi işleri üstlenmesini sağlar. Bu nedenle ekip büyüdükçe collector eklemek mantıklı hale gelir.
Observability veri maliyetini nasıl kontrol altında tutarım?
Dört yöntem öne çıkar ve hepsini küçük ekipler de uygulayabilir: örnekleme, filtreleme, saklama süresi ve etiket disiplini. Örneğin tüm trace'ler yerine temsil edici bir alt kümeyi tutarsınız. Sağlık kontrolü gibi gürültülü verileri collector'da elersiniz. Güncel fiyatlar sağlayıcıya göre değişir; değeri sağlayıcının resmi sayfasından kontrol edin.
Loglara hangi veriyi yazmamalıyım?
Parola, kart numarası, kimlik bilgisi ve gereksiz kişisel veriyi loga yazmayın. Çünkü loglar çoğu zaman geniş bir ekibin erişimine açıktır ve uzun süre saklanır. Gerekirse veriyi maskeleyin ya da collector aşamasında filtreleyin. Hukuki gereklilikler için kendi hukuk danışmanınıza başvurun; bu yazı hukuki danışmanlık değildir.
Trace ile log arasındaki en önemli fark nedir?
Trace, tek bir isteğin servisler arasındaki yolculuğunu ve her adımın süresini gösterir, yani zamanı sıralı bir harita gibi okutur. Log ise bir olayın ayrıntılı, zaman damgalı kaydıdır. Trace "nerede yavaşladı?" sorusunu, log "orada tam olarak ne oldu?" sorusunu cevaplar. Log satırına trace kimliği eklerseniz ikisi arasında doğrudan geçiş yaparsınız.
  • observability
  • opentelemetry
  • gözlemlenebilirlik
  • log metrik trace
  • dağıtık izleme
  • otel collector
  • monitoring
  • yazılım geliştirme
Paylaş:
Talha Aslan

Google Partner dijital pazarlama uzmanı. 2012’den beri SEO, Google Ads, web tasarım ve e-ticaret projelerinde sahada; bu blogda gördüğünüz her yazı o deneyimden çıkar.

Sıradaki proje

Projenizi konuşalım.

Talebiniz doğrudan Talha Aslan ve ekibine ulaşır: stratejiyi Talha kurar, uygulamayı deneyimli ekip yürütür. İlk istişare ücretsizdir; hedefinizi dinler, net bir yol haritasıyla döneriz.