Managed Service for OpenTelemetry, mikro hizmet mimarileri için dağıtık izleme sunmak üzere OpenTracing veri modelini kullanır. Bu konuda izler (trace), kapsamlar (span), veri modeli ve veri raporlama yöntemleri ele alınmaktadır.
OpenTracing, OpenTelemetry'nin öncülüdür. Managed Service for OpenTelemetry, burada açıklanan OpenTracing veri modelini destekler. OpenTelemetry standardı için bkz. OpenTelemetry belgeleri.
Temel kavramlar
| Kavram | Açıklama |
|---|---|
| Dağıtık izleme | Bir isteğin dağıtık bir sistemdeki birden fazla hizmetten geçerken izlenmesini sağlayan yöntemdir. |
| İz (Trace) | Dağıtık bir sistemdeki bir işlem veya sürecin uçtan uca kaydıdır. İz, kapsamlardan oluşan yönlendirilmiş döngüsüz bir grafiktir (DAG). |
| Kapsam (Span) | Bir iz içindeki adlandırılmış ve zamanlanmış iş birimidir. |
| SpanContext | Bir kapsamı tanımlayan (iz kimliği, kapsam kimliği) ve süreç sınırları arasında bagaj öğelerini taşıyan meta verilerdir. |
| Referans | İki kapsam arasındaki nedensel ilişkidir. OpenTracing iki tür tanımlar: ChildOf ve FollowsFrom. |
| Tracer | Kapsam oluşturan ve hizmetler arasında bağlam yayan arayüzdür. |
Dağıtık izlemenin önemi
Modern uygulamalar, geliştiricilerin agile geliştirme ve sürekli entegrasyon gibi yöntemleri benimsediği mikro hizmet mimarilerini kullanır. Sistem mimarisi, bağımsız büyük ölçekli yazılımlardan mikro hizmet tabanlı mimarilere evrilmiştir; bu mimarilerde tek bir istek onlarca hizmeti aşabilir. Bu hizmetler farklı dillerde yazılabilir, farklı ekipler tarafından bakımı yapılabilir ve birden fazla sunucuda dağıtılabilir. Bir hizmette arıza oluştuğunda onlarca uygulama özel durumlarla karşılaşabilir ve uçtan uca görünürlük olmadan kök nedeni belirlemek pratik değildir.
Dağıtık izleme sistemi, uzak yöntem çağrılarının yürütme süreci ve harcadığı zaman dahil olmak üzere her isteğin tam yürütme yolunu ve zamanlamasını kaydeder. Bu görünürlük, sistem sorunlarını gidermek ve sistem performansını optimize etmek için önemlidir.
İzler (Traces)
Bir iz, dağıtık bir sistemdeki bir işlem veya sürecin yürütme sürecini temsil eder. OpenTracing standardında iz, birden fazla kapsamdan oluşan yönlendirilmiş döngüsüz bir grafiktir (DAG). Her kapsam, iz içinde sürekli olarak çalışan adlandırılmış ve zamanlanmış bir segmenti temsil eder.
Örneğin, bir istemci isteği hedef kaynağa ulaşmadan ve yanıt döndürmeden önce bir yük dengeleyici, bir kimlik doğrulama hizmeti ve bir faturalama hizmetinden geçebilir.

İzleme sistemleri bunu genellikle bir zaman çizelgesi olarak gösterir; burada her satır bir kapsamı, yatay eksen ise zamanı temsil eder.

Kapsamlar (Spans)
Bir kapsam, bir iz içindeki tek bir iş birimini temsil eder. Her kapsam aşağıdaki verileri içerir:
| Alan | Açıklama |
|---|---|
| İşlem adı | Gerçekleştirilen iş için insan tarafından okunabilir bir etikettir (kapsam adı olarak da adlandırılır). |
| Başlangıç zaman damgası | İşlemin başladığı an. |
| Bitiş zaman damgası | İşlemin tamamlandığı an. |
| Etiketler | Kapsama ek açıklama getiren anahtar-değer çiftleridir. Anahtarlar dizelerdir; değerler dize, boolean veya sayı olabilir. |
| Günlükler | Kapsam ömrü boyunca olayları kaydeden zaman damgalı anahtar-değer çiftleridir. Anahtarlar dizelerdir; değerler herhangi bir türde olabilir. |
| SpanContext | Kapsamı tanımlamak ve süreç sınırları arasında yaymak için kullanılan meta verilerdir. Bkz. SpanContext. |
| Referanslar | Üst-alt veya ardışık ilişkiler kuran diğer kapsamlara bağlantılardır. Sıfır veya birden fazla ilgili kapsam içerebilir. |
Kapsam ilişkileri
OpenTracing, kapsamlar arasında iki tür referans tanımlar:
ChildOf: Üst-alt ilişkisi. Örneğin, C Kapsamı A Kapsamının alt düğümüdür.
FollowsFrom: Ardışık ilişki. Örneğin, G Kapsamı F Kapsamından sonra çağrılır.
Aşağıdaki diyagram, tek bir iz içindeki sekiz kapsamı ve bunların ilişkilerini göstermektedir:
Causal relationships among spans in a single trace
[Span A] <-- root span
|
+------+------+
| |
[Span B] [Span C] (ChildOf: Span C is a child of Span A)
| |
[Span D] +---+-------+
| |
[Span E] [Span F] >>> [Span G] >>> [Span H]
^
|
(FollowsFrom: Span G follows Span F)
Aynı izin zaman çizelgesi olarak gösterimi:
Time relationships among spans in a single trace
--|-------|-------|-------|-------|-------|-------|-------|-> time
[Span A..........................................................]
[Span B...................................................]
[Span D................................................]
[Span C...............................................]
[Span E.......] [Span F..] [Span G..] [Span H..]
SpanContext
SpanContext, bir kapsamı tanımlamak ve süreç sınırları arasında yaymak için gereken meta verileri taşır. Şunları içerir:
Trace ID: Tüm iz için benzersiz bir tanımlayıcıdır.
Span ID: Bireysel kapsam için benzersiz bir tanımlayıcıdır.
Bagaj öğeleri: Hizmet sınırları boyunca iz ile birlikte hareket eden anahtar-değer çiftleridir. Bu anahtar-değer çiftlerinin de süreç sınırları arasında iletilmesi gerekir.
Tracer arayüzü
Tracer, kapsam oluşturmak ve hizmetler arasında bağlam yaymak için giriş noktasıdır. Kapsam oluşturmak için StartSpan yöntemini, bağlamı ayıklamak için Extract yöntemini ve bağlamı enjekte etmek için Inject yöntemini sağlar.
Kapsam oluşturma
Yeni bir kapsam oluşturmak ve başlatmak için StartSpan yöntemini kullanın. Yöntem, belirtilen işlem adı ve seçeneklerle bir kapsam döndürür.
// Method signature:
// StartSpan(operationName string, opts ...StartSpanOption) Span
// Create a root span (no parent).
sp := tracer.StartSpan("GetFeed")
// Create a child span.
sp := tracer.StartSpan(
"GetFeed",
opentracing.ChildOf(parentSpan.Context()),
)
Bağlamı hizmetler arasında yayma
İz bağlamını hizmetler arasında iletmek için Tracer iki tamamlayıcı yöntem sağlar:
-
Inject: Başka bir hizmete istek göndermeden önce bir SpanContext'i (iz kimliği, kapsam kimliği ve bagaj öğeleri dahil) bir taşıyıcıya (HTTP üst bilgileri gibi) serileştirir.
// Method signature: // Inject(sm SpanContext, format interface{}, carrier interface{}) error carrier := opentracing.HTTPHeadersCarrier(httpReq.Header) err := tracer.Inject( span.Context(), opentracing.HTTPHeaders, carrier, ) -
Extract: Başka bir hizmetten istek alındığında bir SpanContext'i (iz kimliği, kapsam kimliği ve bagaj öğeleri dahil) bir taşıyıcıdan seri durumdan çıkarır.
// Method signature: // Extract(format interface{}, carrier interface{}) (SpanContext, error) carrier := opentracing.HTTPHeadersCarrier(httpReq.Header) clientContext, err := tracer.Extract( opentracing.HTTPHeaders, carrier, )
Inject ve Extract birlikte, süreç ve ağ sınırları boyunca uçtan uca izlemeyi etkinleştirir.
Veri raporlama
Managed Service for OpenTelemetry, iz verilerini raporlamak için iki yöntemi destekler:
Doğrudan raporlama
Uygulama, ara sunucu olmadan iz verilerini doğrudan izleme arka ucuna gönderir.

Aracı üzerinden raporlama
Uygulama, iz verilerini yerel bir aracıya (Jaeger Agent gibi) gönderir; aracı verileri izleme arka ucuna iletir.
