diagnostics-otel
usando OTLP/HTTP (protobuf). Los registros también pueden escribirse como JSONL en stdout para
pipelines de registros de contenedores y entornos aislados. Cualquier recopilador o backend que acepte
OTLP/HTTP funciona sin cambios en el código. Para los registros en archivos locales, consulte
Registros.
- 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-otelse suscribe a esos eventos y los exporta como métricas, trazas y registros mediante OTLP/HTTP, y puede duplicar los registros en JSONL en stdout.- Las llamadas a proveedores reciben un encabezado W3C
traceparentprocedente del contexto de span de llamada al 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 conectan cuando tanto la superficie de diagnósticos como el plugin están habilitados, por lo que el coste en proceso se mantiene cerca de cero de forma predeterminada.
Inicio rápido
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. Establezca explícitamente traces: false y metrics: false si solo desea logsExporter: "stdout" con un valor de protocolo que no sea OTLP.Señales exportadas
Active o desactive
traces, metrics y logs de forma independiente. Las trazas y las 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; establezca diagnostics.otel.logsExporter en stdout para usar JSONL en
stdout, o both para ambos.
Referencia de configuración
Variables de entorno
Privacidad y captura de contenido
El contenido sin procesar de modelos y herramientas no se exporta de forma predeterminada. Los spans contienen identificadores acotados (canal, proveedor, modelo, categoría de error, identificadores de solicitud solo como hash, origen de la herramienta, propietario de la herramienta, nombre/origen de la Skill) y nunca incluyen texto del prompt, texto de respuesta, entradas de herramientas, salidas de herramientas, rutas de archivos de Skills ni claves de sesión. Los valores que parecen claves de sesión de agente con ámbito (por ejemplo, que comienzan poragent:) se sustituyen por unknown en los atributos de baja cardinalidad. Los registros
OTLP conservan de forma predeterminada la gravedad, el registrador, la ubicación del código, el contexto de traza
de confianza y los atributos saneados; el cuerpo del mensaje de registro sin procesar solo se exporta
cuando diagnostics.otel.captureContent es el booleano true. Las subclaves
granulares captureContent.* nunca habilitan los cuerpos de los registros. Las métricas de Talk solo exportan
metadatos de eventos acotados (modo, transporte, proveedor, tipo de evento), sin
transcripciones, cargas de audio, identificadores de sesión, identificadores de turno, identificadores de llamada, identificadores de sala ni
tokens de transferencia.
Las solicitudes salientes a modelos pueden incluir un encabezado W3C traceparent generado únicamente
a partir del contexto de traza de diagnóstico propiedad de OpenClaw para la llamada activa al modelo.
Los encabezados traceparent existentes proporcionados por el llamador se sustituyen, por lo que los plugins o
las opciones personalizadas del proveedor no pueden falsificar la ascendencia de trazas entre servicios.
Establezca diagnostics.otel.captureContent.* en true solo cuando el recopilador
y la 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 del sistema/desarrollador ensamblado.toolDefinitions- nombres, descripciones y esquemas de herramientas del modelo.
openclaw.content.* acotados y redactados solo para esa clase.
El booleano
captureContent: true habilita conjuntamente inputMessages, outputMessages, toolInputs, toolOutputs, toolDefinitions y los cuerpos de los registros OTLP, pero no systemPrompt; establezca captureContent.systemPrompt: true explícitamente si también necesita el prompt del sistema ensamblado.toolInputs/toolOutputs se captura para las ejecuciones de herramientas
del entorno de ejecución de agente integrado (openclaw.content.tool_input y
gen_ai.tool.call.arguments en spans completados/con error;
openclaw.content.tool_output y gen_ai.tool.call.result en spans completados).
Los nombres openclaw.content.* siguen siendo los nombres de atributos estables de OpenClaw;
las copias gen_ai.tool.call.* los replican para visores nativos de semconv.
Las llamadas a herramientas de arneses externos (Codex, Claude CLI) emiten
spans tool.execution.* sin cargas de contenido. El contenido capturado se transmite por un
canal de confianza exclusivo para listeners y nunca se incluye en el bus público de eventos
de diagnóstico.
Muestreo y vaciado
- Trazas:
diagnostics.otel.sampleRateestablece unTraceIdRatioBasedSamplersolo en el tramo raíz (0.0descarta todo,1.0conserva todo). Si no se establece, se usa el valor predeterminado del SDK de OpenTelemetry (siempre activado). - Métricas:
diagnostics.otel.flushIntervalMs(limitado a un mínimo de1000); si no se establece, se usa el valor predeterminado de exportación periódica del SDK. - Registros: los registros OTLP respetan
logging.level(nivel de registro del archivo) y usan la ruta de censura de registros de diagnóstico, no el formato de consola. Las instalaciones de gran volumen deben preferir el muestreo o filtrado del recopilador OTLP al muestreo local. Establezcadiagnostics.otel.logsExporter: "stdout"cuando la plataforma ya envíe stdout/stderr a un procesador de registros y no haya ningún recopilador de registros OTLP. Los registros de stdout son un objeto JSON por línea conts,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,parentSpanIdytraceFlagsen el nivel superior cuando la llamada de registro contiene un contexto de traza de diagnóstico válido, lo que permite a los procesadores de registros asociar las líneas de registro locales con los tramos exportados. - Correlación de solicitudes: las solicitudes HTTP y las tramas WebSocket del Gateway crean
un ámbito interno de traza de solicitud. Los registros y eventos de diagnóstico dentro de ese
ámbito heredan de forma predeterminada la traza de la solicitud, mientras que los tramos de ejecución del agente y de llamada
al modelo se crean como elementos secundarios para que los encabezados
traceparentdel proveedor permanezcan en la misma traza. - Correlación de llamadas al modelo: los tramos
openclaw.model.callincluyen de forma predeterminada tamaños seguros de los componentes del prompt y atributos de tokens por llamada cuando el resultado del proveedor expone el uso.openclaw.model.usagesigue siendo el tramo de contabilización de nivel de ejecución para los paneles agregados de coste, contexto y canal, y permanece en la misma traza de diagnóstico cuando el entorno de ejecución emisor tiene un contexto de traza de confianza.
Unidades de observación de llamadas al modelo
Cada tramoopenclaw.model.call identifica lo que mide su ciclo de vida mediante
openclaw.model_call.observation_unit:
request- una solicitud observable al modelo o proveedor. Las llamadas nativas al modelo integrado usan esta unidad, y los exportadores interpretan la ausencia de un valor comorequestpara mantener la compatibilidad con emisores antiguos o externos.turn- un turno opaco de la CLI del agente que puede contener solicitudes ocultas al modelo, reintentos, trabajo de herramientas o trabajo en segundo plano. Las llamadas de la CLI de Claude Code y del servidor de aplicaciones de Codex usan esta unidad.
chat, generate_content o text_completion), mientras que los tramos de turno usan
gen_ai.operation.name = invoke_agent. Ambos contribuyen a
gen_ai.client.operation.duration, donde el nombre de la operación mantiene separada la latencia de las
solicitudes directas de la latencia del turno completo. Las métricas OTEL de llamadas al modelo de OpenClaw
también incluyen openclaw.model_call.observation_unit; las métricas de llamadas al modelo de Prometheus
exponen la etiqueta equivalente observation_unit.
Fidelidad de las llamadas al modelo de la CLI de Claude Code
Los turnos de la CLI de Claude Code emiten un único tramo sintético de nivel de turnoopenclaw.model.call.
No son tramos de solicitudes HTTP de Anthropic. Usan openclaw.api = claude-code, openclaw.model_call.observation_unit = turn e identifican
la operación como gen_ai.operation.name = invoke_agent. Identifican
el límite de la CLI de OpenClaw mediante
openclaw.transport:
stdio- proceso local de Claude Code de una sola ejecución.stdio-live- un turno en una sesión stdio persistente y administrada de Claude.paired-node-cli- ejecución de Claude Code de una sola vez delegada a un Node emparejado.
openclaw.harness.run (openclaw.harness.id = claude-cli)
contiene openclaw.run, que contiene el tramo openclaw.model.call
de Claude. Los tramos del arnés y de ejecución son límites sintéticos de turno de OpenClaw, no
fases internas de Claude Code. Los turnos de una sola ejecución y de stdio administrado usan la misma
jerarquía; un reintento real con una sesión nueva crea otro elemento secundario de llamada al modelo dentro
de la misma ejecución de OpenClaw.
El tramo comienza cuando OpenClaw admite el turno preparado de la CLI y termina únicamente después de que
ese turno tenga éxito o falle. En las sesiones administradas, un resultado provisional satisfactorio
no finaliza el tramo mientras Claude informe de agentes o flujos de trabajo en segundo plano que mantienen
el resultado; el resultado final posterior al vaciado sí lo finaliza. Las cancelaciones, los tiempos de espera agotados, los fallos del proceso,
los fallos de salida o análisis y otros fallos del turno finalizan el mismo tramo con un error.
Claude Code informa del uso por mensaje del asistente y también puede informar del uso acumulado
en su resultado final. La contabilización de respuestas de OpenClaw sigue usando el
último mensaje del asistente para no modificar la semántica de costes existente; el
tramo de llamada al modelo de nivel de turno usa el uso acumulado final cuando está disponible,
incluidos los tokens de lectura y creación de caché.
En estos tramos de la CLI, los campos de bytes y tiempo describen el límite observable de la
CLI de OpenClaw:
openclaw.model_call.request_byteses el tamaño UTF-8 del valor del prompt enviado mediante stdin/argv en una sola ejecución, o del sobre de usuario JSONL de stdio administrado. No es el tamaño de la solicitud oculta al modelo de Claude Code.openclaw.model_call.response_byteses el tamaño UTF-8 de stdout de la CLI de Claude observado durante el turno. No es el tamaño de la respuesta HTTP de Anthropic.openclaw.model_call.time_to_first_byte_mses el tiempo hasta la primera salida observable en stdout o stderr de la CLI de Claude. No es el TTFB de la red.
captureContent correspondientes habilitados, el tramo exporta
el prompt efectivo que OpenClaw envía a Claude Code, el prompt del sistema añadido por OpenClaw
y el texto, razonamiento e identidad de llamada a herramienta visibles del asistente mediante
gen_ai.input.messages, gen_ai.output.messages y
gen_ai.system_instructions. Los argumentos de las herramientas, las firmas opacas de pensamiento y
los resultados de las herramientas se omiten del sobre del asistente de Claude. OpenClaw no
afirma tener acceso al prompt privado del sistema de Claude Code, a la carga útil oculta de solicitudes reanudadas o
compactadas, a los esquemas nativos de herramientas internas, a la solicitud HTTP sin procesar de Anthropic,
a los reintentos internos, al identificador de solicitud ascendente ni al TTFB real de la red. Dado que
Claude Code no expone con precisión sus definiciones nativas efectivas de herramientas,
estos tramos no rellenan gen_ai.tool.definitions.
Los tramos de herramientas del arnés externo de Claude siguen conteniendo solo metadatos, incluso cuando la captura de contenido
de herramientas está habilitada. Como en todos los tramos del modelo, el contenido capturado de la CLI de Claude usa
la ruta reservada para receptores de confianza y los límites existentes de censura y tamaño
del exportador; el contenido permanece desactivado de forma predeterminada.
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 para solicitudes al modelo y turnos sintéticos del agente; atributos:gen_ai.provider.name,gen_ai.operation.name,gen_ai.request.model,error.typeopcional; las observaciones de turnos usangen_ai.operation.name = invoke_agent)openclaw.model_call.duration_ms(histograma, atributos:openclaw.provider,openclaw.model,openclaw.api,openclaw.transport,openclaw.model_call.observation_unit, además deopenclaw.errorCategoryyopenclaw.failureKinden errores clasificados)openclaw.model_call.request_bytes(histograma, tamaño en bytes UTF-8 de la carga útil final de la solicitud al modelo; para la CLI de Claude Code, la entrada o el sobre observable del prompt descrito anteriormente; sin contenido sin procesar de la carga útil)openclaw.model_call.response_bytes(histograma, tamaño en bytes UTF-8 de las cargas útiles de los fragmentos de respuesta transmitidos; los deltas de texto, pensamiento y llamadas a herramientas de alta frecuencia cuentan únicamente los bytesdeltaincrementales; para la CLI de Claude Code, bytes de stdout observados; sin contenido sin procesar de la respuesta)openclaw.model_call.time_to_first_byte_ms(histograma, tiempo transcurrido antes del primer evento de respuesta transmitida; para la CLI de Claude Code, primera salida observable de la CLI en lugar del TTFB de la red)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.agentopcional,openclaw.toolNameopcional)
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)
Conversación
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 queopenclaw.talk.event; se emite cuando un evento de conversación informa de la duración)openclaw.talk.audio.bytes(histograma, atributos: los mismos queopenclaw.talk.event; se emite para eventos de tramas de audio de conversación que informan de la 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.laneoopenclaw.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; se emite para registros internos recuperables de sesiones obsoletas)openclaw.session.stuck_age_ms(histograma, atributos:openclaw.state; se emite para registros internos recuperables de sesiones obsoletas)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 sesiones
Una sesiónprocessing no avanza hacia el umbral de actividad integrado mientras OpenClaw observa progreso de respuesta, herramienta, estado, bloque o entorno de ejecución ACP. Las señales de mantenimiento 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 integrado activo, las llamadas al modelo o las llamadas a herramientas siguen progresando. Las llamadas silenciosas al modelo con propietario también se notifican como de larga duración antes del umbral de cancelación integrado, por lo que los proveedores de modelos lentos o sin transmisión no parecen sesiones del Gateway bloqueadas mientras la cancelación sea observable.session.stalled: existe trabajo activo, pero la ejecución activa no ha informado de progreso reciente. Las llamadas al modelo con propietario cambian desession.long_runningasession.stalledal alcanzar o superar el umbral de cancelación integrado; la actividad obsoleta del modelo o de herramientas sin propietario no se trata como trabajo inofensivo de larga duración. Las ejecuciones integradas bloqueadas permanecen inicialmente en modo de solo observación y, después, se cancelan y drenan tras superar el umbral de cancelación sin progreso, para que puedan reanudarse los turnos en cola detrás del carril.session.stuck: registros internos de sesión obsoletos sin trabajo activo, o una sesión inactiva en cola con actividad obsoleta del modelo o de herramientas sin propietario. Esto libera el carril de la sesión afectada inmediatamente después de superar las comprobaciones de recuperación.
session.recovery.requested y
session.recovery.completed. El estado de diagnóstico de la sesión se marca como inactivo
solo después de un resultado de recuperación con cambios (aborted o released) y únicamente si
la misma generación de procesamiento sigue vigente.
Solo session.stuck emite el contador openclaw.session.stuck, el
histograma openclaw.session.stuck_age_ms y el tramo openclaw.session.stuck.
Los diagnósticos session.stuck repetidos reducen su frecuencia mientras la sesión permanezca
sin cambios, por lo que los paneles deben generar alertas ante aumentos sostenidos y no
en cada pulso de Heartbeat. Para consultar la opción de configuración y los valores predeterminados, véase
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.phaseen caso de error)
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, además deopenclaw.errorCategoryen caso de error)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_toolopcional; se emite cuando se detecta un bucle repetitivo de llamadas a herramientas)
Exec
openclaw.exec.duration_ms(histograma, atributos:openclaw.exec.target,openclaw.exec.mode,openclaw.outcome,openclaw.failureKind)
Componentes internos de diagnóstico (memoria, cargas útiles y estado 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 queopenclaw.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 la cola interna de diagnóstico)openclaw.telemetry.exporter.events(contador, atributos:openclaw.exporter,openclaw.signal,openclaw.status,openclaw.reasonopcional,openclaw.errorCategoryopcional; telemetría propia del ciclo de vida o los fallos del exportador)
Tramos exportados
openclaw.model.usageopenclaw.channel,openclaw.provider,openclaw.modelopenclaw.tokens.*(entrada/salida/lectura de caché/escritura de caché/total)gen_ai.systemde forma predeterminada, ogen_ai.provider.namecuando se habilitan las convenciones semánticas más recientes de GenAIgen_ai.request.model,gen_ai.operation.name,gen_ai.usage.*
openclaw.runopenclaw.outcome,openclaw.channel,openclaw.provider,openclaw.model,openclaw.errorCategory
openclaw.model.callgen_ai.systemde forma predeterminada, ogen_ai.provider.namecuando se habilitan las convenciones semánticas más recientes de GenAIgen_ai.request.model,gen_ai.operation.name,openclaw.provider,openclaw.model,openclaw.api,openclaw.transport,openclaw.model_call.observation_unit(requestoturn)openclaw.errorCategory,error.typeyopenclaw.failureKindopcional en caso de erroropenclaw.model_call.request_bytes,openclaw.model_call.response_bytes,openclaw.model_call.time_to_first_byte_msopenclaw.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 seguros de componentes, sin texto del prompt)openclaw.model_call.usage.*ygen_ai.usage.*cuando el resultado incluye el uso de esa solicitud o del turno agregado- Evento de tramo
openclaw.provider.requestcon el atributoopenclaw.upstreamRequestIdHash(acotado y basado en hash) cuando el resultado del proveedor ascendente expone un id. de solicitud; los identificadores sin procesar nunca se exportan - Con
OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental, los tramos de solicitud usan el nombre de tramo de inferencia de GenAI más reciente{gen_ai.operation.name} {gen_ai.request.model}. Los tramos de turno usaninvoke_agentporque OpenClaw no atribuye un nombre de agente nativo desde el límite opaco de la CLI. Ambos usan el tipo de tramoCLIENTen lugar deopenclaw.model.call.
openclaw.harness.runopenclaw.harness.id,openclaw.harness.plugin,openclaw.outcome,openclaw.provider,openclaw.model,openclaw.channel- Al finalizar:
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_failedopcional
openclaw.tool.executiongen_ai.tool.name,gen_ai.operation.name(execute_tool),openclaw.toolName,openclaw.tool.source,gen_ai.tool.call.idopcional,openclaw.tool.owner,openclaw.tool.params.*openclaw.errorCategory/openclaw.errorCodeopcionales en caso de error,openclaw.deniedReasonyopenclaw.outcome=blockedcuando la política o el entorno aislado deniegan la operación
openclaw.execopenclaw.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.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(sin contenido del prompt, historial, respuesta ni clave de sesión)
openclaw.tool.loopopenclaw.toolName,openclaw.loop.level,openclaw.loop.action,openclaw.loop.detector,openclaw.loop.count,openclaw.loop.paired_toolopcional (sin mensajes de bucle, parámetros ni salida de herramientas)
openclaw.memory.pressureopenclaw.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_msopcionales
openclaw.content.* acotados y censurados para las clases de
contenido específicas que se hayan habilitado.
Catálogo de eventos de diagnóstico
Los eventos siguientes respaldan las métricas y los tramos anteriores o están disponibles para la suscripción directa de plugins.run.progress y run.execution_phase son señales de ciclo de vida
exclusivamente directas; el plugin diagnostics-otel no las exporta como
señales OTLP independientes. Los tipos de eventos y los valores de run.execution_phase.phase son
aditivos. Los consumidores de TypeScript deben conservar ramas predeterminadas en lugar de asumir que
cualquiera de las uniones será exhaustiva permanentemente.
Uso del modelo
model.usage- tokens, coste, duración, contexto, proveedor/modelo/canal, identificadores de sesión.usagerepresenta la contabilidad del proveedor/turno para el coste y la telemetría;context.usedes la instantánea actual del prompt/contexto y puede ser inferior ausage.totaldel proveedor cuando intervienen entradas almacenadas en caché o llamadas de bucles de herramientas.
webhook.received/webhook.processed/webhook.errormessage.queued/message.processedmessage.delivery.started/message.delivery.completed/message.delivery.error
queue.lane.enqueue/queue.lane.dequeuesession.state/session.long_running/session.stalled/session.stuckrun.attempt/run.progressrun.execution_phase(hitos públicos de inicio del ejecutor integrado correlacionados con la sesión)diagnostic.heartbeat(contadores agregados: webhooks/cola/sesión)
harness.run.started/harness.run.completed/harness.run.error- ciclo de vida por ejecución del arnés del agente. IncluyeharnessId,pluginIdopcional, proveedor/modelo/canal e id. de ejecución. La finalización añadedurationMs,outcome,resultClassificationopcional,yieldDetectedy recuentos deitemLifecycle. Los errores añadenphase(prepare/start/send/resolve/cleanup),errorCategoryycleanupFailedopcional.
exec.process.completed- resultado del terminal, duración, destino, modo, código de salida y tipo de fallo. No se incluyen el texto del comando ni los directorios de trabajo.exec.approval.followup_suppressed- seguimiento de aprobación obsoleto descartado después de que una sesión se volviera a vincular. IncluyeapprovalId,reason(session_rebound),phase(direct_deliveryogateway_preflight) y la marca de tiempo del despachador. No se incluyen las claves de sesión, las rutas ni el texto del comando.
Sin un exportador
Mantenga los eventos de diagnóstico disponibles para plugins o receptores personalizados sin ejecutardiagnostics-otel:
logging.level, use indicadores de
diagnóstico. Los indicadores no distinguen entre mayúsculas y minúsculas y admiten comodines (telegram.* o
*):
logging.file) y
logging.redactSensitive continúa ocultando los datos confidenciales. Guía completa:
Indicadores de diagnóstico.
Desactivar
diagnostics-otel de plugins.allow o ejecutar
openclaw plugins disable diagnostics-otel.
Contenido relacionado
- Registro - registros en archivos, salida de consola, seguimiento mediante la CLI y la pestaña Logs de la interfaz de control
- Funcionamiento interno del registro del Gateway - estilos de registro de WS, prefijos de subsistemas y captura de la consola
- Indicadores de diagnóstico - indicadores específicos de registros de depuración
- Exportación de diagnósticos - herramienta de paquetes de soporte para operadores (independiente de la exportación de OTEL)
- Referencia de configuración - referencia completa del campo
diagnostics.*