OpenClaw exporta diagnósticos mediante el Plugin oficial diagnostics-otel
usando OTLP/HTTP (protobuf). Los registros también se pueden escribir como JSONL en stdout para
canalizaciones de registros de contenedores y sandboxes. Cualquier colector o backend que acepte
OTLP/HTTP funciona sin cambios de código. Para registros de archivos locales, consulta
Registro.
- Los eventos de diagnóstico son registros estructurados en proceso emitidos por el
Gateway y los plugins incluidos para ejecuciones de modelos, flujo de mensajes, sesiones, colas
y exec.
diagnostics-otel se suscribe a esos eventos y los exporta como
métricas, trazas y registros de OpenTelemetry sobre OTLP/HTTP, y puede
replicar registros en JSONL a stdout.
- Las llamadas a proveedores reciben un encabezado W3C
traceparent desde el contexto
del span de llamada a modelo de confianza de OpenClaw cuando el transporte del proveedor acepta
encabezados personalizados. El contexto de traza emitido por plugins no se propaga.
- Los exportadores solo se adjuntan cuando tanto la superficie de diagnóstico como el Plugin están
habilitados, por lo que el coste en proceso permanece cerca de cero de forma predeterminada.
Inicio rápido
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,
},
},
}
O habilita el Plugin desde la CLI: openclaw plugins enable diagnostics-otel.
protocol solo admite http/protobuf. Dado que traces y metrics están habilitados de forma predeterminada, cualquier otro valor (incluido grpc) cancela toda la suscripción de diagnostics-otel con una advertencia unsupported protocol; esto también detiene la exportación de registros a stdout. Define explícitamente traces: false y metrics: false si solo quieres logsExporter: "stdout" con un valor de protocolo que no sea OTLP.
Señales exportadas
| Señal | Qué incluye |
|---|
| Métricas | Contadores/histogramas para uso de tokens, coste, duración de ejecución, conmutación por error, uso de Skills, flujo de mensajes, eventos de Talk, carriles de cola, estado/recuperación de sesión, ejecución de herramientas, exec, memoria, actividad y salud del exportador. |
| Trazas | Spans para uso de modelos, llamadas a modelos, ciclo de vida del arnés, uso de Skills, ejecución de herramientas, exec, procesamiento de webhooks/mensajes, ensamblado de contexto y bucles de herramientas. |
| Registros | Registros estructurados de logging.file exportados por OTLP o JSONL a stdout cuando diagnostics.otel.logs está habilitado; los cuerpos de registro se retienen a menos que la captura de contenido esté habilitada explícitamente. |
Activa o desactiva traces, metrics y logs de forma independiente. Las trazas y métricas
están activadas de forma predeterminada cuando diagnostics.otel.enabled es true; los registros están desactivados
de forma predeterminada y solo se exportan cuando diagnostics.otel.logs es explícitamente true. La exportación de registros
usa OTLP de forma predeterminada; define diagnostics.otel.logsExporter como stdout para JSONL en
stdout, o both para ambos.
Referencia de configuración
{
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 disables OTLP export
serviceName: "openclaw-gateway", // unset falls back to OTEL_SERVICE_NAME, then "openclaw"
headers: { "x-collector-token": "..." },
traces: true,
metrics: true,
logs: true,
logsExporter: "otlp", // otlp | stdout | both
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,
toolDefinitions: false,
},
},
},
}
Variables de entorno
| Variable | Propósito |
|---|
OTEL_EXPORTER_OTLP_ENDPOINT | Valor de reserva para diagnostics.otel.endpoint cuando la clave de configuración no está definida. |
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT / OTEL_EXPORTER_OTLP_METRICS_ENDPOINT / OTEL_EXPORTER_OTLP_LOGS_ENDPOINT | Valores de reserva de endpoints específicos de señal usados cuando la clave de configuración diagnostics.otel.*Endpoint correspondiente no está definida. La configuración específica de señal tiene prioridad sobre la variable de entorno específica de señal, que tiene prioridad sobre el endpoint compartido. |
OTEL_SERVICE_NAME | Valor de reserva para diagnostics.otel.serviceName cuando la clave de configuración no está definida. El nombre de servicio predeterminado es openclaw. |
OTEL_EXPORTER_OTLP_PROTOCOL | Valor de reserva para el protocolo de transporte cuando diagnostics.otel.protocol no está definido. Solo http/protobuf habilita la exportación. |
OTEL_SEMCONV_STABILITY_OPT_IN | Define gen_ai_latest_experimental para emitir la forma más reciente de spans de inferencia GenAI: nombres de span {gen_ai.operation.name} {gen_ai.request.model}, tipo de span CLIENT y gen_ai.provider.name en lugar del gen_ai.system heredado. Las métricas GenAI siempre usan atributos acotados y de baja cardinalidad igualmente. |
OPENCLAW_OTEL_PRELOADED | Define 1 cuando otra precarga o proceso host ya registró el SDK global de OpenTelemetry. Entonces el Plugin omite su propio ciclo de vida de NodeSDK, pero aun así conecta escuchas de diagnóstico y respeta traces/metrics/logs. |
Privacidad y captura de contenido
El contenido sin procesar de modelos/herramientas no se exporta de forma predeterminada. Los spans llevan
identificadores acotados (canal, proveedor, modelo, categoría de error, ids de solicitud solo con hash,
origen de herramienta, propietario de herramienta, nombre/origen de Skill) y nunca incluyen texto de prompt,
texto de respuesta, entradas de herramienta, salidas de herramienta, rutas de archivos de Skill ni claves de sesión.
Los valores que parecen claves de sesión de agente con ámbito (por ejemplo, que empiezan por
agent:) se reemplazan por unknown en atributos de baja cardinalidad. Los registros OTLP
conservan gravedad, logger, ubicación de código, contexto de traza de confianza y
atributos saneados de forma predeterminada; el cuerpo del mensaje de registro sin procesar solo se exporta
cuando diagnostics.otel.captureContent es booleano true. Las subclaves granulares
captureContent.* nunca habilitan los cuerpos de registros. Las métricas de Talk exportan solo
metadatos de eventos acotados (modo, transporte, proveedor, tipo de evento): sin
transcripciones, cargas de audio, ids de sesión, ids de turno, ids de llamada, ids de sala ni
tokens de transferencia.
Las solicitudes salientes a modelos pueden incluir un encabezado W3C traceparent generado solo
a partir del contexto de traza diagnóstica propiedad de OpenClaw para la llamada a modelo activa.
Los encabezados traceparent existentes suministrados por el llamador se reemplazan, por lo que los plugins u
opciones personalizadas de proveedores no pueden falsificar ascendencia de trazas entre servicios.
Define diagnostics.otel.captureContent.* como true solo cuando tu colector
y política de retención estén aprobados para texto de prompts, respuestas, herramientas o
prompts del sistema. Cada subclave es independiente:
inputMessages: contenido del prompt del usuario.
outputMessages: contenido de la respuesta del modelo.
toolInputs: cargas de argumentos de herramientas.
toolOutputs: cargas de resultados de herramientas.
systemPrompt: prompt ensamblado del sistema/desarrollador.
toolDefinitions: nombres, descripciones y esquemas de herramientas del modelo.
Cuando cualquier subclave está habilitada, los spans de modelos y herramientas reciben atributos
openclaw.content.* acotados y redactados solo para esa clase.
El booleano captureContent: true habilita inputMessages, outputMessages, toolInputs, toolOutputs, toolDefinitions y los cuerpos de registros OTLP juntos, pero no systemPrompt; define captureContent.systemPrompt: true explícitamente si también necesitas el prompt del sistema ensamblado.
El contenido de toolInputs/toolOutputs se captura para las ejecuciones de herramientas del
runtime de agente integrado (openclaw.content.tool_input en
spans completados/con error, openclaw.content.tool_output en spans completados).
Las llamadas a herramientas de arneses externos (Codex, Claude CLI) emiten spans tool.execution.*
sin cargas de contenido. El contenido capturado viaja por un canal de confianza,
solo para escuchas, y nunca se coloca en el bus público de eventos de diagnóstico.
Muestreo y vaciado
- Trazas:
diagnostics.otel.sampleRate establece un TraceIdRatioBasedSampler
solo en el intervalo raíz (0.0 descarta todo, 1.0 conserva todo). Si no se establece, usa el valor predeterminado
del SDK de OpenTelemetry (siempre activado).
- Métricas:
diagnostics.otel.flushIntervalMs (limitado a un mínimo de
1000); si no se establece, usa el valor predeterminado de exportación periódica del SDK.
- Registros: los registros OTLP respetan
logging.level (nivel de registro de archivo) y usan la
ruta de censura de registros de diagnóstico, no el formato de consola. Las instalaciones de alto volumen
deberían preferir el muestreo/filtrado del recopilador OTLP antes que el
muestreo local. Establece diagnostics.otel.logsExporter: "stdout" cuando tu plataforma
ya envía stdout/stderr a un procesador de registros y no tienes ningún recopilador
de registros OTLP. Los registros de Stdout son un objeto JSON por línea con ts, signal,
service.name, gravedad, cuerpo, atributos censurados y campos de traza
de confianza cuando están disponibles.
- Correlación de registros de archivo: los registros de archivo JSONL incluyen
traceId,
spanId, parentSpanId y traceFlags de nivel superior cuando la llamada de registro lleva un contexto
de traza de diagnóstico válido, lo que permite a los procesadores de registros unir líneas de registro locales con
intervalos exportados.
- Correlación de solicitudes: las solicitudes HTTP del Gateway y los marcos WebSocket crean
un alcance interno de traza de solicitud. Los registros y eventos de diagnóstico dentro de ese
alcance heredan la traza de solicitud de forma predeterminada, mientras que los intervalos de ejecución de agente y llamada de modelo
se crean como hijos para que los encabezados
traceparent del proveedor permanezcan en la
misma traza.
- Correlación de llamadas de modelo: los intervalos
openclaw.model.call incluyen tamaños seguros de
componentes de prompt de forma predeterminada y atributos de tokens por llamada cuando el resultado del proveedor
expone el uso. openclaw.model.usage sigue siendo el intervalo de contabilidad
a nivel de ejecución para el costo agregado, el contexto y los paneles de canal, y
permanece en la misma traza de diagnóstico cuando el runtime emisor tiene un contexto
de traza de confianza.
Métricas exportadas
Uso del modelo
openclaw.tokens (contador, atributos: openclaw.token, openclaw.channel, openclaw.provider, openclaw.model, openclaw.agent)
openclaw.cost.usd (contador, atributos: openclaw.channel, openclaw.provider, openclaw.model)
openclaw.run.duration_ms (histograma, atributos: openclaw.channel, openclaw.provider, openclaw.model)
openclaw.context.tokens (histograma, atributos: openclaw.context, openclaw.channel, openclaw.provider, openclaw.model)
gen_ai.client.token.usage (histograma, métrica de convenciones semánticas de GenAI, atributos: gen_ai.token.type = input/output, gen_ai.provider.name, gen_ai.operation.name, gen_ai.request.model)
gen_ai.client.operation.duration (histograma, segundos, métrica de convenciones semánticas de GenAI, atributos: gen_ai.provider.name, gen_ai.operation.name, gen_ai.request.model, error.type opcional)
openclaw.model_call.duration_ms (histograma, atributos: openclaw.provider, openclaw.model, openclaw.api, openclaw.transport, más openclaw.errorCategory y openclaw.failureKind en errores clasificados)
openclaw.model_call.request_bytes (histograma, tamaño en bytes UTF-8 de la carga final de solicitud del modelo; sin contenido de carga sin procesar)
openclaw.model_call.response_bytes (histograma, tamaño en bytes UTF-8 de las cargas de fragmentos de respuesta transmitida; los deltas de texto de alta frecuencia, pensamiento y llamada de herramienta cuentan solo los bytes incrementales de delta; sin contenido de respuesta sin procesar)
openclaw.model_call.time_to_first_byte_ms (histograma, tiempo transcurrido antes del primer evento de respuesta transmitida)
openclaw.model.failover (contador, atributos: openclaw.provider, openclaw.model, openclaw.failover.to_provider, openclaw.failover.to_model, openclaw.failover.reason, openclaw.failover.suspended, openclaw.lane)
openclaw.skill.used (contador, atributos: openclaw.skill.name, openclaw.skill.source, openclaw.skill.activation, openclaw.agent opcional, openclaw.toolName opcional)
Flujo de mensajes
openclaw.webhook.received (contador, atributos: openclaw.channel, openclaw.webhook)
openclaw.webhook.error (contador, atributos: openclaw.channel, openclaw.webhook)
openclaw.webhook.duration_ms (histograma, atributos: openclaw.channel, openclaw.webhook)
openclaw.message.queued (contador, atributos: openclaw.channel, openclaw.source)
openclaw.message.received (contador, atributos: openclaw.channel, openclaw.source)
openclaw.message.dispatch.started (contador, atributos: openclaw.channel, openclaw.source)
openclaw.message.dispatch.completed (contador, atributos: openclaw.channel, openclaw.outcome, openclaw.reason, openclaw.source)
openclaw.message.dispatch.duration_ms (histograma, atributos: openclaw.channel, openclaw.outcome, openclaw.reason, openclaw.source)
openclaw.message.processed (contador, atributos: openclaw.channel, openclaw.outcome)
openclaw.message.duration_ms (histograma, atributos: openclaw.channel, openclaw.outcome)
openclaw.message.delivery.started (contador, atributos: openclaw.channel, openclaw.delivery.kind)
openclaw.message.delivery.duration_ms (histograma, atributos: openclaw.channel, openclaw.delivery.kind, openclaw.outcome, openclaw.errorCategory)
Talk
openclaw.talk.event (contador, atributos: openclaw.talk.event_type, openclaw.talk.mode, openclaw.talk.transport, openclaw.talk.brain, openclaw.talk.provider)
openclaw.talk.event.duration_ms (histograma, atributos: los mismos que openclaw.talk.event; emitido cuando un evento de Talk informa duración)
openclaw.talk.audio.bytes (histograma, atributos: los mismos que openclaw.talk.event; emitido para eventos de fotogramas de audio de Talk que informan longitud en bytes)
Colas y sesiones
openclaw.queue.lane.enqueue (contador, atributos: openclaw.lane)
openclaw.queue.lane.dequeue (contador, atributos: openclaw.lane)
openclaw.queue.depth (histograma, atributos: openclaw.lane o openclaw.channel=heartbeat)
openclaw.queue.wait_ms (histograma, atributos: openclaw.lane)
openclaw.session.state (contador, atributos: openclaw.state, openclaw.reason)
openclaw.session.stuck (contador, atributos: openclaw.state; emitido para contabilidad de sesión obsoleta recuperable)
openclaw.session.stuck_age_ms (histograma, atributos: openclaw.state; emitido para contabilidad de sesión obsoleta recuperable)
openclaw.session.turn.created (contador, atributos: openclaw.agent, openclaw.channel, openclaw.trigger)
openclaw.session.recovery.requested (contador, atributos: openclaw.state, openclaw.action, openclaw.active_work_kind, openclaw.reason)
openclaw.session.recovery.completed (contador, atributos: openclaw.state, openclaw.action, openclaw.status, openclaw.active_work_kind, openclaw.reason)
openclaw.session.recovery.age_ms (histograma, atributos: los mismos que el contador de recuperación correspondiente)
openclaw.run.attempt (contador, atributos: openclaw.attempt)
Telemetría de actividad de sesión
diagnostics.stuckSessionWarnMs es el umbral de edad sin progreso para los diagnósticos
de actividad de sesión. Una sesión processing no envejece hacia este
umbral mientras OpenClaw observe progreso de respuesta, herramienta, estado, bloque o runtime
ACP. Los mantenimientos de escritura no cuentan como progreso, por lo que aún se puede detectar
un modelo o arnés silencioso.
OpenClaw clasifica las sesiones según el trabajo que todavía puede observar:
session.long_running: el trabajo incrustado activo, las llamadas de modelo o las llamadas de herramienta
siguen progresando. Las llamadas de modelo con propietario que permanecen en silencio pasado
diagnostics.stuckSessionWarnMs también se informan como de larga ejecución antes de
diagnostics.stuckSessionAbortMs, por lo que los proveedores de modelo lentos o sin transmisión
no parecen sesiones de Gateway atascadas mientras se puedan observar para abortar.
session.stalled: existe trabajo activo, pero la ejecución activa no ha informado
progreso reciente. Las llamadas de modelo con propietario cambian de session.long_running a
session.stalled en diagnostics.stuckSessionAbortMs o después; la actividad
obsoleta de modelo/herramienta sin propietario no se trata como trabajo de larga ejecución inocuo.
Las ejecuciones incrustadas atascadas permanecen al principio solo en observación y luego abortan y drenan después de
diagnostics.stuckSessionAbortMs sin progreso para que los turnos en cola detrás
del carril puedan reanudarse. Cuando no se establece, el umbral de aborto usa de forma predeterminada la ventana
extendida más segura de al menos 5 minutos y 3 veces
diagnostics.stuckSessionWarnMs.
session.stuck: contabilidad de sesión obsoleta sin trabajo activo, o una sesión
en cola inactiva con actividad obsoleta de modelo/herramienta sin propietario. Esto libera el
carril de sesión afectado inmediatamente después de que pasen las puertas de recuperación.
La recuperación emite eventos estructurados session.recovery.requested y
session.recovery.completed. El estado de sesión de diagnóstico se marca como inactivo
solo después de un resultado de recuperación mutante (aborted o released) y solo si
la misma generación de procesamiento sigue siendo la actual.
Solo session.stuck emite el contador openclaw.session.stuck, el
histograma openclaw.session.stuck_age_ms y el intervalo openclaw.session.stuck.
Los diagnósticos repetidos de session.stuck retroceden mientras la sesión permanece
sin cambios, por lo que los paneles deberían alertar ante aumentos sostenidos en lugar de
cada marca de Heartbeat. Para la opción de configuración y los valores predeterminados, consulta
Referencia de configuración.
Las advertencias de actividad también emiten:
openclaw.liveness.warning (contador, atributos: openclaw.liveness.reason)
openclaw.liveness.event_loop_delay_p99_ms (histograma, atributos: openclaw.liveness.reason)
openclaw.liveness.event_loop_delay_max_ms (histograma, atributos: openclaw.liveness.reason)
openclaw.liveness.event_loop_utilization (histograma, atributos: openclaw.liveness.reason)
openclaw.liveness.cpu_core_ratio (histograma, atributos: openclaw.liveness.reason)
Ciclo de vida del arnés
openclaw.harness.duration_ms (histograma, atributos: openclaw.harness.id, openclaw.harness.plugin, openclaw.outcome, openclaw.harness.phase en errores)
Ejecución de herramientas y detección de bucles
openclaw.tool.execution.duration_ms (histograma, atributos: gen_ai.tool.name, openclaw.toolName, openclaw.tool.source, openclaw.tool.owner, openclaw.tool.params.kind, más openclaw.errorCategory en errores)
openclaw.tool.execution.blocked (contador, atributos: gen_ai.tool.name, openclaw.toolName, openclaw.tool.source, openclaw.tool.owner, openclaw.tool.params.kind, openclaw.deniedReason)
openclaw.tool.loop (contador, atributos: openclaw.toolName, openclaw.loop.level, openclaw.loop.action, openclaw.loop.detector, openclaw.loop.count, openclaw.loop.paired_tool opcional; emitido cuando se detecta un bucle repetitivo de llamadas de herramienta)
Exec
openclaw.exec.duration_ms (histograma, atributos: openclaw.exec.target, openclaw.exec.mode, openclaw.outcome, openclaw.failureKind)
Diagnósticos internos (memoria, cargas, salud del exportador)
openclaw.payload.large (contador, atributos: openclaw.payload.surface, openclaw.payload.action, openclaw.channel, openclaw.plugin, openclaw.reason)
openclaw.payload.large_bytes (histograma, atributos: los mismos que openclaw.payload.large)
openclaw.memory.rss_bytes / openclaw.memory.heap_used_bytes / openclaw.memory.heap_total_bytes / openclaw.memory.external_bytes / openclaw.memory.array_buffers_bytes (histogramas, sin atributos; muestras de memoria del proceso)
openclaw.memory.pressure (contador, atributos: openclaw.memory.level, openclaw.memory.reason)
openclaw.diagnostic.async_queue.dropped (contador, atributos: openclaw.diagnostic.async_queue.drop_class; descartes por contrapresión de cola de diagnóstico interna)
openclaw.telemetry.exporter.events (contador, atributos: openclaw.exporter, openclaw.signal, openclaw.status, openclaw.reason opcional, openclaw.errorCategory opcional; autotelemetría de ciclo de vida/fallo del exportador)
Intervalos exportados
openclaw.model.usage
openclaw.channel, openclaw.provider, openclaw.model
openclaw.tokens.* (entrada/salida/cache_read/cache_write/total)
gen_ai.system de forma predeterminada, o gen_ai.provider.name cuando se opta por las convenciones semánticas GenAI más recientes
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
gen_ai.system de forma predeterminada, o gen_ai.provider.name cuando se opta por las convenciones semánticas GenAI más recientes
gen_ai.request.model, gen_ai.operation.name, openclaw.provider, openclaw.model, openclaw.api, openclaw.transport
openclaw.errorCategory, error.type y openclaw.failureKind opcional en errores
openclaw.model_call.request_bytes, openclaw.model_call.response_bytes, openclaw.model_call.time_to_first_byte_ms
openclaw.model_call.prompt.input_messages_count, openclaw.model_call.prompt.input_messages_chars, openclaw.model_call.prompt.system_prompt_chars, openclaw.model_call.prompt.tool_definitions_count, openclaw.model_call.prompt.tool_definitions_chars, openclaw.model_call.prompt.total_chars (solo tamaños de componentes seguros, sin texto del prompt)
openclaw.model_call.usage.* y gen_ai.usage.* cuando el resultado de llamada al modelo contiene el uso del proveedor para esa llamada individual
- Evento de span
openclaw.provider.request con el atributo openclaw.upstreamRequestIdHash (acotado, basado en hash) cuando el resultado del proveedor upstream expone un id de solicitud; los ids sin procesar nunca se exportan
- Con
OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental, los spans de llamada al modelo usan el nombre de span de inferencia GenAI más reciente {gen_ai.operation.name} {gen_ai.request.model} y el tipo de span CLIENT en lugar de openclaw.model.call.
openclaw.harness.run
openclaw.harness.id, openclaw.harness.plugin, openclaw.outcome, openclaw.provider, openclaw.model, openclaw.channel
- Al completarse:
openclaw.harness.result_classification, openclaw.harness.yield_detected, openclaw.harness.items.started, openclaw.harness.items.completed, openclaw.harness.items.active
- En caso de error:
openclaw.harness.phase, openclaw.errorCategory, openclaw.harness.cleanup_failed opcional
openclaw.tool.execution
gen_ai.tool.name, openclaw.toolName, openclaw.tool.source, openclaw.tool.owner opcional, openclaw.tool.params.*
openclaw.errorCategory/openclaw.errorCode opcional en errores, openclaw.deniedReason y openclaw.outcome=blocked cuando la política o el sandbox lo deniegan
openclaw.exec
openclaw.exec.target, openclaw.exec.mode, openclaw.outcome, openclaw.failureKind, openclaw.exec.command_length, openclaw.exec.exit_code, openclaw.exec.exit_signal, openclaw.exec.timed_out
openclaw.webhook.processed
openclaw.channel, openclaw.webhook
openclaw.webhook.error
openclaw.channel, openclaw.webhook, openclaw.error
openclaw.message.processed
openclaw.channel, openclaw.outcome, 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 (sin prompt, historial, respuesta ni contenido de clave de sesión)
openclaw.tool.loop
openclaw.toolName, openclaw.loop.level, openclaw.loop.action, openclaw.loop.detector, openclaw.loop.count, openclaw.loop.paired_tool opcional (sin mensajes de bucle, parámetros ni salida de herramienta)
openclaw.memory.pressure
openclaw.memory.level, openclaw.memory.reason, openclaw.memory.rss_bytes, openclaw.memory.heap_used_bytes, openclaw.memory.heap_total_bytes, openclaw.memory.external_bytes, openclaw.memory.array_buffers_bytes, openclaw.memory.threshold_bytes/openclaw.memory.rss_growth_bytes/openclaw.memory.window_ms opcional
Cuando la captura de contenido está habilitada explícitamente, los spans de modelo y herramienta también pueden
incluir atributos openclaw.content.* acotados y redactados para las clases de
contenido específicas por las que optaste.
Catálogo de eventos de diagnóstico
Los eventos siguientes respaldan las métricas y spans anteriores. Los Plugins también pueden
suscribirse a ellos directamente sin exportación OTLP.
Uso del modelo
model.usage - tokens, coste, duración, contexto, proveedor/modelo/canal,
ids de sesión. usage es la contabilidad de proveedor/turno para coste y telemetría;
context.used es la instantánea actual de prompt/contexto y puede ser inferior al
usage.total del proveedor cuando intervienen entradas en caché o llamadas de bucle de herramientas.
Flujo de mensajes
webhook.received / webhook.processed / webhook.error
message.queued / message.processed
message.delivery.started / message.delivery.completed / message.delivery.error
Cola y sesión
queue.lane.enqueue / queue.lane.dequeue
session.state / session.long_running / session.stalled / session.stuck
run.attempt / run.progress
diagnostic.heartbeat (contadores agregados: webhooks/cola/sesión)
Ciclo de vida del harness
harness.run.started / harness.run.completed / harness.run.error -
ciclo de vida por ejecución para el harness del agente. Incluye harnessId, pluginId
opcional, proveedor/modelo/canal e id de ejecución. La finalización añade
durationMs, outcome, resultClassification opcional, yieldDetected
y recuentos de itemLifecycle. Los errores añaden phase
(prepare/start/send/resolve/cleanup), errorCategory y
cleanupFailed opcional.
Exec
exec.process.completed - resultado terminal, duración, destino, modo, código
de salida y tipo de fallo. El texto del comando y los directorios de trabajo no se
incluyen.
exec.approval.followup_suppressed - seguimiento de aprobación obsoleto descartado
tras un rebote de sesión. Incluye approvalId, reason
(session_rebound), phase (direct_delivery o gateway_preflight)
y la marca de tiempo del dispatcher. No se incluyen claves de sesión, rutas ni texto
del comando.
Sin un exportador
Mantén los eventos de diagnóstico disponibles para Plugins o receptores personalizados sin ejecutar
diagnostics-otel:
{
diagnostics: { enabled: true },
}
Para una salida de depuración dirigida sin aumentar logging.level, usa las banderas de diagnóstico. Las banderas no distinguen entre mayúsculas y minúsculas y admiten comodines (telegram.* o
*):
{
diagnostics: { flags: ["telegram.http"] },
}
O como sobrescritura puntual de variable de entorno:
OPENCLAW_DIAGNOSTICS=telegram.http,telegram.payload openclaw gateway
La salida de banderas va al archivo de registro estándar (logging.file) y aun así
se redacta mediante logging.redactSensitive. Guía completa:
Banderas de diagnóstico.
Deshabilitar
{
diagnostics: { otel: { enabled: false } },
}
O deja diagnostics-otel fuera de plugins.allow, o ejecuta
openclaw plugins disable diagnostics-otel.
Relacionado