Ana içeriğe atla
OpenClaw, tanı verilerini paketlenmiş diagnostics-otel Plugin’i üzerinden OTLP/HTTP (protobuf) kullanarak dışa aktarır. OTLP/HTTP kabul eden herhangi bir toplayıcı veya arka uç kod değişikliği olmadan çalışır. Yerel dosya günlükleri ve bunların nasıl okunacağı için bkz. Logging.

Nasıl birlikte çalışır

  • Tanı olayları, model çalıştırmaları, mesaj akışı, oturumlar, kuyruklar ve exec için Gateway ve paketlenmiş Plugin’ler tarafından yayılan yapılandırılmış süreç içi kayıtlardır.
  • diagnostics-otel Plugin’i, bu olaylara abone olur ve bunları OpenTelemetry metrics, traces ve logs olarak OTLP/HTTP üzerinden dışa aktarır.
  • Sağlayıcı çağrıları, sağlayıcı transport’u özel başlıkları kabul ettiğinde, OpenClaw’ın güvenilen model-çağrısı span bağlamından bir W3C traceparent başlığı alır. Plugin tarafından yayılan iz bağlamı aktarılmaz.
  • Dışa aktarıcılar yalnızca hem diagnostics yüzeyi hem de Plugin etkin olduğunda eklenir; bu nedenle süreç içi maliyet varsayılan olarak sıfıra yakın kalır.

Hızlı başlangıç

{
  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’den de etkinleştirebilirsiniz:
openclaw plugins enable diagnostics-otel
protocol şu anda yalnızca http/protobuf destekler. grpc yok sayılır.

Dışa aktarılan sinyaller

Sinyalİçeriği
MetricsToken kullanımı, maliyet, çalıştırma süresi, mesaj akışı, kuyruk hatları, oturum durumu, exec ve bellek baskısı için sayaçlar ve histogramlar.
TracesModel 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’lar.
Logsdiagnostics.otel.logs etkin olduğunda OTLP üzerinden dışa aktarılan yapılandırılmış logging.file kayıtları.
traces, metrics ve logs değerlerini bağımsız olarak açıp kapatın. Üçü de diagnostics.otel.enabled true olduğunda varsayılan olarak açıktır.

Yapılandırma başvurusu

{
  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 yok sayılır
      serviceName: "openclaw-gateway",
      headers: { "x-collector-token": "..." },
      traces: true,
      metrics: true,
      logs: true,
      sampleRate: 0.2, // kök-span örnekleyici, 0.0..1.0
      flushIntervalMs: 60000, // metric dışa aktarma aralığı (min 1000ms)
      captureContent: {
        enabled: false,
        inputMessages: false,
        outputMessages: false,
        toolInputs: false,
        toolOutputs: false,
        systemPrompt: false,
      },
    },
  },
}

Ortam değişkenleri

DeğişkenAmaç
OTEL_EXPORTER_OTLP_ENDPOINTdiagnostics.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_ENDPOINTEşleşen diagnostics.otel.*Endpoint config anahtarı ayarlı olmadığında kullanılan sinyal bazlı uç nokta geçersiz kılmaları. Sinyal bazlı config, sinyal bazlı env’den önce gelir; sinyal bazlı env de paylaşılan uç noktadan önce gelir.
OTEL_SERVICE_NAMEdiagnostics.otel.serviceName değerini geçersiz kılar.
OTEL_EXPORTER_OTLP_PROTOCOLHat üzerindeki protokolü geçersiz kılar (bugün yalnızca http/protobuf dikkate alınır).
OTEL_SEMCONV_STABILITY_OPT_INEski gen_ai.system yerine en son deneysel GenAI span özniteliğini (gen_ai.provider.name) yayımlamak için gen_ai_latest_experimental olarak ayarlayın. GenAI metrics her zaman sınırlı, düşük kardinaliteli semantik öznitelikler kullanır.
OPENCLAW_OTEL_PRELOADEDBaşka bir preload veya ana süreç zaten genel OpenTelemetry SDK’sını kaydettiyse 1 olarak ayarlayın. Plugin bu durumda kendi NodeSDK yaşam döngüsünü atlar ama yine de tanı dinleyicilerini 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’lar sınırlı tanımlayıcılar taşır (kanal, sağlayıcı, model, hata kategorisi, yalnızca hash olan istek kimlikleri) ve asla istem metni, yanıt metni, araç girdileri, araç çıktıları veya oturum anahtarlarını içermez. 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ı iz bağlamından üretilir. Mevcut çağıran tarafından sağlanan traceparent başlıkları değiştirilir; bu nedenle Plugin’ler veya özel sağlayıcı seçenekleri hizmetler arası iz soyunu taklit edemez. İstemi, yanıtı, aracı veya system prompt metnini toplamaya ve saklamaya toplayıcınız ile elde tutma politikanız onaylıysa yalnızca o zaman diagnostics.otel.captureContent.* değerlerini true yapın. Her alt anahtar bağımsız olarak isteğe bağlıdır:
  • inputMessages — kullanıcı istem içeriği.
  • outputMessages — model yanıt içeriği.
  • toolInputs — araç argüman yükleri.
  • toolOutputs — araç sonuç yükleri.
  • systemPrompt — birleştirilmiş system/developer prompt’u.
Herhangi bir alt anahtar etkin olduğunda, model ve araç span’ları yalnızca o sınıf için sınırlı, sansürlenmiş openclaw.content.* öznitelikleri alır.

Örnekleme ve flush

  • Traces: diagnostics.otel.sampleRate (yalnızca kök-span, 0.0 tümünü düşürür, 1.0 tümünü tutar).
  • Metrics: diagnostics.otel.flushIntervalMs (asgari 1000).
  • Logs: OTLP günlükleri logging.level değerine uyar (dosya günlük seviyesi). Konsol sansürleme OTLP günlüklerine uygulanmaz. Yüksek hacimli kurulumlar, yerel örnekleme yerine OTLP toplayıcı örnekleme/filtrelemeyi tercih etmelidir.

Dışa aktarılan metrics

Model kullanımı

  • openclaw.tokens (counter, öznitelikler: openclaw.token, openclaw.channel, openclaw.provider, openclaw.model, openclaw.agent)
  • openclaw.cost.usd (counter, ö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 semantic-conventions 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 semantic-conventions metriği, öznitelikler: gen_ai.provider.name, gen_ai.operation.name, gen_ai.request.model, isteğe bağlı error.type)

Mesaj akışı

  • openclaw.webhook.received (counter, öznitelikler: openclaw.channel, openclaw.webhook)
  • openclaw.webhook.error (counter, öznitelikler: openclaw.channel, openclaw.webhook)
  • openclaw.webhook.duration_ms (histogram, öznitelikler: openclaw.channel, openclaw.webhook)
  • openclaw.message.queued (counter, öznitelikler: openclaw.channel, openclaw.source)
  • openclaw.message.processed (counter, öznitelikler: openclaw.channel, openclaw.outcome)
  • openclaw.message.duration_ms (histogram, öznitelikler: openclaw.channel, openclaw.outcome)
  • openclaw.message.delivery.started (counter, öznitelikler: openclaw.channel, openclaw.delivery.kind)
  • openclaw.message.delivery.duration_ms (histogram, öznitelikler: openclaw.channel, openclaw.delivery.kind, openclaw.outcome, openclaw.errorCategory)

Kuyruklar ve oturumlar

  • openclaw.queue.lane.enqueue (counter, öznitelikler: openclaw.lane)
  • openclaw.queue.lane.dequeue (counter, öznitelikler: openclaw.lane)
  • openclaw.queue.depth (histogram, öznitelikler: openclaw.lane veya openclaw.channel=heartbeat)
  • openclaw.queue.wait_ms (histogram, öznitelikler: openclaw.lane)
  • openclaw.session.state (counter, öznitelikler: openclaw.state, openclaw.reason)
  • openclaw.session.stuck (counter, öznitelikler: openclaw.state)
  • openclaw.session.stuck_age_ms (histogram, öznitelikler: openclaw.state)
  • openclaw.run.attempt (counter, öznitelikler: openclaw.attempt)

Harness yaşam döngüsü

  • openclaw.harness.duration_ms (histogram, öznitelikler: openclaw.harness.id, openclaw.harness.plugin, openclaw.outcome, hatalarda openclaw.harness.phase)

Exec

  • openclaw.exec.duration_ms (histogram, öznitelikler: openclaw.exec.target, openclaw.exec.mode, openclaw.outcome, openclaw.failureKind)

Tanı 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 (counter, öznitelikler: openclaw.memory.level)
  • openclaw.tool.loop.iterations (counter, öznitelikler: openclaw.toolName, openclaw.outcome)
  • openclaw.tool.loop.duration_ms (histogram, öznitelikler: openclaw.toolName, openclaw.outcome)

Dışa aktarılan span’lar

  • openclaw.model.usage
    • openclaw.channel, openclaw.provider, openclaw.model
    • openclaw.tokens.* (input/output/cache_read/cache_write/total)
    • varsayılan olarak gen_ai.system, ya da en son GenAI semantic conventions seçildiğinde gen_ai.provider.name
    • gen_ai.request.model, gen_ai.operation.name, gen_ai.usage.*
  • openclaw.run
    • openclaw.outcome, openclaw.channel, openclaw.provider, openclaw.model, openclaw.errorCategory
  • openclaw.model.call
    • varsayılan olarak gen_ai.system, ya da en son GenAI semantic conventions seçildiğinde gen_ai.provider.name
    • gen_ai.request.model, gen_ai.operation.name, openclaw.provider, openclaw.model, openclaw.api, openclaw.transport
    • openclaw.provider.request_id_hash (upstream sağlayıcı istek kimliğinin sınırlı SHA tabanlı hash’i; ham kimlikler dışa aktarılmaz)
  • openclaw.harness.run
    • openclaw.harness.id, openclaw.harness.plugin, openclaw.outcome, openclaw.provider, openclaw.model, openclaw.channel
    • Tamamlanmada: openclaw.harness.result_classification, openclaw.harness.yield_detected, openclaw.harness.items.started, openclaw.harness.items.completed, openclaw.harness.items.active
    • Hata durumunda: openclaw.harness.phase, openclaw.errorCategory, isteğe bağlı openclaw.harness.cleanup_failed
  • openclaw.tool.execution
    • gen_ai.tool.name, openclaw.toolName, openclaw.errorCategory, openclaw.tool.params.*
  • openclaw.exec
    • openclaw.exec.target, openclaw.exec.mode, openclaw.outcome, openclaw.failureKind, openclaw.exec.command_length, openclaw.exec.exit_code, openclaw.exec.timed_out
  • openclaw.webhook.processed
    • openclaw.channel, openclaw.webhook, openclaw.chatId
  • openclaw.webhook.error
    • openclaw.channel, openclaw.webhook, openclaw.chatId, openclaw.error
  • openclaw.message.processed
    • openclaw.channel, openclaw.outcome, openclaw.chatId, openclaw.messageId, openclaw.reason
  • openclaw.message.delivery
    • openclaw.channel, openclaw.delivery.kind, openclaw.outcome, openclaw.errorCategory, openclaw.delivery.result_count
  • openclaw.session.stuck
    • openclaw.state, openclaw.ageMs, openclaw.queueDepth
  • openclaw.context.assembled
    • openclaw.prompt.size, openclaw.history.size, openclaw.context.tokens, openclaw.errorCategory (istem, geçmiş, yanıt veya oturum anahtarı içeriği yok)
  • openclaw.tool.loop
    • openclaw.toolName, openclaw.outcome, openclaw.iterations, openclaw.errorCategory (döngü mesajları, parametreler veya araç çıktısı yok)
  • openclaw.memory.pressure
    • openclaw.memory.level, openclaw.memory.heap_used_bytes, openclaw.memory.rss_bytes
İçerik yakalama açıkça etkinleştirildiğinde, model ve araç span’ları ayrıca katıldığınız belirli içerik sınıfları için sınırlı, sansürlenmiş openclaw.content.* öznitelikleri içerebilir.

Tanı olay kataloğu

Aşağıdaki olaylar yukarıdaki metrics ve span’ları destekler. Plugin’ler ayrıca bunlara OTLP dışa aktarma 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.used ise mevcut 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.total değerinden daha düşük olabilir.
Mesaj akışı
  • webhook.received / webhook.processed / webhook.error
  • message.queued / message.processed
  • message.delivery.started / message.delivery.completed / message.delivery.error
Kuyruk ve oturum
  • queue.lane.enqueue / queue.lane.dequeue
  • session.state / session.stuck
  • run.attempt
  • diagnostic.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ç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. Tamamlanma kısmı durationMs, outcome, isteğe bağlı resultClassification, yieldDetected ve itemLifecycle sayılarını ekler. Hatalar phase (prepare/start/send/resolve/cleanup), errorCategory ve isteğe bağlı cleanupFailed ekler.
Exec
  • exec.process.completed — terminal sonuç, süre, hedef, mod, çıkış kodu ve hata türü. Komut metni ve çalışma dizinleri dahil değildir.

Dışa aktarıcı olmadan

diagnostics-otel çalıştırmadan da tanı olaylarını Plugin’ler veya özel sink’ler için kullanılabilir tutabilirsiniz:
{
  diagnostics: { enabled: true },
}
logging.level yükseltmeden hedeflenmiş hata ayıklama çıktısı için diagnostics bayraklarını kullanın. Bayraklar büyük/küçük harfe duyarsızdır ve joker karakter destekler (ör. telegram.* veya *):
{
  diagnostics: { flags: ["telegram.http"] },
}
Veya tek seferlik bir env geçersiz kılması olarak:
OPENCLAW_DIAGNOSTICS=telegram.http,telegram.payload openclaw gateway
Bayrak çıktısı standart günlük dosyasına gider (logging.file) ve yine de logging.redactSensitive tarafından sansürlenir. Tam rehber: Diagnostics flags.

Devre dışı bırakma

{
  diagnostics: { otel: { enabled: false } },
}
Ayrıca plugins.allow içine diagnostics-otel eklemeyebilir veya openclaw plugins disable diagnostics-otel çalıştırabilirsiniz.

İlgili