labs

Bu lab modernize edildi ama ucтan uca dogrulanmadi. Takilirsaniz bize bildirin.

Jaeger ile İzleri Görselleştirmek

35 dkdockerGitHub'da gor
Bu sayfada

Jaeger Çalıştırmak

Jaeger bir dağıtık izleme sistemi — izleri toplayıp saklıyor ve onları bulup görselleştirmeniz için bir web arayüzü veriyor. Jaeger başlangıçta kendi veri biçimini kullanıyordu, ama OpenTelemetry'yi de destekliyor — ve Jaeger 2 doğrudan OpenTelemetry Collector üzerine kurulu.

Jaeger'ı üretim yapılandırmasında, farklı özellikler farklı süreçlerde çalışacak şekilde çalıştırabilirsiniz; veri deposunu değiştirebilir veya toplamayı tamponlamak için bir mesaj kuyruğu ekleyebilirsiniz.

Kaynaklar

Jaeger'ı çalıştırmak

Jaeger'ı basit bir yapılandırmayla, tüm bileşenleri tek bir Docker container'ında çalışacak şekilde çalıştıracağız:

  • jaeger.yml — bir tracing ağına bağlı ve varsayılan web

    arayüzü portu olan 16686'yı yayınlayan bir Jaeger container'ı tanımlıyor

Jaeger'ı çalıştırın:

docker compose -f labs/jaeger/jaeger.yml up -d

Jaeger arayüzünü http://localhost:16686 adresinde açıp üstteki Search menüsüne basın. İzleri burada buluyorsunuz: Service açılır listesi Jaeger'a span göndermiş her servisi, Operation açılır listesi ise onların içindeki adlandırılmış işlemleri listeliyor.

Şu anda liste boş, çünkü Jaeger'a henüz hiçbir şey span göndermedi.

Bu lab'ın eski sürümü buraya Jaeger'ın kendi jaeger-query izlerine bakarak başlıyordu. Jaeger 2 kendisi hakkında çok daha az şey raporluyor: yeni açılmış bir container'da servis listesi gerçekten boş ve jaeger servisi ancak gerçek span'ler akmaya başlayınca beliriyor. Yani ona span göndermeden bakacak bir şey yok — sırada bunu yapacağız.

Jaeger span'leri birkaç farklı biçimde kabul ediyor. Varsayılan yapılandırması OTLP (OpenTelemetry protokolü), eski Jaeger protokolleri ve Zipkin için alıcıları açık tutuyor — yani bunlardan herhangi biriyle ölçümlenmiş uygulamalar ek yapılandırma gerekmeden ona rapor edebiliyor.

Jaeger'a iz göndermek

Kullanacağımız demo uygulamasının, hepsi OpenTelemetry ile dağıtık izleme kurulmuş üç bileşeni var:

  • apps.yml — web uygulaması, döküman servisi API'si ve bir

    yetkilendirme servisi API'si için container'ları tanımlıyor. Hepsi iz span'lerini Jaeger container'ına gönderecek şekilde yapılandırılmış.

Uygulama container'larını çalıştırın:

docker compose -f labs/jaeger/apps.yml up -d

Web arayüzünün ana sayfasını http://localhost:8070 adresinde açın, sonra http://localhost:16686/search adresindeki Jaeger aramanızı yenileyin.

Servis listesinde artık Fulfilment.Web görmelisiniz.

📋 Web uygulamasına yapılan ana sayfa isteğinin izini açın. Bu izde kaç span var?

Biraz yardım lazım mı?

Arama arayüzünde Service alanını Fulfilment.Web, Operation alanını / yapın. Find Traces tıklayın ve tek bir sonuç görmelisiniz.

O izi açıp ayrıntıları genişletin. Yalnızca bir span var: tarayıcı isteğinize verilen sunucu yanıtı.


İzler, Jaeger'ın topladığı span'lerden derleniyor. Hangi servisten ne beklendiğine dair önceden bir bilgi yok; her şey Jaeger'a ulaşan span'lerden geriye dönük kuruluyor.

Tek span'li bir iz tamamen geçerli — çağrı zincirinde başka HTTP isteği olmadığı anlamına geliyor.

Şimdi döküman listesi sayfasına dönüp, kullanıcı alanı için varsayılan değeri kullanarak Go düğmesine basın.

📋 Yeni isteğinizin izini bulun. Bunda daha fazla span var mı?

Biraz yardım lazım mı?

Jaeger aramasında çok daha fazla servis göreceksiniz. Hâlâ Fulfilment.Web istiyoruz ama hangi işlemi istediğiniz her zaman belli olmuyor; bu yüzden operation için all seçip Find Traces tıklayabilirsiniz.

İstediğiniz iz, birden fazla servisten birden fazla span ile listelenmiş olan.


İzi açıp ayrıntıları genişletin; uygulamalarınıza izleme eklemenin gerçek değerini göreceksiniz:

Birden fazla servisten span içeren iz zaman çizelgesi

Üstteki grafik toplam iz süresini ve onun içinde her span'in süresini gösteriyor. Bu örnekte tüm istek 1.01 saniye sürmüş ve web uygulamasının iki ardışık HTTP çağrısı yaptığını net biçimde görebiliyorsunuz.

Grafiğin altında her span'in ayrıntıları var; etiketleri ve ek bilgileri görmek için genişletebilirsiniz.

Etiketler, ek ayrıntı kaydetmek için span'lerinize koyduğunuz anahtar-değer çiftleri. Bazıları gelenekseldir ve bileşenler arasında ortak görürsünüz (http.method, http.status_code, span.kind), ama koleksiyon serbest — faydalı olan her şeyi ekleyebilirsiniz.

İz zaman çizelgesi en faydalı görünüm, ama sağ üstteki açılır listeden diğerlerine geçebilirsiniz:

  • Trace Statistics — span'ler hakkında düşük seviyeli zamanlama ayrıntıları
  • Trace JSON — tam ham veri

📋 Döküman listesini aldığınızda çağrı izi nasıl — ve çağrının hangi kısmı en çok zaman alıyor?

Biraz yardım lazım mı?

Tüm span'leri genişletin ve bol ayrıntı göreceksiniz:

  • web uygulaması, kullanıcının düğmeye basmasıyla bir POST isteği alıyor
    • bu en üstteki span; istemciye verilen sunucu yanıtı
  • web uygulaması yetkilendirme servisini çağırıyor
    • burada iki span var çünkü iki bileşen de iz yakalıyor — web

      uygulamasından gelen client çağrısı ve yetkilendirme servisinden gelen sunucu yanıtı

  • yetkilendirme servisi harici bir web adresini çağırıyor (aslında bir blog)
    • burada tek span var, yetkilendirme servisinin client çağrısı; çünkü blog

      sunucusundan iz ayrıntısı alamıyoruz

  • web uygulaması döküman servisini çağırıyor
    • burada da iki span var, iki bileşen de iz span'i kaydediyor: web

      sunucusundan client çağrısı ve API sunucusundan server çağrısı

Hangi span'in baskın olduğu güne göre değişir. Kontrol etmediğiniz çağrı, https://blog.sixeyed.com adresine yapılan harici istek - bu lablar yazıldığında açık ara en yavaş olan oydu, yaklaşık bir saniye. Artık bir CDN arkasında önbellekleniyor ve çoğu zaman milisaniyeler içinde dönüyor; o durumda en uzun çağrı doküman API'sine yapılan oluyor. Bu değişkenlik, harici bağımlılığın neden izlenmeye değer olduğunu tam olarak gösteriyor.


Uygulama bileşenleri, gelen ve giden HTTP çağrıları için iz span'leri kaydedip göndermek üzere OpenTelemetry kütüphanelerini kullanıyor. Farklı teknolojiler kullanıyorlar (ASP.NET ve Spring Boot) ama iz biçimi aynı olduğu için Jaeger tüm span'leri doğru ize derleyebiliyor.

Uygulamaların hiçbirinde iz toplamak ve göndermek için fazladan koda ihtiyaç olmadı; yalnızca ölçümleme kütüphanesi bağlandı:

  • .NET uygulamasında bu,

    Tracing sınıfındaki AddTracing uzantı metodunda yapılıyor

  • Spring Boot uygulamasında kod olmadan,

    pom.xml dosyasında referans verilen opentracing-spring-jaeger-web-starter paketi kullanılarak yapılıyor

Lab

Dağıtık izleme, aşina olmadığınız bir uygulamadaki özelliklerin iç yapısını keşfetmek için harika.

Web uygulamasındaki Submit document sayfasını açın ve sayfadaki varsayılan alan değerleriyle Go tıklayın.

Döküman gönderme işleminin çağrı yığınını çizmek için Jaeger'ı kullanın; dökümanı aslında hangi sınıfın hangi metodu oluşturuyor?

Takıldınız mı? İpuçlarına bakın veya çözümü inceleyin.


Temizlik

Bu lab'ın container'larını kaldırın:

docker compose -f labs/jaeger/jaeger.yml down
docker compose -f labs/jaeger/apps.yml down

Bu komut yalnızca bu lab'in baslattigi container'lari kaldırır. Tamamen temiz bir başlangıç istiyorsanız docker ps ile hâlâ çalışan varsa görebilirsiniz.