Gateway
OpenTelemetry dışa aktarımı
OpenClaw, resmi diagnostics-otel plugin'i aracılığıyla tanılamaları
OTLP/HTTP (protobuf) kullanarak dışa aktarır. OTLP/HTTP kabul eden herhangi
bir collector veya backend, kod değişikliği olmadan çalışır. Yerel dosya
günlükleri ve bunların nasıl okunacağı için bkz. Günlükleme.
Birlikte nasıl çalışır
- Tanılama olayları, model çalıştırmaları, mesaj akışı, oturumlar, kuyruklar ve exec için Gateway ve paketli plugin'ler tarafından yayımlanan yapılandırılmış, süreç içi kayıtlardır.
diagnostics-otelplugin'i bu olaylara abone olur ve bunları OTLP/HTTP üzerinden OpenTelemetry metrikleri, izleri ve günlükleri olarak dışa aktarır.- Sağlayıcı çağrıları, sağlayıcı aktarımı özel başlıkları kabul ettiğinde
OpenClaw'ın güvenilir model çağrısı span bağlamından bir W3C
traceparentbaşlığı alır. Plugin tarafından yayımlanan iz bağlamı yayılmaz. - Exporter'lar yalnızca hem tanılama yüzeyi hem de plugin etkin olduğunda bağlanır; bu nedenle süreç içi maliyet varsayılan olarak neredeyse sıfır kalır.
Hızlı başlangıç
Paketli kurulumlar için önce plugin'i kurun:
openclaw plugins install clawhub:@openclaw/diagnostics-otel
{
plugins: {
allow: ["diagnostics-otel"],
entries: {
"diagnostics-otel": { enabled: true },
},
},
diagnostics: {
enabled: true,
otel: {
enabled: true,
endpoint: "http://otel-collector:4318",
protocol: "http/protobuf",
serviceName: "openclaw-gateway",
traces: true,
metrics: true,
logs: true,
sampleRate: 0.2,
flushIntervalMs: 60000,
},
},
}
Plugin'i CLI'dan da etkinleştirebilirsiniz:
openclaw plugins enable diagnostics-otel
Dışa aktarılan sinyaller
| Sinyal | İçeriğine ne girer |
|---|---|
| Metrikler | Token kullanımı, maliyet, çalıştırma süresi, mesaj akışı, Talk olayları, kuyruk hatları, oturum durumu/kurtarma, exec ve bellek baskısı için sayaçlar ve histogramlar. |
| İzler | Model kullanımı, model çağrıları, harness yaşam döngüsü, araç yürütme, exec, webhook/mesaj işleme, bağlam oluşturma ve araç döngüleri için span'ler. |
| Günlükler | diagnostics.otel.logs etkin olduğunda OTLP üzerinden dışa aktarılan yapılandırılmış logging.file kayıtları. |
traces, metrics ve logs ayarlarını bağımsız olarak açıp kapatın.
diagnostics.otel.enabled true olduğunda üçü de varsayılan olarak açıktır.
Yapılandırma referansı
{
diagnostics: {
enabled: true,
otel: {
enabled: true,
endpoint: "http://otel-collector:4318",
tracesEndpoint: "http://otel-collector:4318/v1/traces",
metricsEndpoint: "http://otel-collector:4318/v1/metrics",
logsEndpoint: "http://otel-collector:4318/v1/logs",
protocol: "http/protobuf", // grpc is ignored
serviceName: "openclaw-gateway",
headers: { "x-collector-token": "..." },
traces: true,
metrics: true,
logs: true,
sampleRate: 0.2, // root-span sampler, 0.0..1.0
flushIntervalMs: 60000, // metric export interval (min 1000ms)
captureContent: {
enabled: false,
inputMessages: false,
outputMessages: false,
toolInputs: false,
toolOutputs: false,
systemPrompt: false,
},
},
},
}
Ortam değişkenleri
| Değişken | Amaç |
|---|---|
OTEL_EXPORTER_OTLP_ENDPOINT |
diagnostics.otel.endpoint değerini geçersiz kılar. Değer zaten /v1/traces, /v1/metrics veya /v1/logs içeriyorsa olduğu gibi kullanılır. |
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT / OTEL_EXPORTER_OTLP_METRICS_ENDPOINT / OTEL_EXPORTER_OTLP_LOGS_ENDPOINT |
Eşleşen diagnostics.otel.*Endpoint yapılandırma anahtarı ayarlanmamışsa kullanılan sinyale özgü endpoint geçersiz kılmaları. Sinyale özgü yapılandırma, sinyale özgü ortam değişkenine; o da paylaşılan endpoint'e göre önceliklidir. |
OTEL_SERVICE_NAME |
diagnostics.otel.serviceName değerini geçersiz kılar. |
OTEL_EXPORTER_OTLP_PROTOCOL |
Hat protokolünü geçersiz kılar (bugün yalnızca http/protobuf dikkate alınır). |
OTEL_SEMCONV_STABILITY_OPT_IN |
Eski gen_ai.system yerine en yeni deneysel GenAI span özniteliğini (gen_ai.provider.name) yaymak için gen_ai_latest_experimental olarak ayarlayın. GenAI metrikleri ne olursa olsun her zaman sınırlı, düşük kardinaliteli semantik öznitelikler kullanır. |
OPENCLAW_OTEL_PRELOADED |
Başka bir preload veya host süreci global OpenTelemetry SDK'sını zaten kaydettiğinde 1 olarak ayarlayın. Plugin bu durumda kendi NodeSDK yaşam döngüsünü atlar, ancak tanılama dinleyicilerini yine de bağlar ve traces/metrics/logs ayarlarına uyar. |
Gizlilik ve içerik yakalama
Ham model/araç içeriği varsayılan olarak dışa aktarılmaz. Span'ler sınırlı tanımlayıcılar taşır (kanal, sağlayıcı, model, hata kategorisi, yalnızca hash içeren istek kimlikleri) ve istem metni, yanıt metni, araç girdileri, araç çıktıları veya oturum anahtarlarını asla içermez. Talk metrikleri yalnızca mod, aktarım, sağlayıcı ve olay türü gibi sınırlı olay meta verilerini dışa aktarır. Transkriptleri, ses yüklerini, oturum kimliklerini, turn kimliklerini, çağrı kimliklerini, oda kimliklerini veya handoff token'larını içermezler.
Giden model istekleri bir W3C traceparent başlığı içerebilir. Bu başlık yalnızca
etkin model çağrısı için OpenClaw'a ait tanılama iz bağlamından oluşturulur.
Mevcut çağıran tarafından sağlanan traceparent başlıkları değiştirilir; böylece
plugin'ler veya özel sağlayıcı seçenekleri servisler arası iz soyunu taklit
edemez.
diagnostics.otel.captureContent.* ayarını yalnızca collector'ınız ve saklama
politikanız istem, yanıt, araç veya system-prompt metni için onaylı olduğunda
true yapın. Her alt anahtar bağımsız olarak opt-in'dir:
inputMessages- kullanıcı istemi içeriği.outputMessages- model yanıtı içeriği.toolInputs- araç argümanı yükleri.toolOutputs- araç sonucu yükleri.systemPrompt- oluşturulmuş sistem/geliştirici istemi.
Herhangi bir alt anahtar etkinleştirildiğinde, model ve araç span'leri yalnızca o
sınıf için sınırlı, redakte edilmiş openclaw.content.* öznitelikleri alır.
Örnekleme ve flush
- İzler:
diagnostics.otel.sampleRate(yalnızca kök span,0.0hepsini düşürür,1.0hepsini tutar). - Metrikler:
diagnostics.otel.flushIntervalMs(minimum1000). - Günlükler: OTLP günlükleri
logging.leveldeğerine (dosya günlük düzeyi) uyar. Konsol biçimlendirmesini değil, tanılama günlük kaydı redaksiyon yolunu kullanırlar. Yüksek hacimli kurulumlar yerel örnekleme yerine OTLP collector örneklemesini/filtrelemesini tercih etmelidir. - Dosya günlüğü korelasyonu: JSONL dosya günlükleri, günlük çağrısı geçerli
bir tanılama iz bağlamı taşıdığında üst düzey
traceId,spanId,parentSpanIdvetraceFlagsiçerir; bu, günlük işleyicilerinin yerel günlük satırlarını dışa aktarılan span'lerle birleştirmesini sağlar. - İstek korelasyonu: Gateway HTTP istekleri ve WebSocket frame'leri dahili
bir istek iz kapsamı oluşturur. Bu kapsam içindeki günlükler ve tanılama
olayları varsayılan olarak istek izini devralırken, agent çalıştırma ve model
çağrısı span'leri alt öğeler olarak oluşturulur; böylece sağlayıcı
traceparentbaşlıkları aynı iz üzerinde kalır.
Dışa aktarılan metrikler
Model kullanımı
openclaw.tokens(sayaç, öznitelikler:openclaw.token,openclaw.channel,openclaw.provider,openclaw.model,openclaw.agent)openclaw.cost.usd(sayaç, öznitelikler:openclaw.channel,openclaw.provider,openclaw.model)openclaw.run.duration_ms(histogram, öznitelikler:openclaw.channel,openclaw.provider,openclaw.model)openclaw.context.tokens(histogram, öznitelikler:openclaw.context,openclaw.channel,openclaw.provider,openclaw.model)gen_ai.client.token.usage(histogram, GenAI semantik kuralları metriği, öznitelikler:gen_ai.token.type=input/output,gen_ai.provider.name,gen_ai.operation.name,gen_ai.request.model)gen_ai.client.operation.duration(histogram, saniye, GenAI semantik kuralları metriği, öznitelikler:gen_ai.provider.name,gen_ai.operation.name,gen_ai.request.model, isteğe bağlıerror.type)openclaw.model_call.duration_ms(histogram, öznitelikler:openclaw.provider,openclaw.model,openclaw.api,openclaw.transport, ayrıca sınıflandırılmış hatalardaopenclaw.errorCategoryveopenclaw.failureKind)openclaw.model_call.request_bytes(histogram, son model istek yükünün UTF-8 bayt boyutu; ham yük içeriği yok)openclaw.model_call.response_bytes(histogram, akışla gelen model yanıt olaylarının UTF-8 bayt boyutu; ham yanıt içeriği yok)openclaw.model_call.time_to_first_byte_ms(histogram, akışla gelen ilk yanıt olayından önce geçen süre)
Mesaj akışı
openclaw.webhook.received(sayaç, öznitelikler:openclaw.channel,openclaw.webhook)openclaw.webhook.error(sayaç, öznitelikler:openclaw.channel,openclaw.webhook)openclaw.webhook.duration_ms(histogram, öznitelikler:openclaw.channel,openclaw.webhook)openclaw.message.queued(sayaç, öznitelikler:openclaw.channel,openclaw.source)openclaw.message.processed(sayaç, öznitelikler:openclaw.channel,openclaw.outcome)openclaw.message.duration_ms(histogram, öznitelikler:openclaw.channel,openclaw.outcome)openclaw.message.delivery.started(sayaç, öznitelikler:openclaw.channel,openclaw.delivery.kind)openclaw.message.delivery.duration_ms(histogram, öznitelikler:openclaw.channel,openclaw.delivery.kind,openclaw.outcome,openclaw.errorCategory)
Talk
openclaw.talk.event(sayaç, öznitelikler:openclaw.talk.event_type,openclaw.talk.mode,openclaw.talk.transport,openclaw.talk.brain,openclaw.talk.provider)openclaw.talk.event.duration_ms(histogram, öznitelikler:openclaw.talk.eventile aynı; bir Talk olayı süre bildirdiğinde yayımlanır)openclaw.talk.audio.bytes(histogram, öznitelikler:openclaw.talk.eventile aynı; bayt uzunluğu bildiren Talk ses frame olayları için yayımlanır)
Kuyruklar ve oturumlar
openclaw.queue.lane.enqueue(sayaç, öznitelikler:openclaw.lane)openclaw.queue.lane.dequeue(sayaç, öznitelikler:openclaw.lane)openclaw.queue.depth(histogram, öznitelikler:openclaw.laneveyaopenclaw.channel=heartbeat)openclaw.queue.wait_ms(histogram, öznitelikler:openclaw.lane)openclaw.session.state(sayaç, öznitelikler:openclaw.state,openclaw.reason)openclaw.session.stuck(sayaç, öznitelikler:openclaw.state; yalnızca etkin çalışma olmayan eskimiş oturum muhasebesi için yayılır)openclaw.session.stuck_age_ms(histogram, öznitelikler:openclaw.state; yalnızca etkin çalışma olmayan eskimiş oturum muhasebesi için yayılır)openclaw.session.recovery.requested(sayaç, öznitelikler:openclaw.state,openclaw.action,openclaw.active_work_kind,openclaw.reason)openclaw.session.recovery.completed(sayaç, öznitelikler:openclaw.state,openclaw.action,openclaw.status,openclaw.active_work_kind,openclaw.reason)openclaw.session.recovery.age_ms(histogram, öznitelikler: eşleşen kurtarma sayacıyla aynı)openclaw.run.attempt(sayaç, öznitelikler:openclaw.attempt)
Oturum canlılığı telemetrisi
diagnostics.stuckSessionWarnMs, oturum canlılığı tanılamaları için ilerleme yok yaş eşiğidir. Bir processing oturumu, OpenClaw yanıt, araç, durum, blok veya ACP çalışma zamanı ilerlemesi gözlemlerken bu eşiğe doğru yaşlanmaz. Yazma keepalive’ları ilerleme olarak sayılmaz, bu nedenle sessiz bir model veya harness yine de algılanabilir.
OpenClaw oturumları hâlâ gözlemleyebildiği işe göre sınıflandırır:
session.long_running: etkin gömülü iş, model çağrıları veya araç çağrıları hâlâ ilerleme kaydediyor.session.stalled: etkin iş var, ancak etkin çalıştırma yakın zamanda ilerleme bildirmedi. Duraklamış gömülü çalıştırmalar başlangıçta yalnızca gözlem modunda kalır, ardından şeridin arkasındaki kuyruğa alınmış dönüşlerin sürdürülebilmesi içindiagnostics.stuckSessionAbortMssonrasında ilerleme yoksa abort-drain yapar. Ayarlanmamışsa, iptal eşiği varsayılan olarak en az 10 dakika vediagnostics.stuckSessionWarnMsdeğerinin 5 katı olan daha güvenli genişletilmiş pencereye döner.session.stuck: etkin çalışma olmayan eskimiş oturum muhasebesi. Bu, etkilenen oturum şeridini hemen serbest bırakır.
Kurtarma, yapılandırılmış session.recovery.requested ve session.recovery.completed olayları yayar. Tanılama oturum durumu yalnızca değişiklik yapan bir kurtarma sonucu (aborted veya released) sonrasında ve yalnızca aynı işleme nesli hâlâ güncelse boşta olarak işaretlenir.
Yalnızca session.stuck, openclaw.session.stuck sayacını, openclaw.session.stuck_age_ms histogramını ve openclaw.session.stuck span’ini yayar. Tekrarlanan session.stuck tanılamaları oturum değişmeden kaldıkça geri çekilir, bu nedenle panolar her Heartbeat tıkında değil, sürekli artışlarda uyarı vermelidir. Yapılandırma düğmesi ve varsayılanlar için bkz. Yapılandırma başvurusu.
Harness yaşam döngüsü
openclaw.harness.duration_ms(histogram, öznitelikler:openclaw.harness.id,openclaw.harness.plugin,openclaw.outcome, hatalardaopenclaw.harness.phase)
Exec
openclaw.exec.duration_ms(histogram, öznitelikler:openclaw.exec.target,openclaw.exec.mode,openclaw.outcome,openclaw.failureKind)
Tanılama iç bileşenleri (bellek ve araç döngüsü)
openclaw.memory.heap_used_bytes(histogram, öznitelikler:openclaw.memory.kind)openclaw.memory.rss_bytes(histogram)openclaw.memory.pressure(sayaç, öznitelikler:openclaw.memory.level)openclaw.tool.loop.iterations(sayaç, öznitelikler:openclaw.toolName,openclaw.outcome)openclaw.tool.loop.duration_ms(histogram, öznitelikler:openclaw.toolName,openclaw.outcome)
Dışa aktarılan span’ler
openclaw.model.usageopenclaw.channel,openclaw.provider,openclaw.modelopenclaw.tokens.*(input/output/cache_read/cache_write/total)- varsayılan olarak
gen_ai.system, veya en yeni GenAI anlamsal kuralları etkinleştirildiğindegen_ai.provider.name gen_ai.request.model,gen_ai.operation.name,gen_ai.usage.*
openclaw.runopenclaw.outcome,openclaw.channel,openclaw.provider,openclaw.model,openclaw.errorCategory
openclaw.model.call- varsayılan olarak
gen_ai.system, veya en yeni GenAI anlamsal kuralları etkinleştirildiğindegen_ai.provider.name gen_ai.request.model,gen_ai.operation.name,openclaw.provider,openclaw.model,openclaw.api,openclaw.transport- hatalarda
openclaw.errorCategoryve isteğe bağlıopenclaw.failureKind openclaw.model_call.request_bytes,openclaw.model_call.response_bytes,openclaw.model_call.time_to_first_byte_msopenclaw.provider.request_id_hash(üst sağlayıcı istek kimliğinin sınırlı SHA tabanlı hash’i; ham kimlikler dışa aktarılmaz)
- varsayılan olarak
openclaw.harness.runopenclaw.harness.id,openclaw.harness.plugin,openclaw.outcome,openclaw.provider,openclaw.model,openclaw.channel- Tamamlandığında:
openclaw.harness.result_classification,openclaw.harness.yield_detected,openclaw.harness.items.started,openclaw.harness.items.completed,openclaw.harness.items.active - Hatada:
openclaw.harness.phase,openclaw.errorCategory, isteğe bağlıopenclaw.harness.cleanup_failed
openclaw.tool.executiongen_ai.tool.name,openclaw.toolName,openclaw.errorCategory,openclaw.tool.params.*
openclaw.execopenclaw.exec.target,openclaw.exec.mode,openclaw.outcome,openclaw.failureKind,openclaw.exec.command_length,openclaw.exec.exit_code,openclaw.exec.timed_out
openclaw.webhook.processedopenclaw.channel,openclaw.webhook
openclaw.webhook.erroropenclaw.channel,openclaw.webhook,openclaw.error
openclaw.message.processedopenclaw.channel,openclaw.outcome,openclaw.reason
openclaw.message.deliveryopenclaw.channel,openclaw.delivery.kind,openclaw.outcome,openclaw.errorCategory,openclaw.delivery.result_count
openclaw.session.stuckopenclaw.state,openclaw.ageMs,openclaw.queueDepth
openclaw.context.assembledopenclaw.prompt.size,openclaw.history.size,openclaw.context.tokens,openclaw.errorCategory(istem, geçmiş, yanıt veya oturum anahtarı içeriği yok)
openclaw.tool.loopopenclaw.toolName,openclaw.outcome,openclaw.iterations,openclaw.errorCategory(döngü iletileri, parametreler veya araç çıktısı yok)
openclaw.memory.pressureopenclaw.memory.level,openclaw.memory.heap_used_bytes,openclaw.memory.rss_bytes
İçerik yakalama açıkça etkinleştirildiğinde, model ve araç span’leri etkinleştirdiğiniz belirli içerik sınıfları için sınırlı, redakte edilmiş openclaw.content.* özniteliklerini de içerebilir.
Tanılama olay kataloğu
Aşağıdaki olaylar yukarıdaki metrikleri ve span’leri destekler. Plugin’ler bunlara OTLP dışa aktarımı olmadan da doğrudan abone olabilir.
Model kullanımı
model.usage- token’lar, maliyet, süre, bağlam, sağlayıcı/model/kanal, oturum kimlikleri.usage, maliyet ve telemetri için sağlayıcı/dönüş muhasebesidir;context.usedgeçerli istem/bağlam anlık görüntüsüdür ve önbelleğe alınmış girdi veya araç döngüsü çağrıları söz konusu olduğunda sağlayıcıusage.totaldeğerinden düşük olabilir.
İleti akışı
webhook.received/webhook.processed/webhook.errormessage.queued/message.processedmessage.delivery.started/message.delivery.completed/message.delivery.error
Kuyruk ve oturum
queue.lane.enqueue/queue.lane.dequeuesession.state/session.long_running/session.stalled/session.stuckrun.attempt/run.progressdiagnostic.heartbeat(toplu sayaçlar: webhook’lar/kuyruk/oturum)
Harness yaşam döngüsü
harness.run.started/harness.run.completed/harness.run.error- aracı harness’i için çalıştırma başına yaşam döngüsü.harnessId, isteğe bağlıpluginId, sağlayıcı/model/kanal ve çalıştırma kimliğini içerir. TamamlanmadurationMs,outcome, isteğe bağlıresultClassification,yieldDetectedveitemLifecyclesayılarını ekler. Hatalarphase(prepare/start/send/resolve/cleanup),errorCategoryve isteğe bağlıcleanupFailedekler.
Exec
exec.process.completed- terminal sonucu, süre, hedef, mod, çıkış kodu ve hata türü. Komut metni ve çalışma dizinleri dahil edilmez.
Dışa aktarıcı olmadan
diagnostics-otel çalıştırmadan tanılama olaylarını Plugin’ler veya özel alıcılar için kullanılabilir tutabilirsiniz:
{
diagnostics: { enabled: true },
}
logging.level düzeyini yükseltmeden hedefli hata ayıklama çıktısı için tanılama bayraklarını kullanın. Bayraklar büyük/küçük harfe duyarlı değildir ve joker karakterleri destekler (ör. telegram.* veya *):
{
diagnostics: { flags: ["telegram.http"] },
}
Ya da tek seferlik env geçersiz kılması olarak:
OPENCLAW_DIAGNOSTICS=telegram.http,telegram.payload openclaw gateway
Bayrak çıktısı standart günlük dosyasına (logging.file) gider ve yine de logging.redactSensitive tarafından redakte edilir. Tam kılavuz: Tanılama bayrakları.
Devre dışı bırakma
{
diagnostics: { otel: { enabled: false } },
}
Ayrıca diagnostics-otel öğesini plugins.allow dışında bırakabilir veya openclaw plugins disable diagnostics-otel çalıştırabilirsiniz.
İlgili
- Günlükleme - dosya günlükleri, konsol çıktısı, CLI tailing ve Control UI Günlükleri sekmesi
- Gateway günlükleme iç bileşenleri - WS günlük stilleri, alt sistem önekleri ve konsol yakalama
- Tanılama bayrakları - hedefli hata ayıklama günlüğü bayrakları
- Tanılama dışa aktarımı - operatör destek paketi aracı (OTEL dışa aktarımından ayrı)
- Yapılandırma başvurusu - tam
diagnostics.*alan başvurusu