{"id":40144,"date":"2026-02-24T19:40:59","date_gmt":"2026-02-24T16:40:59","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=40144"},"modified":"2026-02-24T19:40:59","modified_gmt":"2026-02-24T16:40:59","slug":"kubernetes-uzerinde-jaeger-ile-dagitik-izleme-distributed-tracing-nasil-uygulanir","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/kubernetes-uzerinde-jaeger-ile-dagitik-izleme-distributed-tracing-nasil-uygulanir\/","title":{"rendered":"Kubernetes \u00dczerinde Jaeger ile Da\u011f\u0131t\u0131k \u0130zleme (Distributed Tracing) Nas\u0131l Uygulan\u0131r?"},"content":{"rendered":"<p><body><\/p>\n<h2>Kubernetes \u00dczerinde Jaeger ile Da\u011f\u0131t\u0131k \u0130zleme (Distributed Tracing) Nas\u0131l Uygulan\u0131r?<\/h2>\n<p>Modern mikroservis mimarileri, uygulamalar\u0131n geli\u015ftirilme ve da\u011f\u0131t\u0131lma \u015fekillerinde devrim yaratm\u0131\u015ft\u0131r. Ancak bu mimariler, sistemlerin karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 art\u0131rarak hata ay\u0131klama ve performans sorunlar\u0131n\u0131 tespit etme s\u00fcre\u00e7lerini zorla\u015ft\u0131rmaktad\u0131r. Tek bir kullan\u0131c\u0131 iste\u011finin birden fazla servise yay\u0131ld\u0131\u011f\u0131, asenkron ileti\u015fim modellerinin ve mesaj kuyruklar\u0131n\u0131n kullan\u0131ld\u0131\u011f\u0131 ortamlarda, bir iste\u011fin ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fc ba\u015ftan sona takip etmek geleneksel g\u00fcnl\u00fck (logging) mekanizmalar\u0131yla neredeyse imkans\u0131z hale gelir. \u0130\u015fte tam bu noktada da\u011f\u0131t\u0131k izleme (distributed tracing) devreye girer.<\/p>\n<p>Da\u011f\u0131t\u0131k izleme, bir iste\u011fin sistemdeki t\u00fcm servisler aras\u0131nda nas\u0131l hareket etti\u011fini g\u00f6rselle\u015ftirmemizi sa\u011flayan g\u00fc\u00e7l\u00fc bir tekniktir. Bu makalede, a\u00e7\u0131k kaynakl\u0131 ve pop\u00fcler bir da\u011f\u0131t\u0131k izleme arac\u0131 olan Jaeger&#8217;\u0131 Kubernetes ortam\u0131nda nas\u0131l uygulayaca\u011f\u0131m\u0131z\u0131 ve y\u00f6netece\u011fimizi ayr\u0131nt\u0131l\u0131 bir \u015fekilde inceleyece\u011fiz. Kubernetes&#8217;in sa\u011flad\u0131\u011f\u0131 orkestrasyon yetenekleriyle Jaeger&#8217;\u0131 birle\u015ftirerek, dinamik ve \u00f6l\u00e7eklenebilir mikroservis uygulamalar\u0131n\u0131z\u0131n derinlemesine g\u00f6r\u00fcn\u00fcrl\u00fc\u011f\u00fcn\u00fc nas\u0131l elde edece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131klayaca\u011f\u0131z.<\/p>\n<h3>Da\u011f\u0131t\u0131k \u0130zleme Nedir ve Neden Gereklidir?<\/h3>\n<p>Da\u011f\u0131t\u0131k izleme, bir uygulaman\u0131n veya sistemin farkl\u0131 bile\u015fenleri aras\u0131nda yay\u0131lan tek bir i\u015flemin (\u00f6rne\u011fin, bir API \u00e7a\u011fr\u0131s\u0131 veya bir kullan\u0131c\u0131 iste\u011fi) u\u00e7tan uca yolculu\u011funu takip etme y\u00f6ntemidir. Her bir i\u015flem, &#8220;izleme (trace)&#8221; ad\u0131 verilen bir dizi &#8220;yay\u0131l\u0131m (span)&#8221; olarak temsil edilir. Her yay\u0131l\u0131m, bir serviste veya bile\u015fende ger\u00e7ekle\u015fen belirli bir i\u015flemi (\u00f6rne\u011fin, bir veritaban\u0131 sorgusu, bir HTTP iste\u011fi) temsil eder ve kendi ba\u015flang\u0131\u00e7 zaman\u0131, s\u00fcresi, etiketleri ve g\u00fcnl\u00fckleri gibi bilgilere sahiptir. Yay\u0131l\u0131mlar birbiriyle ili\u015fkili oldu\u011funda, bir iste\u011fin sistem i\u00e7indeki t\u00fcm yolculu\u011funu g\u00f6steren bir a\u011fa\u00e7 yap\u0131s\u0131 olu\u015ftururlar.<\/p>\n<h4>Monolitik ve Mikroservis Mimarilerinde \u0130zleme Zorluklar\u0131<\/h4>\n<p>Monolitik uygulamalarda, t\u00fcm kod taban\u0131 tek bir s\u00fcre\u00e7 i\u00e7inde \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan, bir hata veya performans sorunu genellikle ayn\u0131 g\u00fcnl\u00fck dosyas\u0131 veya hata ay\u0131klay\u0131c\u0131 i\u00e7inde kolayca tespit edilebilir. Ancak mikroservis mimarilerinde durum tamamen farkl\u0131d\u0131r:<\/p>\n<p>*   <strong>\u0130stek Ak\u0131\u015f\u0131 Karma\u015f\u0131kl\u0131\u011f\u0131:<\/strong> Bir kullan\u0131c\u0131 iste\u011fi, birden fazla servisi, veritaban\u0131n\u0131, mesaj kuyru\u011funu ve \u00f6nbelle\u011fi i\u00e7erebilir. Her servis kendi g\u00fcnl\u00fcklerini tutar ve bu g\u00fcnl\u00fckleri birle\u015ftirmek zordur.<br \/>\n*   <strong>Gecikme Tespiti:<\/strong> Hangi servisin veya i\u015flemin genel iste\u011fin yava\u015flamas\u0131na neden oldu\u011funu belirlemek zordur.<br \/>\n*   <strong>Hata Ay\u0131klama:<\/strong> Bir hata olu\u015ftu\u011funda, hatan\u0131n kayna\u011f\u0131n\u0131 (hangi serviste, hangi \u00e7a\u011fr\u0131da) bulmak, izleme olmadan bir &#8220;i\u011fne aramak&#8221; gibidir.<br \/>\n*   <strong>Ba\u011f\u0131ml\u0131l\u0131k Analizi:<\/strong> Servisler aras\u0131 ba\u011f\u0131ml\u0131l\u0131klar\u0131 ve bunlar\u0131n performans \u00fczerindeki etkilerini anlamak i\u00e7in kapsaml\u0131 bir g\u00f6r\u00fcn\u00fcrl\u00fck gerekir.<\/p>\n<p>Da\u011f\u0131t\u0131k izleme, bu zorluklar\u0131 a\u015fmak i\u00e7in tasarlanm\u0131\u015ft\u0131r. Her iste\u011fe benzersiz bir izleme kimli\u011fi (trace ID) atan\u0131r ve bu kimlik, iste\u011fin ge\u00e7ti\u011fi t\u00fcm servisler aras\u0131nda yay\u0131l\u0131r (context propagation). Her servis, bu kimli\u011fi kullanarak kendi yay\u0131l\u0131mlar\u0131n\u0131 olu\u015fturur ve bunlar\u0131 bir izleme sistemine g\u00f6nderir. \u0130zleme sistemi bu yay\u0131l\u0131mlar\u0131 birle\u015ftirerek iste\u011fin tam yolculu\u011funu ve her ad\u0131mda ne kadar zaman harcand\u0131\u011f\u0131n\u0131 g\u00f6rselle\u015ftirir. Bu sayede geli\u015ftiriciler ve operasyon ekipleri, performans darbo\u011fazlar\u0131n\u0131, hata kaynaklar\u0131n\u0131 ve servisler aras\u0131 etkile\u015fimleri h\u0131zl\u0131ca anlayabilirler.<\/p>\n<h3>Jaeger&#8217;\u0131n Temel Bile\u015fenleri<\/h3>\n<p>Jaeger, Uber taraf\u0131ndan geli\u015ftirilen ve daha sonra Cloud Native Computing Foundation (CNCF) b\u00fcnyesine al\u0131nan a\u00e7\u0131k kaynakl\u0131 bir da\u011f\u0131t\u0131k izleme sistemidir. Temel bile\u015fenleri \u015funlard\u0131r:<\/p>\n<h4>Jaeger Client Libraries (\u0130stemci K\u00fct\u00fcphaneleri)<\/h4>\n<p>Uygulamalar\u0131n\u0131za izleme yetene\u011fi kazand\u0131rmak i\u00e7in kullan\u0131lan dile \u00f6zel k\u00fct\u00fcphanelerdir (\u00f6rne\u011fin, Java i\u00e7in <code>jaeger-client-java<\/code>, Python i\u00e7in <code>jaeger-client-python<\/code>). Bu k\u00fct\u00fcphaneler, OpenTracing veya OpenTelemetry API&#8217;lerini kullanarak yay\u0131l\u0131mlar olu\u015fturur, ba\u011flam\u0131 yayar ve bu yay\u0131l\u0131mlar\u0131 Jaeger Agent&#8217;a g\u00f6nderir. Geli\u015ftiricilerin kodlar\u0131na manuel olarak veya otomatik enstr\u00fcmantasyon ara\u00e7lar\u0131 (\u00f6rne\u011fin, OpenTelemetry Auto-Instrumentation) arac\u0131l\u0131\u011f\u0131yla entegre edilirler.<\/p>\n<h4>Jaeger Agent<\/h4>\n<p>\u0130stemci uygulamalar\u0131ndan UDP \u00fczerinden yay\u0131l\u0131mlar\u0131 alan bir a\u011f demonudur. Agent&#8217;\u0131n temel g\u00f6revleri \u015funlard\u0131r:<\/p>\n<p>*   <strong>Yay\u0131l\u0131m Toplama:<\/strong> Uygulamalardan yay\u0131l\u0131mlar\u0131 al\u0131r.<br \/>\n*   <strong>Yay\u0131l\u0131m Toplula\u015ft\u0131rma ve Batching:<\/strong> Birden fazla yay\u0131l\u0131m\u0131 bir araya getirerek a\u011f trafi\u011fini optimize eder.<br \/>\n*   <strong>Yay\u0131l\u0131m Y\u00f6nlendirme:<\/strong> Toplad\u0131\u011f\u0131 yay\u0131l\u0131mlar\u0131 Jaeger Collector&#8217;a g\u00f6nderir.<br \/>\n*   <strong>\u00d6rnekleme (Sampling) Yap\u0131land\u0131rmas\u0131:<\/strong> \u0130stemci k\u00fct\u00fcphanelerine hangi yay\u0131l\u0131mlar\u0131n g\u00f6nderilece\u011fini belirleyen \u00f6rnekleme stratejilerini dinamik olarak sa\u011flayabilir.<\/p>\n<p>Kubernetes ortam\u0131nda Jaeger Agent genellikle her uygulama pod&#8217;unun yan\u0131nda bir sidecar kapsay\u0131c\u0131 olarak veya her d\u00fc\u011f\u00fcmde bir DaemonSet olarak \u00e7al\u0131\u015ft\u0131r\u0131l\u0131r. Sidecar yakla\u015f\u0131m\u0131, a\u011f gecikmesini azalt\u0131r ve uygulama ile ajan aras\u0131ndaki ileti\u015fimi basitle\u015ftirir.<\/p>\n<h4>Jaeger Collector<\/h4>\n<p>Jaeger Agent&#8217;lardan veya do\u011frudan istemci k\u00fct\u00fcphanelerinden (HTTP\/Thrift) yay\u0131l\u0131mlar\u0131 al\u0131r. Collector&#8217;\u0131n g\u00f6revleri \u015funlard\u0131r:<\/p>\n<p>*   <strong>Yay\u0131l\u0131m Do\u011frulama:<\/strong> Gelen yay\u0131l\u0131mlar\u0131n ge\u00e7erlili\u011fini kontrol eder.<br \/>\n*   <strong>Yay\u0131l\u0131m \u0130\u015fleme:<\/strong> Yay\u0131l\u0131mlar\u0131 i\u015fler ve gerekirse d\u00f6n\u00fc\u015ft\u00fcr\u00fcr.<br \/>\n*   <strong>Depolama Katman\u0131na Yazma:<\/strong> \u0130\u015flenen yay\u0131l\u0131mlar\u0131 kal\u0131c\u0131 depolama birimine (\u00f6rne\u011fin, Elasticsearch, Cassandra) yazar.<\/p>\n<p>Collector, genellikle birden fazla \u00f6rne\u011fi \u00e7al\u0131\u015ft\u0131r\u0131larak yatay olarak \u00f6l\u00e7eklenebilir.<\/p>\n<h4>Storage Backend (Depolama Katman\u0131)<\/h4>\n<p>Jaeger Collector&#8217;\u0131n toplad\u0131\u011f\u0131 t\u00fcm izleme verilerinin kal\u0131c\u0131 olarak sakland\u0131\u011f\u0131 yerdir. Jaeger \u00e7e\u015fitli depolama arka u\u00e7lar\u0131n\u0131 destekler:<\/p>\n<p>*   <strong>Elasticsearch:<\/strong> En pop\u00fcler se\u00e7enektir. G\u00fc\u00e7l\u00fc arama ve indeksleme yetenekleri sayesinde izleme verilerinin kolayca sorgulanmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <strong>Cassandra:<\/strong> Y\u00fcksek yazma performans\u0131 ve \u00f6l\u00e7eklenebilirlik sunar.<br \/>\n*   <strong>Kafka:<\/strong> Bir arabellek olarak kullan\u0131labilir. Collector&#8217;lar yay\u0131l\u0131mlar\u0131 \u00f6nce Kafka&#8217;ya yazabilir, ard\u0131ndan ba\u015fka bir bile\u015fen (Kafka-to-Storage) bu verileri kal\u0131c\u0131 depolamaya aktarabilir. Bu, Collector&#8217;lar\u0131n y\u00fck\u00fcn\u00fc azalt\u0131r ve veri kayb\u0131 riskini d\u00fc\u015f\u00fcr\u00fcr.<br \/>\n*   <strong>In-Memory:<\/strong> Geli\u015ftirme ve test ortamlar\u0131 i\u00e7in uygundur, ancak verileri kal\u0131c\u0131 olarak saklamaz.<\/p>\n<h4>Jaeger Query<\/h4>\n<p>Depolama katman\u0131nda saklanan izleme verilerini sorgulamak i\u00e7in bir API sa\u011flar. Jaeger UI bu API&#8217;yi kullanarak izleme verilerini al\u0131r ve g\u00f6rselle\u015ftirir.<\/p>\n<h4>Jaeger UI (Kullan\u0131c\u0131 Aray\u00fcz\u00fc)<\/h4>\n<p>\u0130zleme verilerini g\u00f6rselle\u015ftirmek, aramak ve analiz etmek i\u00e7in kullan\u0131lan web tabanl\u0131 bir aray\u00fczd\u00fcr. Geli\u015ftiricilerin belirli bir hizmeti, i\u015flemi veya izleme kimli\u011fini kullanarak izlemeleri bulmas\u0131na, bir iste\u011fin u\u00e7tan uca yolculu\u011funu bir \u015felale grafi\u011fi olarak g\u00f6rmesine ve performans darbo\u011fazlar\u0131n\u0131 veya hatalar\u0131 kolayca tespit etmesine olanak tan\u0131r.<\/p>\n<h3>Kubernetes \u00dczerinde Jaeger Kurulumu<\/h3>\n<p>Kubernetes \u00fczerinde Jaeger kurman\u0131n en yayg\u0131n ve \u00f6nerilen yolu Helm kullanmakt\u0131r. Helm, Kubernetes uygulamalar\u0131n\u0131 y\u00f6netmek i\u00e7in bir paket y\u00f6neticisidir.<\/p>\n<h4>Helm ile Kurulum<\/h4>\n<p>\u00d6ncelikle Helm&#8217;in sisteminizde kurulu oldu\u011fundan emin olun. Ard\u0131ndan Jaeger Helm deposunu ekleyin:<\/p>\n<pre><code class=\"language-bash\">helm repo add jaegertracing https:\/\/jaegertracing.github.io\/helm-charts\nhelm repo update<\/code><\/pre>\n<p>\u015eimdi Jaeger&#8217;\u0131 kurabiliriz. \u0130ki ana kurulum stratejisi vard\u0131r: &#8220;all-in-one&#8221; (hepsi bir arada) ve \u00fcretim ortam\u0131 i\u00e7in bile\u015fenlerin ayr\u0131 ayr\u0131 da\u011f\u0131t\u0131ld\u0131\u011f\u0131 daha \u00f6l\u00e7eklenebilir bir yap\u0131.<\/p>\n<h5>Geli\u015ftirme\/Test Ortam\u0131 \u0130\u00e7in: All-in-One Kurulum<\/h5>\n<p>Bu kurulum, t\u00fcm Jaeger bile\u015fenlerini (Agent, Collector, Query, UI ve in-memory depolama) tek bir pod i\u00e7inde \u00e7al\u0131\u015ft\u0131r\u0131r. Geli\u015ftirme ve test ortamlar\u0131 i\u00e7in h\u0131zl\u0131 ve kolay bir ba\u015flang\u0131\u00e7 sa\u011flar, ancak \u00fcretim ortamlar\u0131 i\u00e7in \u00f6nerilmez.<\/p>\n<pre><code class=\"language-bash\">helm install jaeger jaegertracing\/jaeger \\\n  --namespace tracing \\\n  --create-namespace \\\n  --set allInOne.enabled=true \\\n  --set agent.enabled=false \\\n  --set collector.enabled=false \\\n  --set query.enabled=false \\\n  --set storage.type=memory<\/code><\/pre>\n<p>Bu komut, <code>tracing<\/code> ad alan\u0131na <code>jaeger<\/code> ad\u0131yla bir Jaeger all-in-one \u00f6rne\u011fi kurar. <code>agent.enabled=false<\/code>, <code>collector.enabled=false<\/code>, <code>query.enabled=false<\/code> ayarlar\u0131, all-in-one pod&#8217;unun kendi i\u00e7indeki bu bile\u015fenleri kullanmas\u0131n\u0131 sa\u011flar ve ayr\u0131 bile\u015fenlerin da\u011f\u0131t\u0131lmas\u0131n\u0131 engeller.<\/p>\n<h5>\u00dcretim Ortam\u0131 \u0130\u00e7in: \u00d6l\u00e7eklenebilir Kurulum (Elasticsearch ile)<\/h5>\n<p>\u00dcretim ortamlar\u0131nda, Jaeger bile\u015fenlerinin ayr\u0131 ayr\u0131 da\u011f\u0131t\u0131lmas\u0131 ve kal\u0131c\u0131 bir depolama arka ucu (genellikle Elasticsearch) kullan\u0131lmas\u0131 \u00f6nerilir. Bu, her bile\u015fenin ba\u011f\u0131ms\u0131z olarak \u00f6l\u00e7eklenmesine ve daha y\u00fcksek performans ile g\u00fcvenilirlik elde edilmesine olanak tan\u0131r.<\/p>\n<p>\u00d6ncelikle bir Elasticsearch k\u00fcmesi kurman\u0131z gerekecektir. Bunu da Helm ile yapabilirsiniz (\u00f6rne\u011fin, Elastic&#8217;in kendi Helm grafikleri veya Bitnami gibi \u00fc\u00e7\u00fcnc\u00fc taraf grafikler). Basit bir \u00f6rnek olarak:<\/p>\n<pre><code class=\"language-bash\"># Elasticsearch Helm deposunu ekle\nhelm repo add elastic https:\/\/helm.elastic.co\nhelm repo update\n\n<h2>Elasticsearch'i kur (k\u00fc\u00e7\u00fck bir test kurulumu i\u00e7in)<\/h2>\nhelm install elasticsearch elastic\/elasticsearch \\\n  --namespace tracing \\\n  --create-namespace \\\n  --set replicas=1 \\\n  --set minimumMasterNodes=1 \\\n  --set clusterName=jaeger-elasticsearch \\\n  --set esJavaOpts=\"-Xmx512m -Xms512m\" \\\n  --set volumeClaimTemplate.storageClassName=standard \\\n  --set volumeClaimTemplate.resources.requests.storage=10Gi<\/code><\/pre>\n<p>Elasticsearch kurulduktan sonra, Jaeger&#8217;\u0131 bu Elasticsearch k\u00fcmesini kullanacak \u015fekilde yap\u0131land\u0131rabiliriz.<\/p>\n<pre><code class=\"language-bash\">helm install jaeger jaegertracing\/jaeger \\\n  --namespace tracing \\\n  --create-namespace \\\n  --set strategy=production \\\n  --set agent.strategy=DaemonSet \\\n  --set collector.replicas=2 \\\n  --set query.replicas=1 \\\n  --set storage.type=elasticsearch \\\n  --set storage.elasticsearch.host=elasticsearch-master.tracing.svc.cluster.local \\\n  --set storage.elasticsearch.port=9200 \\\n  --set storage.elasticsearch.username=\"\" \\\n  --set storage.elasticsearch.password=\"\" \\\n  --set storage.elasticsearch.indexPrefix=jaeger \\\n  --set storage.elasticsearch.tagKeysAsFields=true \\\n  --set storage.elasticsearch.maxSpanAge=72h # 3 g\u00fcn sonra sil<\/code><\/pre>\n<p>Bu komutta:<br \/>\n*   <code>strategy=production<\/code>: Jaeger&#8217;\u0131n \u00fcretim ortam\u0131 i\u00e7in optimize edilmi\u015f bir da\u011f\u0131t\u0131m stratejisi kullanmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <code>agent.strategy=DaemonSet<\/code>: Her Kubernetes d\u00fc\u011f\u00fcm\u00fcnde bir Jaeger Agent pod&#8217;u \u00e7al\u0131\u015ft\u0131r\u0131r. Bu, uygulamalar\u0131n Agent&#8217;a ula\u015fmas\u0131n\u0131 kolayla\u015ft\u0131r\u0131r. Alternatif olarak, <code>agent.sidecar=true<\/code> ile her uygulama pod&#8217;una sidecar olarak da eklenebilir.<br \/>\n*   <code>collector.replicas=2<\/code>: \u0130ki adet Jaeger Collector pod&#8217;u \u00e7al\u0131\u015ft\u0131r\u0131r. Bu, gelen yay\u0131l\u0131m y\u00fck\u00fcn\u00fc dengelemek i\u00e7in \u00f6l\u00e7eklenebilirli\u011fi art\u0131r\u0131r.<br \/>\n*   <code>storage.type=elasticsearch<\/code>: Depolama arka ucu olarak Elasticsearch&#8217;i kullan\u0131r.<br \/>\n*   <code>storage.elasticsearch.host<\/code> ve <code>port<\/code>: Elasticsearch servisinin adresini belirtir. <code>elasticsearch-master.tracing.svc.cluster.local<\/code> varsay\u0131lan Helm kurulumuna g\u00f6re Elasticsearch servis ad\u0131d\u0131r.<br \/>\n*   <code>storage.elasticsearch.maxSpanAge<\/code>: \u0130zleme verilerinin ne kadar s\u00fcreyle saklanaca\u011f\u0131n\u0131 belirler (\u00f6rne\u011fin, 72 saat = 3 g\u00fcn).<\/p>\n<p>Kurulumdan sonra, Jaeger UI&#8217;ya eri\u015fmek i\u00e7in bir <code>port-forward<\/code> yapabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">kubectl port-forward svc\/jaeger-query 16686:16686 -n tracing<\/code><\/pre>\n<p>\u015eimdi taray\u0131c\u0131n\u0131zdan <code>http:\/\/localhost:16686<\/code> adresine giderek Jaeger UI&#8217;ya eri\u015febilirsiniz.<\/p>\n<h3>Uygulamalar\u0131n \u0130zleme Entegrasyonu<\/h3>\n<p>Jaeger&#8217;\u0131 Kubernetes&#8217;e kurduktan sonra, uygulamalar\u0131n\u0131z\u0131n izleme verilerini g\u00f6ndermesini sa\u011flaman\u0131z gerekir. Bu s\u00fcre\u00e7, uygulaman\u0131z\u0131n koduna izleme istemci k\u00fct\u00fcphanelerini entegre etmeyi i\u00e7erir. G\u00fcn\u00fcm\u00fczde bu entegrasyon i\u00e7in en yayg\u0131n yakla\u015f\u0131mlar OpenTracing ve onun halefi olan OpenTelemetry&#8217;dir.<\/p>\n<h4>Tracing Client K\u00fct\u00fcphaneleri ve OpenTelemetry<\/h4>\n<p><strong>OpenTracing<\/strong>, da\u011f\u0131t\u0131k izleme i\u00e7in sat\u0131c\u0131dan ba\u011f\u0131ms\u0131z bir API ve enstr\u00fcmantasyon standard\u0131 sa\u011flayan bir CNCF projesiydi. <strong>OpenTelemetry<\/strong> ise OpenTracing ve OpenCensus projelerinin birle\u015fimiyle ortaya \u00e7\u0131kan, izleme, metrikler ve g\u00fcnl\u00fckler i\u00e7in birle\u015fik bir telemetri toplama standard\u0131d\u0131r. Yeni projeler i\u00e7in OpenTelemetry kullan\u0131lmas\u0131 \u015fiddetle tavsiye edilir, \u00e7\u00fcnk\u00fc gelece\u011fe d\u00f6n\u00fck ve daha kapsaml\u0131 bir \u00e7\u00f6z\u00fcmd\u00fcr. Jaeger, OpenTelemetry taraf\u0131ndan \u00fcretilen izleme verilerini do\u011frudan kabul edebilir.<\/p>\n<p>Uygulaman\u0131za izleme entegrasyonu i\u00e7in genel ad\u0131mlar \u015funlard\u0131r:<\/p>\n<p>1.  <strong>OpenTelemetry SDK ve Jaeger Exporter Ekleme:<\/strong> Uygulaman\u0131z\u0131n kulland\u0131\u011f\u0131 programlama diline uygun OpenTelemetry SDK&#8217;s\u0131n\u0131 ve Jaeger exporter&#8217;\u0131n\u0131 ba\u011f\u0131ml\u0131l\u0131k olarak ekleyin.<br \/>\n    *   <strong>Python \u00d6rne\u011fi:<\/strong><\/p>\n<pre><code class=\"language-bash\">pip install opentelemetry-api opentelemetry-sdk opentelemetry-exporter-jaeger<\/code><\/pre>\n<p>    *   <strong>Java \u00d6rne\u011fi (Maven):<\/strong><\/p>\n<pre><code class=\"language-xml\"><dependency>\n            <groupId>io.opentelemetry<\/groupId>\n            <artifactId>opentelemetry-api<\/artifactId>\n            <version>1.x.x<\/version>\n        <\/dependency>\n        <dependency>\n            <groupId>io.opentelemetry<\/groupId>\n            <artifactId>opentelemetry-sdk<\/artifactId>\n            <version>1.x.x<\/version>\n        <\/dependency>\n        <dependency>\n            <groupId>io.opentelemetry<\/groupId>\n            <artifactId>opentelemetry-exporter-jaeger<\/artifactId>\n            <version>1.x.x<\/version>\n        <\/dependency><\/code><\/pre>\n<p>2.  <strong>Tracer&#8217;\u0131 Ba\u015flatma ve Yap\u0131land\u0131rma:<\/strong> Uygulaman\u0131z\u0131n ba\u015flang\u0131c\u0131nda bir <code>Tracer<\/code> \u00f6rne\u011fi olu\u015fturun ve onu Jaeger Agent&#8217;a veya Collector&#8217;a g\u00f6nderecek \u015fekilde yap\u0131land\u0131r\u0131n. Genellikle, Jaeger Agent&#8217;\u0131n varsay\u0131lan UDP portu olan <code>6831<\/code>&#8216;e g\u00f6nderim yap\u0131l\u0131r.<\/p>\n<p>    *   <strong>Python \u00d6rne\u011fi (Basit):<\/strong><\/p>\n<pre><code class=\"language-python\">from opentelemetry import trace\n        from opentelemetry.sdk.resources import Resource\n        from opentelemetry.sdk.trace import TracerProvider\n        from opentelemetry.sdk.trace.export import ConsoleSpanExporter, SimpleSpanProcessor\n        from opentelemetry.exporter.jaeger.proto.thrift import JaegerExporter\n\n        # Uygulama ad\u0131n\u0131 belirtin\n        resource = Resource.create({\"service.name\": \"my-python-service\"})\n\n        # TracerProvider'\u0131 olu\u015ftur\n        trace.set_tracer_provider(TracerProvider(resource=resource))\n\n        # Jaeger Exporter'\u0131 yap\u0131land\u0131r (Agent'a g\u00f6ndermek i\u00e7in)\n        jaeger_exporter = JaegerExporter(\n            agent_host_name=\"jaeger-agent.tracing.svc.cluster.local\", # Kubernetes servis ad\u0131\n            agent_port=6831,\n        )\n\n        # Yay\u0131l\u0131mlar\u0131 i\u015flemek i\u00e7in SimpleSpanProcessor kullan\n        trace.get_tracer_provider().add_span_processor(\n            SimpleSpanProcessor(jaeger_exporter)\n        )\n\n        # Tracer'\u0131 al\n        tracer = trace.get_tracer(__name__)\n\n        # \u00d6rnek bir i\u015flem izleme\n        with tracer.start_as_current_span(\"my-operation\"):\n            print(\"Doing some work...\")\n            with tracer.start_as_current_span(\"sub-operation\"):\n                print(\"Doing sub-work...\")<\/code><\/pre>\n<p>    *   <strong>Java \u00d6rne\u011fi (Basit):<\/strong><\/p>\n<pre><code class=\"language-java\">import io.opentelemetry.api.OpenTelemetry;\n        import io.opentelemetry.api.trace.Span;\n        import io.opentelemetry.api.trace.Tracer;\n        import io.opentelemetry.sdk.OpenTelemetrySdk;\n        import io.opentelemetry.sdk.resources.Resource;\n        import io.opentelemetry.sdk.trace.SdkTracerProvider;\n        import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;\n        import io.opentelemetry.exporter.jaeger.JaegerGrpcSpanExporter;\n\n        import static io.opentelemetry.semconv.resource.attributes.ResourceAttributes.SERVICE_NAME;\n\n        public class MyApp {\n            private static final String SERVICE_NAME_VALUE = \"my-java-service\";\n\n            public static void main(String[] args) {\n                \/\/ Kaynaklar\u0131 tan\u0131mla (servis ad\u0131)\n                Resource serviceNameResource = Resource.getDefault().toBuilder()\n                        .put(SERVICE_NAME, SERVICE_NAME_VALUE)\n                        .build();\n\n                \/\/ Jaeger Exporter'\u0131 yap\u0131land\u0131r (Collector'a g\u00f6ndermek i\u00e7in gRPC kullanabilir)\n                \/\/ E\u011fer Agent'a g\u00f6nderecekseniz Thrift over UDP kullanman\u0131z gerekir.\n                JaegerGrpcSpanExporter jaegerExporter = JaegerGrpcSpanExporter.builder()\n                        .setEndpoint(\"http:\/\/jaeger-collector.tracing.svc.cluster.local:14250\") \/\/ GRPC port\n                        .build();\n\n                \/\/ TracerProvider'\u0131 olu\u015ftur\n                SdkTracerProvider tracerProvider = SdkTracerProvider.builder()\n                        .setResource(serviceNameResource)\n                        .addSpanProcessor(SimpleSpanProcessor.create(jaegerExporter))\n                        .build();\n\n                OpenTelemetry openTelemetry = OpenTelemetrySdk.builder()\n                        .setTracerProvider(tracerProvider)\n                        .buildAndRegisterGlobal();\n\n                Tracer tracer = openTelemetry.getTracer(MyApp.class.getName());\n\n                \/\/ \u00d6rnek bir i\u015flem izleme\n                Span parentSpan = tracer.spanBuilder(\"my-parent-operation\").startSpan();\n                try (io.opentelemetry.api.trace.Scope scope = parentSpan.makeCurrent()) {\n                    System.out.println(\"Doing some parent work...\");\n                    Span childSpan = tracer.spanBuilder(\"my-child-operation\").startSpan();\n                    try (io.opentelemetry.api.trace.Scope childScope = childSpan.makeCurrent()) {\n                        System.out.println(\"Doing some child work...\");\n                    } finally {\n                        childSpan.end();\n                    }\n                } finally {\n                    parentSpan.end();\n                }\n\n                \/\/ Uygulama kapan\u0131rken exporter'\u0131 kapat\n                tracerProvider.close();\n            }\n        }<\/code><\/pre>\n<p>3.  <strong>\u0130stekler Aras\u0131 Ba\u011flam Yay\u0131l\u0131m\u0131 (Context Propagation):<\/strong> Mikroservisler aras\u0131nda bir istek ge\u00e7erken, izleme ba\u011flam\u0131n\u0131n (trace ID, span ID) HTTP ba\u015fl\u0131klar\u0131, gRPC meta verileri veya mesaj kuyru\u011fu \u00f6zellikleri arac\u0131l\u0131\u011f\u0131yla yay\u0131lmas\u0131 \u00e7ok \u00f6nemlidir. OpenTelemetry k\u00fct\u00fcphaneleri genellikle pop\u00fcler web \u00e7er\u00e7eveleri ve RPC k\u00fct\u00fcphaneleri i\u00e7in otomatik enstr\u00fcmantasyon sa\u011flar. Bu, manuel kod yazmadan ba\u011flam yay\u0131l\u0131m\u0131n\u0131 otomatik olarak halleder. E\u011fer otomatik enstr\u00fcmantasyon m\u00fcmk\u00fcn de\u011filse, <code>W3C Trace Context<\/code> veya <code>B3<\/code> ba\u015fl\u0131klar\u0131n\u0131 manuel olarak eklemeniz gerekebilir.<\/p>\n<h4>Sidecar Enjeksiyonu ile Jaeger Agent<\/h4>\n<p>Kubernetes&#8217;te Jaeger Agent&#8217;\u0131 uygulamalar\u0131n\u0131zla birlikte \u00e7al\u0131\u015ft\u0131rman\u0131n en iyi yolu, her uygulama pod&#8217;una bir sidecar kapsay\u0131c\u0131 olarak eklemektir. Bu, uygulaman\u0131n Agent&#8217;a <code>localhost<\/code> \u00fczerinden ula\u015fmas\u0131n\u0131 sa\u011flar ve a\u011f yap\u0131land\u0131rmas\u0131n\u0131 basitle\u015ftirir.<\/p>\n<p>Bunu manuel olarak yapabilece\u011finiz gibi, Jaeger Operator veya bir mutating admission webhook kullanarak otomatik olarak da yapabilirsiniz.<\/p>\n<p><strong>Manuel Sidecar Ekleme \u00d6rne\u011fi (Deployment YAML):<\/strong><\/p>\n<pre><code class=\"language-yaml\">apiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: my-service\n  namespace: default\nspec:\n  selector:\n    matchLabels:\n      app: my-service\n  template:\n    metadata:\n      labels:\n        app: my-service\n    spec:\n      containers:\n      - name: my-service-app\n        image: my-docker-repo\/my-service:latest\n        ports:\n        - containerPort: 8080\n        env:\n        - name: JAEGER_AGENT_HOST\n          valueFrom:\n            fieldRef:\n              fieldPath: status.hostIP # DaemonSet kullan\u0131l\u0131yorsa d\u00fc\u011f\u00fcm IP'sini al\n        - name: JAEGER_AGENT_PORT\n          value: \"6831\"\n        # ... di\u011fer uygulama yap\u0131land\u0131rmalar\u0131 ...\n      - name: jaeger-agent\n        image: jaegertracing\/jaeger-agent:latest\n        command: [\"\/usr\/bin\/agent\", \"--collector.host-port=jaeger-collector.tracing.svc.cluster.local:14268\"]\n        ports:\n        - containerPort: 6831 # UDP Thrift\n          protocol: UDP\n        - containerPort: 6832 # UDP Binary\n          protocol: UDP\n        - containerPort: 5778 # HTTP Configuration\n        resources:\n          limits:\n            memory: \"128Mi\"\n            cpu: \"100m\"\n          requests:\n            memory: \"64Mi\"\n            cpu: \"50m\"<\/code><\/pre>\n<p><strong>Not:<\/strong> E\u011fer <code>DaemonSet<\/code> olarak kurdu\u011funuz Jaeger Agent&#8217;\u0131 kullanacaksan\u0131z, <code>JAEGER_AGENT_HOST<\/code> ortam de\u011fi\u015fkenini pod&#8217;un \u00e7al\u0131\u015ft\u0131\u011f\u0131 d\u00fc\u011f\u00fcm\u00fcn IP&#8217;sine ayarlaman\u0131z gerekir. Ancak sidecar olarak Agent&#8217;\u0131 do\u011frudan pod&#8217;un i\u00e7ine eklemek, uygulaman\u0131n <code>localhost<\/code> \u00fczerinden Agent&#8217;a ula\u015fmas\u0131n\u0131 sa\u011flayaca\u011f\u0131 i\u00e7in <code>JAEGER_AGENT_HOST<\/code>&#8216;u <code>localhost<\/code> olarak ayarlamak daha basit ve g\u00fcvenilirdir.<\/p>\n<pre><code class=\"language-yaml\"># Sidecar olarak Jaeger Agent\n<h2>...<\/h2>\n      - name: my-service-app\n        image: my-docker-repo\/my-service:latest\n        ports:\n        - containerPort: 8080\n        env:\n        - name: JAEGER_AGENT_HOST\n          value: \"localhost\" # Sidecar Agent'a localhost \u00fczerinden eri\u015fim\n        - name: JAEGER_AGENT_PORT\n          value: \"6831\"\n        # ...\n      - name: jaeger-agent\n        image: jaegertracing\/jaeger-agent:latest\n        # Sidecar Agent'lar genellikle Collector'a do\u011frudan g\u00f6nderecek \u015fekilde yap\u0131land\u0131r\u0131l\u0131r.\n        command: [\"\/usr\/bin\/agent\", \"--collector.host-port=jaeger-collector.tracing.svc.cluster.local:14268\"]\n        ports:\n        - containerPort: 6831 # UDP Thrift\n          protocol: UDP\n        # ...<\/code><\/pre>\n<p>Bu yap\u0131land\u0131rma, uygulaman\u0131z\u0131n izleme verilerini <code>localhost:6831<\/code> adresindeki Jaeger Agent sidecar&#8217;\u0131na g\u00f6ndermesini sa\u011flar. Sidecar Agent da bu verileri Kubernetes k\u00fcmesindeki Jaeger Collector&#8217;a iletir.<\/p>\n<h3>\u0130zleme Verilerinin G\u00f6rselle\u015ftirilmesi ve Analizi<\/h3>\n<p>Uygulamalar\u0131n\u0131z izleme verilerini g\u00f6ndermeye ba\u015flad\u0131ktan sonra, Jaeger UI&#8217;y\u0131 kullanarak bu verileri g\u00f6rselle\u015ftirebilir ve analiz edebilirsiniz.<\/p>\n<h4>Jaeger UI Kullan\u0131m\u0131<\/h4>\n<p>Jaeger UI&#8217;ya eri\u015fti\u011finizde (genellikle <code>http:\/\/localhost:16686<\/code> \u00fczerinden <code>port-forward<\/code> ile), sol \u00fcstte bir &#8220;Service&#8221; se\u00e7ici ve \u00e7e\u015fitli filtre se\u00e7enekleri (operation, tags, min\/max duration, limit) bulunur.<\/p>\n<p>1.  <strong>Servis Se\u00e7imi:<\/strong> \u0130zlemek istedi\u011finiz servisi &#8220;Service&#8221; a\u00e7\u0131l\u0131r men\u00fcs\u00fcnden se\u00e7in.<br \/>\n2.  <strong>Operasyon Se\u00e7imi:<\/strong> \u0130ste\u011fe ba\u011fl\u0131 olarak, belirli bir operasyonu (\u00f6rne\u011fin, <code>\/users\/{id}<\/code> GET iste\u011fi) se\u00e7ebilirsiniz.<br \/>\n3.  <strong>Filtreler:<\/strong> S\u00fcre, etiketler (\u00f6rne\u011fin, <code>http.status_code=500<\/code> veya <code>error=true<\/code>) gibi ek filtreler uygulayarak araman\u0131z\u0131 daraltabilirsiniz.<br \/>\n4.  <strong>\u0130zlemeleri Bul:<\/strong> &#8220;Find Traces&#8221; d\u00fc\u011fmesine t\u0131klay\u0131n.<\/p>\n<p>Arama sonu\u00e7lar\u0131, her bir izlemenin \u00f6zetini (hizmet ad\u0131, operasyon, s\u00fcre, ba\u015flang\u0131\u00e7 zaman\u0131) listeleyecektir. Bir izlemeye t\u0131klad\u0131\u011f\u0131n\u0131zda, o izlemenin detayl\u0131 g\u00f6r\u00fcn\u00fcm\u00fcne y\u00f6nlendirilirsiniz.<\/p>\n<p><strong>Trace Waterfall View (\u015eelale G\u00f6r\u00fcn\u00fcm\u00fc):<\/strong> Bu g\u00f6r\u00fcn\u00fcm, bir iste\u011fin sisteminizdeki t\u00fcm servisler ve i\u015flemler aras\u0131nda nas\u0131l yay\u0131ld\u0131\u011f\u0131n\u0131 zaman \u00e7izelgesi \u00fczerinde g\u00f6rselle\u015ftirir. Her bir \u00e7ubuk bir yay\u0131l\u0131m\u0131 temsil eder ve rengi hizmeti belirtir. Bu sayede:<\/p>\n<p>*   <strong>Performans Darbo\u011fazlar\u0131:<\/strong> Hangi yay\u0131l\u0131m\u0131n veya servisin en uzun s\u00fcrd\u00fc\u011f\u00fcn\u00fc kolayca g\u00f6rebilirsiniz. Uzun s\u00fcren bir veritaban\u0131 sorgusu veya harici bir API \u00e7a\u011fr\u0131s\u0131 hemen dikkat \u00e7ekecektir.<br \/>\n*   <strong>Hata Tespiti:<\/strong> Hatal\u0131 yay\u0131l\u0131mlar genellikle k\u0131rm\u0131z\u0131 renkle veya bir hata etiketiyle i\u015faretlenir. Hatan\u0131n tam olarak nerede meydana geldi\u011fini ve hangi servisleri etkiledi\u011fini h\u0131zla belirleyebilirsiniz.<br \/>\n*   <strong>Servis Ba\u011f\u0131ml\u0131l\u0131klar\u0131:<\/strong> Hangi servislerin birbirini \u00e7a\u011f\u0131rd\u0131\u011f\u0131n\u0131 ve bu \u00e7a\u011fr\u0131lar\u0131n s\u0131ras\u0131n\u0131 net bir \u015fekilde anlayabilirsiniz.<\/p>\n<p>Her yay\u0131l\u0131ma t\u0131klayarak o yay\u0131l\u0131m\u0131n detaylar\u0131n\u0131 (etiketler, g\u00fcnl\u00fckler, s\u00fcre\u00e7 bilgileri) g\u00f6r\u00fcnt\u00fcleyebilirsiniz. Bu bilgiler, hata ay\u0131klama s\u0131ras\u0131nda \u00e7ok de\u011ferli olabilir.<\/p>\n<p><strong>Dependency Graph (Ba\u011f\u0131ml\u0131l\u0131k Grafi\u011fi):<\/strong> Jaeger UI ayr\u0131ca servisler aras\u0131 ba\u011f\u0131ml\u0131l\u0131klar\u0131 g\u00f6steren bir grafik de sunar. Bu grafik, uygulaman\u0131z\u0131n mimarisini anlamak ve potansiyel tek hata noktalar\u0131n\u0131 veya a\u015f\u0131r\u0131 ba\u011f\u0131ml\u0131l\u0131klar\u0131 tespit etmek i\u00e7in faydal\u0131d\u0131r.<\/p>\n<h3>Geli\u015fmi\u015f Konular ve En \u0130yi Uygulamalar<\/h3>\n<p>Da\u011f\u0131t\u0131k izlemeyi \u00fcretim ortam\u0131nda etkin bir \u015fekilde kullanmak i\u00e7in baz\u0131 geli\u015fmi\u015f konular\u0131 ve en iyi uygulamalar\u0131 g\u00f6z \u00f6n\u00fcnde bulundurmak \u00f6nemlidir.<\/p>\n<h4>\u00d6rnekleme Stratejileri (Sampling Strategies)<\/h4>\n<p>Y\u00fcksek trafikli sistemlerde her iste\u011fi izlemek, hem performans hem de depolama maliyetleri a\u00e7\u0131s\u0131ndan s\u00fcrd\u00fcr\u00fclemez olabilir. Bu nedenle \u00f6rnekleme (sampling) stratejileri kullan\u0131l\u0131r. Jaeger, \u00e7e\u015fitli \u00f6rnekleme stratejilerini destekler:<\/p>\n<p>*   <strong>Probabilistic Sampling (Olas\u0131l\u0131ksal \u00d6rnekleme):<\/strong> Belirli bir olas\u0131l\u0131kla (\u00f6rne\u011fin, %0.1) izlemelerin bir k\u0131sm\u0131n\u0131 yakalar. Y\u00fcksek hacimli trafik i\u00e7in iyi bir denge sa\u011flar.<br \/>\n*   <strong>Constant Sampling (Sabit \u00d6rnekleme):<\/strong> Her zaman t\u00fcm izlemeleri yakalar veya hi\u00e7birini yakalamaz. Genellikle geli\u015ftirme\/test ortamlar\u0131nda veya kritik servisler i\u00e7in kullan\u0131l\u0131r.<br \/>\n*   <strong>Rate Limiting Sampling (Oran S\u0131n\u0131rlamal\u0131 \u00d6rnekleme):<\/strong> Belirli bir zaman diliminde maksimum say\u0131da izlemeyi yakalar. Bu, sistemin a\u015f\u0131r\u0131 y\u00fcklenmesini \u00f6nlerken yeterli veri toplaman\u0131za olanak tan\u0131r.<\/p>\n<p>\u00d6rnekleme stratejileri genellikle Jaeger Agent veya Collector \u00fczerinden yap\u0131land\u0131r\u0131l\u0131r ve istemci k\u00fct\u00fcphanelerine iletilir. \u00dcretim ortamlar\u0131nda, genellikle olas\u0131l\u0131ksal \u00f6rnekleme ile ba\u015flan\u0131r ve kritik hata durumlar\u0131 veya belirli kullan\u0131c\u0131lar i\u00e7in daha y\u00fcksek \u00f6rnekleme oranlar\u0131 uygulan\u0131r.<\/p>\n<h4>Ba\u011flam Yay\u0131l\u0131m\u0131 (Context Propagation)<\/h4>\n<p>Do\u011fru ba\u011flam yay\u0131l\u0131m\u0131, da\u011f\u0131t\u0131k izlemenin kalbidir. Bir istek bir servisten di\u011ferine ge\u00e7erken, izleme kimli\u011fi (trace ID) ve yay\u0131l\u0131m kimli\u011fi (span ID) gibi bilgiler HTTP ba\u015fl\u0131klar\u0131 (\u00f6rne\u011fin, <code>traceparent<\/code>, <code>tracestate<\/code>, <code>x-b3-traceid<\/code>, <code>x-b3-spanid<\/code>) veya gRPC meta verileri arac\u0131l\u0131\u011f\u0131yla ta\u015f\u0131nmal\u0131d\u0131r. OpenTelemetry k\u00fct\u00fcphaneleri, yayg\u0131n protokoller i\u00e7in bu yay\u0131l\u0131m\u0131 otomatik olarak y\u00f6netir. Ancak manuel olarak yazd\u0131\u011f\u0131n\u0131z veya \u00f6zel protokoller kullanan kodlarda, bu ba\u015fl\u0131klar\u0131 kendiniz eklemeniz ve ayr\u0131\u015ft\u0131rman\u0131z gerekebilir. Tutarl\u0131 bir ba\u011flam yay\u0131l\u0131m\u0131 olmadan, izlemeler par\u00e7al\u0131 g\u00f6r\u00fcn\u00fcr ve u\u00e7tan uca g\u00f6r\u00fcn\u00fcrl\u00fck sa\u011flanamaz.<\/p>\n<h4>Performans ve \u00d6l\u00e7eklenebilirlik<\/h4>\n<p>Kubernetes \u00fczerinde Jaeger&#8217;\u0131 \u00f6l\u00e7eklendirirken dikkat edilmesi gerekenler:<\/p>\n<p>*   <strong>Jaeger Collector:<\/strong> Gelen yay\u0131l\u0131m trafi\u011fini i\u015flemek i\u00e7in birden fazla Collector pod&#8217;u \u00e7al\u0131\u015ft\u0131r\u0131n. Bir y\u00fck dengeleyici (Load Balancer) veya Kubernetes Service, trafi\u011fi bu pod&#8217;lar aras\u0131nda da\u011f\u0131tabilir.<br \/>\n*   <strong>Storage Backend:<\/strong> Elasticsearch veya Cassandra gibi depolama arka u\u00e7lar\u0131n\u0131n da kendi ba\u015f\u0131na \u00f6l\u00e7eklenebilir ve performansl\u0131 olmas\u0131 gerekir. Disk IOPS, CPU ve bellek kaynaklar\u0131 izleme verilerinin hacmine g\u00f6re ayarlanmal\u0131d\u0131r.<br \/>\n*   <strong>Kaynak Atamas\u0131:<\/strong> Jaeger bile\u015fenleri i\u00e7in Kubernetes kaynak istekleri (requests) ve limitleri (limits) do\u011fru ayarlanmal\u0131d\u0131r. \u00d6zellikle Collector ve Query bile\u015fenleri, y\u00fcksek CPU ve bellek t\u00fcketimine sahip olabilir.<br \/>\n*   <strong>A\u011f Yap\u0131land\u0131rmas\u0131:<\/strong> Uygulamalar ve Jaeger Agent&#8217;lar aras\u0131ndaki a\u011f gecikmesini en aza indirmek i\u00e7in sidecar yakla\u015f\u0131m\u0131 tercih edilmelidir. Agent&#8217;lar ve Collector&#8217;lar aras\u0131ndaki a\u011f trafi\u011fi de optimize edilmelidir.<\/p>\n<h4>G\u00fcvenlik<\/h4>\n<p>\u00dcretim ortam\u0131nda Jaeger&#8217;\u0131 g\u00fcvence alt\u0131na almak \u00f6nemlidir:<\/p>\n<p>*   <strong>Eri\u015fim Kontrol\u00fc:<\/strong> Jaeger UI&#8217;ya eri\u015fimi k\u0131s\u0131tlay\u0131n. Bir Ingress Controller ve kimlik do\u011frulama\/yetkilendirme (\u00f6rne\u011fin, OAuth2 Proxy) kullanarak UI&#8217;y\u0131 koruyun.<br \/>\n*   <strong>A\u011f Politikalar\u0131:<\/strong> Kubernetes a\u011f politikalar\u0131 (Network Policies) kullanarak Jaeger bile\u015fenleri aras\u0131ndaki ileti\u015fimi k\u0131s\u0131tlay\u0131n. Yaln\u0131zca gerekli portlar\u0131n ve kaynaklar\u0131n eri\u015fimine izin verin.<br \/>\n*   <strong>TLS\/SSL:<\/strong> \u0130stemci uygulamalar\u0131 ile Collector&#8217;lar ve Collector&#8217;lar ile depolama arka u\u00e7lar\u0131 aras\u0131ndaki ileti\u015fimi TLS\/SSL ile \u015fifreleyin.<br \/>\n*   <strong>Kimlik Bilgileri:<\/strong> Depolama arka u\u00e7lar\u0131na eri\u015fmek i\u00e7in kullan\u0131lan kimlik bilgilerini (\u00f6rne\u011fin, Elasticsearch kullan\u0131c\u0131 ad\u0131\/parolas\u0131) Kubernetes Secret&#8217;larda saklay\u0131n ve bunlar\u0131 Collector pod&#8217;lar\u0131na g\u00fcvenli bir \u015fekilde enjekte edin.<\/p>\n<h4>OpenTelemetry ile Gelecek<\/h4>\n<p>OpenTelemetry, izleme, metrikler ve g\u00fcnl\u00fckler i\u00e7in birle\u015fik bir standart sunarak telemetri alan\u0131nda gelece\u011fin \u00e7\u00f6z\u00fcm\u00fcd\u00fcr. Jaeger, OpenTelemetry Collector ile birlikte \u00e7al\u0131\u015fabilir ve OpenTelemetry protokol\u00fcn\u00fc (OTLP) destekler. Uygulamalar\u0131n\u0131z\u0131 OpenTelemetry ile enstr\u00fcmante etmek, gelecekte farkl\u0131 izleme arka u\u00e7lar\u0131na (\u00f6rne\u011fin, Prometheus, Grafana Tempo, Azure Application Insights) ge\u00e7i\u015f yapma esnekli\u011fi sa\u011flar. OpenTelemetry Collector, yay\u0131l\u0131mlar\u0131 al\u0131p i\u015fleyerek bunlar\u0131 Jaeger&#8217;a veya di\u011fer arka u\u00e7lara g\u00f6nderebilir. Bu, uygulama kodunuzu belirli bir sat\u0131c\u0131ya kilitlemekten ka\u00e7\u0131nman\u0131z\u0131 sa\u011flar.<\/p>\n<h3>Sorun Giderme ve Yayg\u0131n Hatalar<\/h3>\n<p>Da\u011f\u0131t\u0131k izleme uygularken kar\u015f\u0131la\u015fabilece\u011finiz baz\u0131 yayg\u0131n sorunlar ve bunlar\u0131n \u00e7\u00f6z\u00fcmleri:<\/p>\n<p>*   <strong>\u0130zlemeler G\u00f6r\u00fcnm\u00fcyor:<\/strong><br \/>\n    *   <strong>Uygulama Enstr\u00fcmantasyonu:<\/strong> Uygulaman\u0131z\u0131n izleme k\u00fct\u00fcphanelerini do\u011fru \u015fekilde entegre etti\u011finden ve tracer&#8217;\u0131 ba\u015flatt\u0131\u011f\u0131ndan emin olun.<br \/>\n    *   <strong>Agent\/Collector Ba\u011flant\u0131s\u0131:<\/strong> Uygulaman\u0131n Jaeger Agent&#8217;a (veya do\u011frudan Collector&#8217;a) ula\u015fabildi\u011finden emin olun. A\u011f politikalar\u0131n\u0131 ve portlar\u0131 kontrol edin.<br \/>\n    *   <strong>\u00d6rnekleme Oran\u0131:<\/strong> \u00d6rnekleme oran\u0131 \u00e7ok d\u00fc\u015f\u00fck olabilir. Geli\u015ftirme\/test ortamlar\u0131nda \u00f6rneklemeyi kapat\u0131n veya %100&#8217;e ayarlay\u0131n.<br \/>\n    *   <strong>Kubernetes Loglar\u0131:<\/strong> Jaeger Agent, Collector ve Query pod&#8217;lar\u0131n\u0131n g\u00fcnl\u00fcklerini kontrol edin. Ba\u011flant\u0131 hatalar\u0131 veya yap\u0131land\u0131rma sorunlar\u0131 orada g\u00f6r\u00fcnebilir.<br \/>\n*   <strong>Eksik veya Par\u00e7al\u0131 \u0130zlemeler:<\/strong><br \/>\n    *   <strong>Ba\u011flam Yay\u0131l\u0131m\u0131:<\/strong> Servisler aras\u0131nda izleme ba\u011flam\u0131n\u0131n (trace ID, span ID) do\u011fru \u015fekilde yay\u0131ld\u0131\u011f\u0131ndan emin olun. \u00d6zellikle HTTP ba\u015fl\u0131klar\u0131n\u0131n veya gRPC meta verilerinin t\u00fcm servisler aras\u0131nda iletildi\u011fini do\u011frulay\u0131n.<br \/>\n    *   <strong>Asenkron \u0130\u015flemler:<\/strong> Mesaj kuyruklar\u0131 veya asenkron g\u00f6revler kullan\u0131l\u0131yorsa, izleme ba\u011flam\u0131n\u0131n bu asenkron i\u015flemlere de do\u011fru \u015fekilde aktar\u0131ld\u0131\u011f\u0131ndan emin olun.<br \/>\n*   <strong>Performans Sorunlar\u0131 (Jaeger&#8217;\u0131n Kendisi):<\/strong><br \/>\n    *   <strong>Depolama Performans\u0131:<\/strong> Elasticsearch veya Cassandra gibi depolama arka ucunuzun performans\u0131n\u0131 kontrol edin. Disk IOPS, CPU kullan\u0131m\u0131 gibi metrikleri izleyin.<br \/>\n    *   <strong>Collector Y\u00fck\u00fc:<\/strong> Collector pod&#8217;lar\u0131n\u0131n CPU ve bellek kullan\u0131m\u0131n\u0131 izleyin. Y\u00fcksekse, daha fazla Collector pod&#8217;u eklemeyi veya kaynak limitlerini art\u0131rmay\u0131 d\u00fc\u015f\u00fcn\u00fcn.<br \/>\n    *   <strong>\u00d6rnekleme:<\/strong> Y\u00fcksek hacimli izleme verilerini i\u015fliyorsan\u0131z, \u00f6rnekleme oranlar\u0131n\u0131 ayarlayarak gelen trafi\u011fi azalt\u0131n.<br \/>\n*   <strong>Jaeger UI&#8217;ya Eri\u015fim Sorunlar\u0131:<\/strong><br \/>\n    *   <strong>Port Forwarding\/Ingress:<\/strong> Jaeger Query servisine do\u011fru \u015fekilde eri\u015fti\u011finizden emin olun (port-forward veya Ingress yap\u0131land\u0131rmas\u0131).<br \/>\n    *   <strong>Kubernetes Servisleri:<\/strong> Jaeger Query servisinin \u00e7al\u0131\u015f\u0131r durumda oldu\u011funu ve do\u011fru portta dinledi\u011fini do\u011frulay\u0131n.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Kubernetes \u00fczerinde Jaeger ile da\u011f\u0131t\u0131k izleme uygulamak, mikroservis mimarilerinizin karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 y\u00f6netmek ve derinlemesine g\u00f6r\u00fcn\u00fcrl\u00fck elde etmek i\u00e7in vazge\u00e7ilmez bir ara\u00e7t\u0131r. Bu makalede, Jaeger&#8217;\u0131n temel bile\u015fenlerini, Kubernetes \u00fczerinde Helm ile nas\u0131l kurulaca\u011f\u0131n\u0131, uygulamalar\u0131n OpenTelemetry kullanarak izleme verilerini nas\u0131l entegre edece\u011fini ve bu verilerin Jaeger UI arac\u0131l\u0131\u011f\u0131yla nas\u0131l g\u00f6rselle\u015ftirilip analiz edilece\u011fini detayl\u0131 bir \u015fekilde ele ald\u0131k.<\/p>\n<p>Da\u011f\u0131t\u0131k izleme, performans darbo\u011fazlar\u0131n\u0131 h\u0131zl\u0131ca tespit etmenize, hata ay\u0131klama s\u00fcre\u00e7lerini h\u0131zland\u0131rman\u0131za ve servisler aras\u0131 ba\u011f\u0131ml\u0131l\u0131klar\u0131 daha iyi anlaman\u0131za olanak tan\u0131r. \u00d6rnekleme stratejileri, ba\u011flam yay\u0131l\u0131m\u0131 ve g\u00fcvenlik gibi en iyi uygulamalar\u0131 takip ederek, \u00fcretim ortamlar\u0131n\u0131zda sa\u011flam ve \u00f6l\u00e7eklenebilir bir izleme \u00e7\u00f6z\u00fcm\u00fc olu\u015fturabilirsiniz. OpenTelemetry&#8217;nin benimsenmesiyle, gelecekteki telemetri ihtiya\u00e7lar\u0131n\u0131z i\u00e7in esnek ve standartlara uygun bir temel atm\u0131\u015f olursunuz. Mikroservislerinizin sa\u011fl\u0131\u011f\u0131n\u0131 ve performans\u0131n\u0131 g\u00fcvence alt\u0131na almak i\u00e7in da\u011f\u0131t\u0131k izlemeyi sisteminizin ayr\u0131lmaz bir par\u00e7as\u0131 haline getirmek, modern bulut tabanl\u0131 uygulamalar\u0131n ba\u015far\u0131s\u0131 i\u00e7in kritik \u00f6neme sahiptir.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Kubernetes \u00dczerinde Jaeger ile Da\u011f\u0131t\u0131k \u0130zleme (Distributed Tracing) Nas\u0131l Uygulan\u0131r?\nModern mikroservis mimarileri, uygulamalar\u0131n geli\u015ftiril","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1328],"tags":[],"class_list":{"0":"post-40144","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-bash","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Kubernetes \u00dczerinde Jaeger ile Da\u011f\u0131t\u0131k \u0130zleme (Distributed Tracing) Nas\u0131l Uygulan\u0131r? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/kubernetes-uzerinde-jaeger-ile-dagitik-izleme-distributed-tracing-nasil-uygulanir\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kubernetes \u00dczerinde Jaeger ile Da\u011f\u0131t\u0131k \u0130zleme (Distributed Tracing) Nas\u0131l Uygulan\u0131r?\" \/>\n<meta property=\"og:description\" content=\"Kubernetes \u00dczerinde Jaeger ile Da\u011f\u0131t\u0131k \u0130zleme (Distributed Tracing) Nas\u0131l Uygulan\u0131r? Modern mikroservis mimarileri, uygulamalar\u0131n geli\u015ftiril\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/kubernetes-uzerinde-jaeger-ile-dagitik-izleme-distributed-tracing-nasil-uygulanir\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-24T16:40:59+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"22 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kubernetes-uzerinde-jaeger-ile-dagitik-izleme-distributed-tracing-nasil-uygulanir\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kubernetes-uzerinde-jaeger-ile-dagitik-izleme-distributed-tracing-nasil-uygulanir\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Kubernetes \u00dczerinde Jaeger ile Da\u011f\u0131t\u0131k \u0130zleme (Distributed Tracing) Nas\u0131l Uygulan\u0131r?\",\"datePublished\":\"2026-02-24T16:40:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kubernetes-uzerinde-jaeger-ile-dagitik-izleme-distributed-tracing-nasil-uygulanir\/\"},\"wordCount\":3694,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Bash\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kubernetes-uzerinde-jaeger-ile-dagitik-izleme-distributed-tracing-nasil-uygulanir\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kubernetes-uzerinde-jaeger-ile-dagitik-izleme-distributed-tracing-nasil-uygulanir\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/kubernetes-uzerinde-jaeger-ile-dagitik-izleme-distributed-tracing-nasil-uygulanir\/\",\"name\":\"Kubernetes \u00dczerinde Jaeger ile Da\u011f\u0131t\u0131k \u0130zleme (Distributed Tracing) Nas\u0131l Uygulan\u0131r? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-02-24T16:40:59+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kubernetes-uzerinde-jaeger-ile-dagitik-izleme-distributed-tracing-nasil-uygulanir\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kubernetes-uzerinde-jaeger-ile-dagitik-izleme-distributed-tracing-nasil-uygulanir\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kubernetes-uzerinde-jaeger-ile-dagitik-izleme-distributed-tracing-nasil-uygulanir\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kubernetes \u00dczerinde Jaeger ile Da\u011f\u0131t\u0131k \u0130zleme (Distributed Tracing) Nas\u0131l Uygulan\u0131r?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Kubernetes \u00dczerinde Jaeger ile Da\u011f\u0131t\u0131k \u0130zleme (Distributed Tracing) Nas\u0131l Uygulan\u0131r? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/kubernetes-uzerinde-jaeger-ile-dagitik-izleme-distributed-tracing-nasil-uygulanir\/","og_locale":"tr_TR","og_type":"article","og_title":"Kubernetes \u00dczerinde Jaeger ile Da\u011f\u0131t\u0131k \u0130zleme (Distributed Tracing) Nas\u0131l Uygulan\u0131r?","og_description":"Kubernetes \u00dczerinde Jaeger ile Da\u011f\u0131t\u0131k \u0130zleme (Distributed Tracing) Nas\u0131l Uygulan\u0131r? Modern mikroservis mimarileri, uygulamalar\u0131n geli\u015ftiril","og_url":"https:\/\/fatihsoysal.com\/blog\/kubernetes-uzerinde-jaeger-ile-dagitik-izleme-distributed-tracing-nasil-uygulanir\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-24T16:40:59+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"22 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/kubernetes-uzerinde-jaeger-ile-dagitik-izleme-distributed-tracing-nasil-uygulanir\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/kubernetes-uzerinde-jaeger-ile-dagitik-izleme-distributed-tracing-nasil-uygulanir\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Kubernetes \u00dczerinde Jaeger ile Da\u011f\u0131t\u0131k \u0130zleme (Distributed Tracing) Nas\u0131l Uygulan\u0131r?","datePublished":"2026-02-24T16:40:59+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/kubernetes-uzerinde-jaeger-ile-dagitik-izleme-distributed-tracing-nasil-uygulanir\/"},"wordCount":3694,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Bash"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/kubernetes-uzerinde-jaeger-ile-dagitik-izleme-distributed-tracing-nasil-uygulanir\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/kubernetes-uzerinde-jaeger-ile-dagitik-izleme-distributed-tracing-nasil-uygulanir\/","url":"https:\/\/fatihsoysal.com\/blog\/kubernetes-uzerinde-jaeger-ile-dagitik-izleme-distributed-tracing-nasil-uygulanir\/","name":"Kubernetes \u00dczerinde Jaeger ile Da\u011f\u0131t\u0131k \u0130zleme (Distributed Tracing) Nas\u0131l Uygulan\u0131r? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-02-24T16:40:59+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/kubernetes-uzerinde-jaeger-ile-dagitik-izleme-distributed-tracing-nasil-uygulanir\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/kubernetes-uzerinde-jaeger-ile-dagitik-izleme-distributed-tracing-nasil-uygulanir\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/kubernetes-uzerinde-jaeger-ile-dagitik-izleme-distributed-tracing-nasil-uygulanir\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Kubernetes \u00dczerinde Jaeger ile Da\u011f\u0131t\u0131k \u0130zleme (Distributed Tracing) Nas\u0131l Uygulan\u0131r?"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/40144","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=40144"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/40144\/revisions"}],"predecessor-version":[{"id":40145,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/40144\/revisions\/40145"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=40144"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=40144"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=40144"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}