Ana içeriğe geç

İzlenmeyen Agent'lar Bir Telemetri Boşluğudur, Güven Boşluğu Değil

Agent'lar izlenmeden çalışıyor çünkü framework'ler yapılandırılmış trace değil log üretiyor. Çözüm, sonradan eklenen araçlar değil, build zamanında bir sözleşme olarak observability'dir.

Close-up of a robotic hand with a woman pointing, showcasing advanced prosthetic technology.

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

Close-up of colorful illuminated DJ mixer control pad with buttons in vibrant lighting.

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.

![Close-up of automated canning equipment in a modern brewery assembly line.](/media/automated-assembly-line-35ce252236-eb5029.jpg)

## 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.

İlgili okumalar

Bunun yanıtladığı sorular

Why do so many agent deployments lack monitoring?

Most agent frameworks emit unstructured logs rather than spans with parent-child relationships, tool calls and model invocations live in separate systems without a shared correlation ID, and instrumentation is typically added after launch when the step boundary is already unstable. These are missing primitives, not lapses in discipline.

What should an agent span contain?

At minimum a trace ID, span ID, parent span ID, span kind, start time, duration, status, and attributes covering inputs, outputs, cost, latency and the policy decision that permitted the action. Each attribute should also carry a retention and redaction classification.

What should agent alerting be based on?

Behavioural invariants rather than error counts: tool call rate per run, spend per run against a declared budget, denied action counts, retrieval-to-invocation ratios, and tools invoked outside their permitted policy set.

What is the main trade-off of build-time instrumentation?

Every adapter must participate, and the runtime should refuse to execute tools that do not accept the tracing context. This slows tool integration and adds schema versioning work, in exchange for traces that can be queried for specific actions and used as an audit trail.