Dağıtık İzleme
- İngilizcesi
- Distributed Tracing
- Türkçe karşılığı
- dağıtılmış izleme
- Okunuşu
- distribyutıd treysing
Günlük kullanımda çoğunlukla İngilizcesi tercih edilir.
Kısaca
Dağıtık izleme, tek bir isteği birçok servis boyunca takip eden; her adımın ne kadar sürdüğünü ve nerede başarısız olduğunu kaydeden bir tekniktir.
Dağıtık izleme (distributed tracing) nedir?
Birçok servisten oluşan bir sistemde sipariş vermek gibi tek bir kullanıcı eylemi; bir gateway'e, bir sipariş servisine, bir ödeme servisine, bir veritabanına ve bir mesaj kuyruğuna çağrıları tetikleyebilir. Dağıtık izleme bu yolculuğun tamamını tek bir trace olarak kaydeder; böylece her adımı sırasıyla, her birinin ne kadar sürdüğünü ve hangisinin başarısız olduğunu görebilirsiniz. Yalnızca log'lardan yanıtlaması çok zor olan soruları yanıtlar, örneğin şu tek istek neden yavaştı.
Bir trace, span'lerden oluşur. Her span bir HTTP çağrısı ya da veritabanı sorgusu gibi bir iş birimini temsil eder ve başlangıç zamanını, süresini, durumunu ve özniteliklerini kaydeder; span'ler bir üst span'e işaret ederek bir ağaç oluşturur. Bir servis diğerini çağırdığında trace ID'sini ve mevcut span ID'sini, genellikle standart W3C traceparent HTTP başlığında, istekle birlikte iletir; böylece bir sonraki servis kendi span'lerini aynı trace'e bağlayabilir. Tracing kütüphaneleri, çoğunlukla OpenTelemetry, popüler framework'ler için span'leri otomatik oluşturur ve her trace'i bir zaman çizelgesi olarak çizen bir izleme arka ucuna aktarır.
Kargo takip numarası gibi çalışır: her depo kargoyu tarar ve sonradan kargonun tam olarak nereye gittiğini ve nerede üç gün beklediğini görebilirsiniz. İzleme, hiçbir tek servisin log'unun tüm hikâyeyi göstermediği mikroservis ve serverless sistemlerde şarttır. Yüksek trafikte her isteği kaydetmek pahalı olduğundan sistemler genellikle örnekleme (sampling) kullanır; örneğin normal trace'lerin %1'ini ama hata içeren her trace'i tutar.
Dağıtık izleme sıklıkla loglamayla karıştırılır. Log, tek bir servis tarafından yazılan yalıtılmış bir kayıttır; trace ise paylaşılan bir trace ID'siyle servisler arasındaki işi birbirine bağlar ve zamanlamayı ile neden-sonuç ilişkisini gösterir. İkisi birlikte en iyi çalışır: trace ID'sini her log satırına eklemek, yavaş bir span'den doğrudan eşleşen log kayıtlarına atlamanızı sağlar.
Önemli noktalar
- Trace, tek bir isteği servisler arasında uçtan uca takip eder.
- Trace'ler, her biri bir işlemi ölçen ve üst-alt sırasıyla bağlanan span'lerden oluşur.
- Trace ID'si servisler arasında, genellikle
traceparentbaşlığında iletilir. - OpenTelemetry, trace oluşturmak ve dışa aktarmak için yaygın açık standarttır.
- Örnekleme, yüksek trafik hacimlerinde izlemeyi karşılanabilir tutar.
Örnek
// W3C trace context header: version-traceId-parentSpanId-flags
// traceparent: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
import { context, propagation } from "@opentelemetry/api";
async function callPaymentService(order) {
const headers = { "content-type": "application/json" };
// Copy the current trace ID and span ID into the outgoing headers
propagation.inject(context.active(), headers);
return fetch("https://payments.internal/charge", {
method: "POST",
headers,
body: JSON.stringify(order),
});
}Sık sorulan sorular
Dağıtık izlemede span nedir?
Span, bir trace içindeki zamanlanmış tek bir işlemdir; örneğin gelen bir HTTP isteği, bir veritabanı sorgusu ya da başka bir servise yapılan bir çağrı. Bir başlangıç zamanı, süre, durum ve öznitelikleri kaydeder ve üst span'ine işaret eder; böylece tüm istek bir ağaç olarak gösterilebilir.
İzleme (tracing) ile loglama arasındaki fark nedir?
Loglama, tek bir servis içindeki bireysel olayları kaydeder. İzleme ise tek bir istek için birçok servisin yaptığı işi paylaşılan bir trace ID'si aracılığıyla birbirine bağlar ve her adımın sırasını, zamanlamasını ve nedenini gösterir.
Dağıtık izleme bir uygulamayı yavaşlatır mı?
Span oluşturmak küçük bir ek yük getirir; bu yük genellikle ağ çağrılarına kıyasla ihmal edilebilir düzeydedir. Daha büyük maliyet, trace verisini göndermek ve saklamaktır; çoğu sistemin isteklerin yalnızca bir kısmını örneklemesinin nedeni budur.
İlgili sayfalar
- GözlemlenebilirlikDevOps ve Bulut, s. 22Gözlemlenebilirlik, çalışan bir yazılım sisteminin içinde olup biteni log, metrik ve trace verilerini toplayıp analiz ederek anlayabilme yeteneğidir.
- LoglamaDevOps ve Bulut, s. 32Loglama, çalışan bir programdaki hata ve istek gibi olaylar hakkında zaman damgalı mesajlar kaydetme pratiğidir; insanlar bunları sonradan inceleyebilir.
- MetriklerDevOps ve Bulut, s. 33Metrikler, bir sistemden zamanla toplanan istek oranı, hata oranı ve CPU kullanımı gibi sayısal ölçümlerdir; panolar, uyarılar ve planlama için kullanılır.
- MikroservislerYazılım Mimarisi, s. 24Mikroservisler, bir uygulamanın ağ üzerinden iletişim kuran, küçük ve bağımsız olarak dağıtılabilen servislere bölündüğü bir mimari tarzdır.
- GecikmeAğlar, s. 9Gecikme, bir istek ile yanıtın başlaması arasında geçen süredir; genellikle milisaniyeyle ölçülür ve bir uygulamanın ne kadar hızlı hissettirdiğini belirler.
- Service MeshDevOps ve Bulut, s. 47Service mesh, mikroservisler arası trafiği yöneten; kod değiştirmeden şifreleme, yeniden deneme, yönlendirme ve izleme ekleyen bir altyapı katmanıdır.
- OpenTelemetryDevOps ve Bulut, s. 35OpenTelemetry, yazılımdan trace, metrik ve log toplayıp bunları herhangi bir izleme backend'ine göndermek için açık bir standart ve araç takımıdır.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin