Bulgu, tam olarak yeniden ifade edilirse
Agent dağıtımlarının dörtte biri izleme olmadan çalışıyor. Yaygın okuma organizasyoneldir: ekipler çok hızlı sevk etti, güvenilirliğin sahibi yoktu, yönetişim geride kaldı. Bu okuma rahatlatıcı ve çoğunlukla yanlış. Bir sistemin istikrarlı bir adım sınırı, paylaşılan bir korelasyon tanımlayıcısı ve bir span şeması yoksa, izleme bir disiplin sorunu değildir — eksik bir ilkeldir. Uyarı üretmek istediğiniz olayları hiç yaymayan bir mimariden dashboard'larla çıkamazsınız.
İzleme neden atlanıyor
Framework'ler trace değil log üretir. Tipik bir agent döngüsü insan tarafından okunabilir satırlar yazar: prompt gönderildi, araç seçildi, yanıt ayrıştırıldı. Log satırları üretmesi ucuz ve toplulaştırması neredeyse işe yaramazdır. Ebeveyn-çocuk ilişkisi, süre, durum alanı, nitelik ad alanı yoktur. "Hangi çalıştırmalar iade aracını üç defadan fazla çağırdı" sorgusu yapılandırılmamış metin üzerinde bir regex alıştırmasına dönüşür, bu yüzden kimse uyarıyı kurmaz.
Veri farklı sistemlerde yaşar. Model çağrıları inference sağlayıcısında bulunur. Araç çağrıları uygulama loglarında bulunur. Retrieval'lar vektör deposunda bulunur. Politika kararları bir gateway'de bulunur. Her sistemin aynı mantıksal işlem için kendi tanımlayıcısı vardır ve hiçbiri uyuşmaz. Çalıştırma sınırında üretilen ve her atlama boyunca yayılan bir korelasyon ID'si olmadan, tek bir agent adımını yeniden oluşturmak dört satıcının dışa aktarımlarını zaman damgasına göre birleştirmeyi gerektirir — bu yaklaşım iki çağrı aynı milisaniyeye düştüğü anda başarısız olur.
Enstrümantasyon lansmandan sonra eklenir. Bir ekip trace'lere ihtiyaç duyduğuna karar verdiğinde, agent iki kez yeniden düzenlenmiş, araçlar retry mantığıyla sarılmış ve adım sınırı bir dizi asenkron callback içinde çözülmüştür. Span'ları sonradan eklemek, bir adımın ne olduğunu yeniden tanımlamak anlamına gelir; bu bir observability değişikliği değil, bir tasarım değişikliğidir. Özellik çalışmalarıyla rekabet ettiği ve ilk ciddi olaya kadar görünür bir kullanıcı etkisi olmadığı için süresiz olarak ertelenir.
Build zamanı sözleşmesi olarak enstrümantasyon

Alternatif, observability'yi agent'ın arayüzünün bir parçası olarak ele almak ve bir tür imzası veya şema göçü gibi uygulamaktır.
Her adım bir span yayar. Bir adım, sistemin bağımsız olarak yeniden deneyebileceği, reddedebileceği veya faturalandırabileceği herhangi bir birimdir: bir model çağrısı, bir araç çağrısı, bir retrieval, bir politika değerlendirmesi. Span girdileri, çıktıları, maliyeti, gecikmeyi ve buna izin veren politika kararını taşır. Maliyet, token sayımlarından sonradan hesaplanan türetilmiş bir metrik değildir; fiyatlandırma değiştiği ve uzun bir saklama penceresi boyunca geriye dönük yeniden hesaplama denetim izlerinin öldüğü yer olduğu için, yayım anında yazılan bir niteliktir.
Korelasyon ID'leri sınırlar arasında yayılır. Bir çalıştırma ID'si bir kez üretilir, ardından giden HTTP başlıkları, veritabanı oturum bağlamı ve mesaj kuyruğu meta verileri boyunca geçirilir. Somut mekanizma, runtime tarafından enjekte edilen ve her adaptör tarafından okunan bir bağlam nesnesidir; böylece harici bir API çağıran bir aracın izlendiğini bilmesine gerek yoktur — HTTP istemci sarmalayıcısı başlığı ekler, veritabanı sürücüsü bir oturum değişkeni ayarlar, kuyruk yayıncısı alanı kopyalar. Bir aşağı akış servisi aynı ID'yi logladığında, trace manuel birleştirme olmadan uçtan uca kapanır.
Örnekleme baştan bildirilir. Her çalıştırmanın tam sadakatle izlenmesi hacimde nadiren karşılanabilir. Build zamanı sözleşmesi örnekleme politikasını belirtir: hangi çalıştırmalar her zaman izlenir (reddedilen eylemler, yüksek maliyetli çalıştırmalar, dağıtım başına ilk N), hangileri olasılıksal olarak örneklenir ve neyin düşürüldüğü. Örnekleme kararları kök span'da alınır, böylece örneklenmeyen bir çalıştırma yarı-mevcut olmak yerine tutarlı biçimde yok olur; bu, trace verisini güvenilmez kılan başarısızlık modudur.
Minimal bir span şeması şöyle görünür:
{
"trace_id": "run_8f2c...",
"span_id": "step_01",
"parent_span_id": null,
"kind": "model.invoke",
"started_at": "2025-01-01T10:00:00.000Z",
"duration_ms": 812,
"attributes": {
"model": "...",
"input_tokens": 1042,
"output_tokens": 233,
"cost_units": 0.0041,
"policy_decision": "allow",
"polic
Ödünleşim gerçektir: her adaptör katılmalıdır ve tek bir enstrümante edilmemiş araç zinciri kırar. Hafifletme yöntemi, runtime'ın bağlam nesnesini kabul etmeyen bir aracı çalıştırmayı reddetmesini sağlamaktır — runtime'da bir umut yerine derleme zamanı veya başlangıç zamanı kontrolü. Bu kısıt, araçları hızlıca eklemek isteyen ekipler tarafından sevilmez ve gerçekten eksiksiz bir trace'in bedelidir.

## Trace'lerden kontrollere
Trace'ler yalnızca belirli eylemlerle ilgili soruları yanıtladıklarında faydalıdır.
**Sorgulanabilirlik denetim testidir.** Araç adına, argüman hash'ine, politika kuralına veya aktöre göre filtreleyemediğiniz bir trace, bir denetim izi değil, bir hata ayıklama yardımcısıdır. Bu, şemanın yalnızca framework'ün yaydığı alanları değil, düzenleyicilerin ve olay müdahale ekiplerinin sorduğu alanları içermesi gerektiği anlamına gelir. "Agent'ın ödeme aracını insan onayı span'ı olmadan çağırdığı her çalıştırmayı göster" sorusu tek bir sorguyla yanıtlanamıyorsa, enstrümantasyon eksiktir.
**Davranışsal değişmezler üzerinde uyarı verin.** Hata sayıları bir agent sistemindeki en zayıf sinyaldir, çünkü başarısızlık modu genellikle olmaması gereken başarılı bir çağrıdır. Yararlı değişmezler yapısaldır: bildirilen bir üst sınıra karşı çalıştırma başına araç çağrı oranı, bir bütçe niteliğine karşı çalıştırma başına harcama, reddedilen eylem sayısı, model çağrılarına retrieval oranı ve bir aracın izin verilen politika kümesi dışında görünmesi. Bunlar span'lardan hesaplanabilir ve sağlayıcı değişiklikleriyle kayan gecikme eşiklerinin aksine model yükseltmeleri boyunca kararlıdır.
**Saklama ve redaksiyon şemaya aittir.** Hangi alanların kişisel veri içerdiğine sonradan karar vermek, geçmiş trace'leri yeniden işlemek anlamına gelir; bu pahalıdır ve ham yükler gittiğinde genellikle imkânsızdır. Bunun yerine, her niteliği tanım zamanında saklanan, hash'lenen veya redakte edilen olarak işaretleyin ve pipeline'ın kuralı yazma sırasında uygulamasına izin verin. Ödünleşim, redakte edilen alanlar için azalan hata ayıklama sadakati ve sınıflandırma kuralları değiştikçe sürümlenmesi gereken bir şemadır. Bu maliyet, bir konu erişim talebi sırasında prompt'ların ve araç çıktılarının alan düzeyinde politika olmadan bir observability satıcısının deposunda durduğunu keşfetmekten daha düşüktür.
## Bu bir build zamanı gereksinimi olduğunda ne değişir
Agent'ların dörtte biri istatistiği, ilkellere hiç sahip olmamış bir popülasyonu tanımlar. Bir adım sınırı tanımlayan, bir çalıştırma ID'si üreten, onu her adaptör boyunca yayan ve lansmandan önce örnekleme ile saklamayı bildiren ekipler daha sonra bir izleme kararıyla karşılaşmazlar — iyi anlaşılmış bir mühendislik görevi olan bir şema göçüyle karşılaşırlar. Rahatsız edici kısım, bu işin onu haklı çıkaracak görünür bir sorun ortaya çıkmadan önce yapılması ve yeni araçların ne kadar hızlı eklenebileceğini kısıtlamasıdır. Dürüst ödünleşim budur: davranışı yeniden oluşturulabilen, sorgulanabilen ve kontrol edilebilen bir sistem karşılığında daha yavaş araç entegrasyonu. Alternatif, tam da kimse ne yaptıklarını göremediği için güvenilen bir agent filosudur.
