Telemetry
Qué observa el lab. Las métricas, los logs, los traces y los dashboards.
Propósito
Esta página documenta la telemetry del lab: las métricas que recolecta el lab, los logs que escribe, los traces que produce y los dashboards que el operator puede construir a partir de ellos.
La telemetry es la base del modelo de auditoría (Modelo de auditoría) y de los health checks (Health Checks).
Métricas
El lab recolecta las siguientes métricas:
Métricas del Coordinator
| Métrica | Tipo | Descripción |
|---|---|---|
coordinator.sessions.active | gauge | El número de sesiones activas. |
coordinator.requests.total | counter | El número total de requests recibidas. |
coordinator.requests.failed | counter | El número total de requests fallidas. |
coordinator.duration_ms.p50 | gauge | La duración p50 de las requests. |
coordinator.duration_ms.p95 | gauge | La duración p95 de las requests. |
coordinator.duration_ms.p99 | gauge | La duración p99 de las requests. |
coordinator.tokens.used | counter | El total de tokens usados por el Coordinator. |
coordinator.tokens.remaining | gauge | Los tokens restantes en la quota. |
Métricas del Research Worker
| Métrica | Tipo | Descripción |
|---|---|---|
research.missions.active | gauge | El número de misiones activas. |
research.missions.total | counter | El número total de misiones iniciadas. |
research.missions.succeeded | counter | El número total de misiones que succeed. |
research.missions.failed | counter | El número total de misiones que fallaron. |
research.missions.partial | counter | El número total de misiones parciales. |
research.phases.duration_ms | histogram | La duración de cada fase, por phase ID. |
research.adapters.requests | counter | El número de requests por adaptador. |
research.adapters.errors | counter | El número de errores por adaptador. |
research.tokens.used | counter | El total de tokens usados por el adaptador Perplexity. |
Métricas del Media Agent
| Métrica | Tipo | Descripción |
|---|---|---|
media.requests.total | counter | El número total de media requests. |
media.playbacks.started | counter | El número total de playbacks iniciadas. |
media.playbacks.failed | counter | El número total de playbacks que fallaron. |
media.backends.used | counter | El número de veces que se usó cada backend. |
media.devices.discovered | gauge | El número de devices actualmente descubiertos. |
Métricas del Web Agent
| Métrica | Tipo | Descripción |
|---|---|---|
web.actions.total | counter | El número total de acciones del browser. |
web.actions.failed | counter | El número total de acciones fallidas. |
web.snapshots.total | counter | El número total de snapshots tomados. |
web.duration_ms.p50 | gauge | La duración p50 de las acciones. |
web.duration_ms.p95 | gauge | La duración p95 de las acciones. |
Métricas del Coding Assistant
| Métrica | Tipo | Descripción |
|---|---|---|
coding.invocations.total | counter | El número total de invocaciones del sub-agent. |
coding.invocations.failed | counter | El número total de invocaciones que fallaron. |
coding.duration_ms.p50 | gauge | La duración p50 de las invocaciones. |
coding.iterations.p50 | gauge | Las iteraciones p50 por invocación. |
coding.tokens.used | counter | El total de tokens usados por el sub-agent. |
Logs
El lab escribe los siguientes logs:
Log del Coordinator
El log del Coordinator está en {workspace-root}/logs/coordinator.log. Registra:
- Cada request recibida (con session ID y request ID).
- Cada response enviada (con status, duración y resumen del resultado).
- Cada cambio de estado (inicio/fin de sesión, memory write, etc.).
- Cada error (con stack trace).
El formato del log es JSON Lines (un objeto JSON por línea). El log se rota diario.
Log de Scout
El log de Scout está en ~/.openclaw-scout/logs/gateway.log. Registra el mismo tipo de eventos para el Research Worker y el Media Agent.
Log del Coding sub-agent
El log del Coding sub-agent está en ~/Documents/Codex/YYYY-MM-DD/<session>/log.jsonl. El sub-agent escribe su propio formato de log.
Log de misión
Cada misión tiene un log en {research-root}/runs/<mission_id>/logs/mission.log. El log registra cada transición de fase y cada escritura de artefacto.
Request journal
El request journal está en {framework-root}/runtime/request_journal.jsonl. Registra cada llamada externa. El journal es el log más detallado; está documentado en External Providers → Request journal.
Traces
El lab produce traces para misiones de research. Un trace es un directed acyclic graph de ejecuciones de fase. El trace se reconstruye a partir de phase.json y el mission log.
El formato del trace es OpenTelemetry-compatible. El Coordinator puede exportar el trace a un backend de tracing si hay uno configurado.
Dashboards
El lab tiene un pequeño conjunto de dashboards construidos a partir de la telemetry. Los dashboards son:
Dashboard del Coordinator
- Sesiones activas (gauge).
- Request rate (counter rate).
- Error rate (counter rate).
- Percentiles de duración de requests (gauges).
- Token usage (counter rate).
Dashboard del Research Worker
- Misiones activas (gauge).
- Mission rate (counter rate).
- Tasa de éxito de misiones (gauge).
- Percentiles de duración de fase (gauges, por fase).
- Error rate de adaptadores (counter rate, por adaptador).
Dashboard del Media Agent
- Playback rate (counter rate).
- Playback failure rate (counter rate).
- Backend usage (counter rate, por backend).
- Device count (gauge).
Los dashboards los construye el operator a partir de las métricas. El lab no tiene un servidor de dashboards built-in; el operator exporta las métricas a un backend de su elección (p. ej., Prometheus + Grafana, o un dashboard simple basado en texto).
Retención
| Data | Retención | Ubicación |
|---|---|---|
| Coordinator log | 30 días | {workspace-root}/logs/ |
| Scout log | 30 días | ~/.openclaw-scout/logs/ |
| Mission log | Mission lifetime + 30 días | {research-root}/runs/<id>/logs/ |
| Request journal | Indefinida (rotada) | {framework-root}/runtime/ |
| Metrics | 90 días | (exportadas) |
La retención la aplica la tarea de cleanup diaria.
Sampling
Algunas métricas se muestrean para reducir overhead:
*_duration_ms.p50/p95/p99se calcula a partir de un sample del 10% de las requests.- El request journal registra cada request, pero el body de las requests grandes se trunca.
El sampling rate es configurable. El default es 10% para percentiles, 0% de truncación para bodies del journal.