Gateway
OpenTelemetry-export
OpenClaw exporteert diagnostische gegevens via de officiële diagnostics-otel-Plugin
met OTLP/HTTP (protobuf). Logboeken kunnen ook als stdout-JSONL worden geschreven voor
logpijplijnen van containers en sandboxes. Elke collector of backend die
OTLP/HTTP accepteert, werkt zonder codewijzigingen. Zie voor lokale bestandslogboeken
Logboekregistratie.
- Diagnostische gebeurtenissen zijn gestructureerde records binnen het proces die worden uitgezonden door de Gateway en gebundelde plugins voor modeluitvoeringen, berichtenstromen, sessies, wachtrijen en exec.
diagnostics-otelabonneert zich op deze gebeurtenissen en exporteert ze als OpenTelemetry-metrische gegevens, traces en logboeken via OTLP/HTTP, en kan logboekrecords spiegelen naar stdout-JSONL.- Provideraanroepen ontvangen een W3C
traceparent-header uit de vertrouwde spancontext van OpenClaw voor modelaanroepen wanneer het providertransport aangepaste headers accepteert. Door plugins uitgezonden tracecontext wordt niet doorgegeven. - Exporters worden alleen gekoppeld wanneer zowel het diagnostische oppervlak als de Plugin zijn ingeschakeld, zodat de kosten binnen het proces standaard vrijwel nul blijven.
Snel aan de slag
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, }, },}Of schakel de Plugin in via de CLI: openclaw plugins enable diagnostics-otel.
Geëxporteerde signalen
| Signaal | Wat het bevat |
|---|---|
| Metrische gegevens | Tellers/histogrammen voor tokengebruik, kosten, uitvoeringsduur, failover, gebruik van Skills, berichtenstroom, Talk-gebeurtenissen, wachtrijbanen, sessiestatus/-herstel, tooluitvoering, exec, geheugen, beschikbaarheid en gezondheid van exporters. |
| Traces | Spans voor modelgebruik, modelaanroepen, de levenscyclus van de harness, gebruik van Skills, tooluitvoering, exec, verwerking van webhooks/berichten, contextopbouw en toollussen. |
| Logboeken | Gestructureerde logging.file-records die via OTLP of stdout-JSONL worden geëxporteerd wanneer diagnostics.otel.logs is ingeschakeld; logboekinhoud wordt achtergehouden tenzij het vastleggen van inhoud expliciet is ingeschakeld. |
Schakel traces, metrics en logs onafhankelijk in of uit. Traces en metrische gegevens
zijn standaard ingeschakeld wanneer diagnostics.otel.enabled waar is; logboeken zijn standaard uitgeschakeld
en worden alleen geëxporteerd wanneer diagnostics.otel.logs expliciet true is. Logboekexport
gebruikt standaard OTLP; stel diagnostics.otel.logsExporter in op stdout voor JSONL op
stdout, of op both voor beide.
Configuratiereferentie
{ 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 schakelt OTLP-export uit serviceName: "openclaw-gateway", // indien niet ingesteld, wordt teruggevallen op OTEL_SERVICE_NAME en vervolgens "openclaw" headers: { "x-collector-token": "..." }, traces: true, metrics: true, logs: true, logsExporter: "otlp", // otlp | stdout | beide sampleRate: 0.2, // sampler voor root-spans, 0.0..1.0 flushIntervalMs: 60000, // exportinterval voor metrische gegevens (min. 1000ms) captureContent: { enabled: false, inputMessages: false, outputMessages: false, toolInputs: false, toolOutputs: false, systemPrompt: false, toolDefinitions: false, }, }, },}Omgevingsvariabelen
| Variabele | Doel |
|---|---|
OTEL_EXPORTER_OTLP_ENDPOINT |
Terugvalwaarde voor diagnostics.otel.endpoint wanneer de configuratiesleutel niet is ingesteld. |
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT / OTEL_EXPORTER_OTLP_METRICS_ENDPOINT / OTEL_EXPORTER_OTLP_LOGS_ENDPOINT |
Signaalspecifieke terugval-eindpunten die worden gebruikt wanneer de overeenkomstige configuratiesleutel diagnostics.otel.*Endpoint niet is ingesteld. Signaalspecifieke configuratie heeft voorrang op signaalspecifieke omgevingsvariabelen, die weer voorrang hebben op het gedeelde eindpunt. |
OTEL_SERVICE_NAME |
Terugvalwaarde voor diagnostics.otel.serviceName wanneer de configuratiesleutel niet is ingesteld. De standaardservicenaam is openclaw. |
OTEL_EXPORTER_OTLP_PROTOCOL |
Terugvalwaarde voor het wire-protocol wanneer diagnostics.otel.protocol niet is ingesteld. Alleen http/protobuf schakelt export in. |
OTEL_SEMCONV_STABILITY_OPT_IN |
Stel in op gen_ai_latest_experimental om de nieuwste vorm van de GenAI-inferentiespan uit te zenden: {gen_ai.operation.name} {gen_ai.request.model}-spannamen, CLIENT-spansoort en gen_ai.provider.name in plaats van de verouderde gen_ai.system. GenAI-metrische gegevens gebruiken hoe dan ook altijd begrensde attributen met een lage cardinaliteit. |
OPENCLAW_OTEL_PRELOADED |
Stel in op 1 wanneer een andere preload of een ander hostproces de globale OpenTelemetry-SDK al heeft geregistreerd. De Plugin slaat dan zijn eigen NodeSDK-levenscyclus over, maar koppelt nog steeds diagnostische listeners en respecteert traces/metrics/logs. |
Privacy en het vastleggen van inhoud
Onbewerkte model-/toolinhoud wordt standaard niet geëxporteerd. Spans bevatten begrensde
identificatoren (kanaal, provider, model, foutcategorie, uitsluitend gehashte aanvraag-id's,
toolbron, tooleigenaar, naam/bron van de Skill) en bevatten nooit prompttekst,
antwoordtekst, toolinvoer, tooluitvoer, bestandspaden van Skills of sessiesleutels.
Waarden die eruitzien als sessiesleutels van agents met een bepaald bereik (bijvoorbeeld beginnend met
agent:) worden bij attributen met een lage cardinaliteit vervangen door unknown. OTLP-logboekrecords
behouden standaard ernstniveau, logger, codelocatie, vertrouwde tracecontext en
gezuiverde attributen; de onbewerkte inhoud van het logboekbericht wordt alleen geëxporteerd
wanneer diagnostics.otel.captureContent de Booleaanse waarde true heeft. Gedetailleerde
captureContent.*-subsleutels schakelen logboekinhoud nooit in. Talk-metrische gegevens exporteren alleen
begrensde metagegevens van gebeurtenissen (modus, transport, provider, gebeurtenistype), geen
transcripten, audiopayloads, sessie-id's, beurt-id's, oproep-id's, ruimte-id's of
overdrachtstokens.
Uitgaande modelaanvragen kunnen een W3C traceparent-header bevatten die uitsluitend is gegenereerd
op basis van diagnostische tracecontext die eigendom is van OpenClaw voor de actieve modelaanroep.
Bestaande door de aanroeper opgegeven traceparent-headers worden vervangen, zodat plugins of
aangepaste provideropties trace-afstamming tussen services niet kunnen vervalsen.
Stel diagnostics.otel.captureContent.* alleen in op true wanneer je collector
en bewaarbeleid zijn goedgekeurd voor prompt-, antwoord-, tool- of
systeemprompttekst. Elke subsleutel is onafhankelijk:
inputMessages- inhoud van gebruikersprompts.outputMessages- inhoud van modelantwoorden.toolInputs- payloads met toolargumenten.toolOutputs- payloads met toolresultaten.systemPrompt- samengestelde systeem-/ontwikkelaarsprompt.toolDefinitions- namen, beschrijvingen en schema's van modeltools.
Wanneer een subsleutel is ingeschakeld, krijgen model- en toolspans alleen voor die klasse begrensde, geredigeerde
openclaw.content.*-attributen.
toolInputs/toolOutputs-inhoud wordt vastgelegd voor tooluitvoeringen van de ingebouwde
agentruntime (openclaw.content.tool_input en
gen_ai.tool.call.arguments bij voltooide/foutspans;
openclaw.content.tool_output en gen_ai.tool.call.result bij voltooide
spans). De openclaw.content.*-namen blijven de stabiele OpenClaw-attribuutnamen;
de gen_ai.tool.call.*-kopieën weerspiegelen ze voor semconv-native viewers.
Toolaanroepen van externe harnesses (Codex, Claude CLI) zenden
tool.execution.*-spans uit zonder inhoudspayloads. Vastgelegde inhoud wordt via een
vertrouwd kanaal uitsluitend voor listeners verzonden en wordt nooit op de openbare bus voor diagnostische gebeurtenissen
geplaatst.
Sampling en doorschrijven
- Traces:
diagnostics.otel.sampleRatestelt alleen op de rootspan eenTraceIdRatioBasedSamplerin (0.0verwijdert alles,1.0behoudt alles). Als dit niet is ingesteld, wordt de standaardwaarde van de OpenTelemetry SDK gebruikt (altijd ingeschakeld). - Metrieken:
diagnostics.otel.flushIntervalMs(begrensd op een minimum van1000); als dit niet is ingesteld, wordt de standaardwaarde voor periodieke export van de SDK gebruikt. - Logboeken: OTLP-logboeken respecteren
logging.level(logniveau van bestanden) en gebruiken het redactiepad voor diagnostische logrecords, niet de consoleopmaak. Installaties met een hoog volume kunnen beter sampling/filtering via de OTLP-collector gebruiken dan lokale sampling. Steldiagnostics.otel.logsExporter: "stdout"in wanneer je platform stdout/stderr al naar een logverwerker verzendt en je geen collector voor OTLP-logboeken hebt. Stdout-records bestaan uit één JSON-object per regel metts,signal,service.name, ernst, inhoud, geredigeerde attributen en vertrouwde tracevelden wanneer die beschikbaar zijn. - Correlatie van bestandslogboeken: JSONL-bestandslogboeken bevatten
traceId,spanId,parentSpanIdentraceFlagsop het hoogste niveau wanneer de logaanroep een geldige diagnostische tracecontext bevat, zodat logverwerkers lokale logregels aan geëxporteerde spans kunnen koppelen. - Correlatie van aanvragen: HTTP-aanvragen en WebSocket-frames van de Gateway maken
een intern tracebereik voor aanvragen. Logboeken en diagnostische gebeurtenissen binnen dat
bereik nemen standaard de trace van de aanvraag over, terwijl spans voor agentruns en modelaanroepen
als onderliggende spans worden gemaakt, zodat
traceparent-headers van de provider binnen dezelfde trace blijven. - Correlatie van modelaanroepen:
openclaw.model.call-spans bevatten standaard veilige groottes van promptcomponenten en tokenattributen per aanroep wanneer het providerresultaat gebruiksgegevens beschikbaar stelt.openclaw.model.usageblijft de span op runniveau voor de geaggregeerde kosten-, context- en kanaaldashboards en blijft binnen dezelfde diagnostische trace wanneer de emitterende runtime een vertrouwde tracecontext heeft.
Observatie-eenheden voor modelaanroepen
Elke openclaw.model.call-span geeft via
openclaw.model_call.observation_unit aan wat de levenscyclus ervan meet:
request- één waarneembare model-/provideraanvraag. Ingebedde systeemeigen modelaanroepen gebruiken deze eenheid en exporters behandelen een ontbrekende waarde alsrequestvoor compatibiliteit met oudere of externe emitters.turn- één ondoorzichtige beurt van de agent-CLI die verborgen modelaanvragen, nieuwe pogingen, toolwerk of achtergrondwerk kan bevatten. Aanroepen van de Claude Code CLI en Codex-appserver gebruiken deze eenheid.
Beide eenheden blijven spans voor modelaanroepen, zodat tracebackends modelinvoer,
-uitvoer, gebruik en hiërarchie kunnen weergeven. Aanvraagspans gebruiken de van de API afgeleide GenAI-bewerking
(chat, generate_content of text_completion), terwijl beurtspans
gen_ai.operation.name = invoke_agent gebruiken. Beide dragen bij aan
gen_ai.client.operation.duration, waarbij de bewerkingsnaam de latentie van directe
aanvragen gescheiden houdt van de latentie van volledige beurten. De OTEL-metrieken voor modelaanroepen van OpenClaw
bevatten ook openclaw.model_call.observation_unit; de Prometheus-metrieken
voor modelaanroepen stellen het equivalente label observation_unit beschikbaar.
Nauwkeurigheid van modelaanroepen in de Claude Code CLI
Beurten van de Claude Code CLI emitten één synthetische openclaw.model.call-span
op beurtniveau. Dit zijn geen HTTP-aanvraagspans van Anthropic. Ze gebruiken openclaw.api = claude-code, openclaw.model_call.observation_unit = turn en duiden
de bewerking aan als gen_ai.operation.name = invoke_agent. Ze identificeren
de CLI-grens van OpenClaw via
openclaw.transport:
stdio- een eenmalig lokaal Claude Code-proces.stdio-live- één beurt in een beheerde, persistente Claude-stdio-sessie.paired-node-cli- een eenmalige uitvoering van Claude Code die aan een gekoppelde Node is gedelegeerd.
Diagnostiek voor de Claude CLI wordt alleen geïnstantieerd wanneer de diagnostische dispatcher van het proces is ingeschakeld en een interne of vertrouwde gebeurtenislistener is gekoppeld. Als er geen observability-plugin of andere listener actief is, slaan Claude CLI-beurten de synthetische tracehiërarchie, inhoudsbuffers en diagnostische boekhouding van streambytes over. Wanneer inhoudsregistratie is ingeschakeld, zijn de velden voor de prompt en systeemprompt elk beperkt tot 128 KiB; assistentuitvoer is beperkt tot 128 KiB verdeeld over maximaal 200 enveloppen, waarbij 16 KiB en één item zijn gereserveerd voor een laatste zichtbare fallbackreactie. Een markering registreert afkapping wanneer de limiet wordt bereikt.
OpenClaw geeft Claude CLI-beurten dezelfde eigendomshiërarchie als andere
agentruntimes: openclaw.harness.run (openclaw.harness.id = claude-cli)
bevat openclaw.run, die de Claude-openclaw.model.call-span bevat.
De harness- en runspans zijn synthetische OpenClaw-grenzen voor beurten, geen
interne fasen van Claude Code. Eenmalige en beheerde stdio-beurten gebruiken dezelfde
hiërarchie; een echte nieuwe poging met een nieuwe sessie maakt nog een onderliggende modelaanroep binnen
dezelfde OpenClaw-run.
De span begint wanneer OpenClaw de voorbereide CLI-beurt accepteert en eindigt pas nadat die beurt slaagt of mislukt. Voor beheerde sessies beëindigt een tussentijds succesvol resultaat de span niet zolang Claude achtergrondagents of workflows meldt die het resultaat vasthouden; het uiteindelijke resultaat na het leegmaken doet dat wel. Afbreken, time-out, procesfout, uitvoer-/parseerfout en andere fouten tijdens een beurt beëindigen dezelfde span met een fout.
Claude Code rapporteert gebruik per assistentbericht en kan ook cumulatief gebruik rapporteren in het eindresultaat. De antwoordboekhouding van OpenClaw blijft het laatste assistentbericht gebruiken, zodat de bestaande kostensemantiek niet verandert; de span voor modelaanroepen op beurtniveau gebruikt cumulatief eindgebruik wanneer beschikbaar, inclusief tokens voor cachelezing en cacheaanmaak.
Voor deze CLI-spans beschrijven de byte- en timingvelden de waarneembare CLI-grens van OpenClaw:
openclaw.model_call.request_bytesis de UTF-8-grootte van de promptwaarde die via eenmalige stdin/argv of de beheerde stdio-JSONL-gebruikersenvelop wordt verzonden. Dit is niet de grootte van de verborgen modelaanvraag van Claude Code.openclaw.model_call.response_bytesis de UTF-8-grootte van de stdout van de Claude CLI die tijdens de beurt wordt waargenomen. Dit is niet de grootte van de HTTP-respons van Anthropic.openclaw.model_call.time_to_first_byte_msis de tijd tot de eerste waarneembare stdout- of stderr-uitvoer van de Claude CLI. Dit is niet de TTFB van het netwerk.
Als de bijbehorende gedetailleerde captureContent-velden zijn ingeschakeld, exporteert de span
de effectieve prompt die OpenClaw naar Claude Code verzendt, de door OpenClaw toegevoegde systeemprompt
en zichtbare assistenttekst/redenering/identiteit van toolaanroepen via
gen_ai.input.messages, gen_ai.output.messages en
gen_ai.system_instructions. Toolargumenten, ondoorzichtige denksignaturen en
toolresultaten worden uit de Claude-assistentenvelop weggelaten. OpenClaw beweert geen
toegang te hebben tot de privé-systeemprompt van Claude Code, verborgen hervatte of
gecompacteerde aanvraagpayload, systeemeigen interne toolschema's, onbewerkte HTTP-aanvraag van Anthropic,
interne nieuwe pogingen, upstream-aanvraag-id of werkelijke netwerk-TTFB. Omdat
Claude Code zijn effectieve systeemeigen tooldefinities niet nauwkeurig beschikbaar stelt,
vullen deze spans gen_ai.tool.definitions niet in.
Externe toolspans van de Claude-harness blijven uitsluitend metadata bevatten, zelfs wanneer het registreren van toolinhoud is ingeschakeld. Net als bij elke modelspan gebruikt vastgelegde Claude CLI-inhoud het pad dat uitsluitend voor vertrouwde listeners beschikbaar is en de bestaande redactie- en groottebegrenzingen van de exporter; inhoud blijft standaard uitgeschakeld.
Geëxporteerde metrieken
Modelgebruik
openclaw.tokens(teller, attrs:openclaw.token,openclaw.channel,openclaw.provider,openclaw.model,openclaw.agent)openclaw.cost.usd(teller, attrs:openclaw.channel,openclaw.provider,openclaw.model)openclaw.run.duration_ms(histogram, attrs:openclaw.channel,openclaw.provider,openclaw.model)openclaw.context.tokens(histogram, attrs:openclaw.context,openclaw.channel,openclaw.provider,openclaw.model)gen_ai.client.token.usage(histogram, GenAI-metriek volgens semantische conventies, attrs:gen_ai.token.type=input/output,gen_ai.provider.name,gen_ai.operation.name,gen_ai.request.model)gen_ai.client.operation.duration(histogram, seconden, GenAI-metriek volgens semantische conventies voor modelaanvragen en synthetische agentbeurten; attrs:gen_ai.provider.name,gen_ai.operation.name,gen_ai.request.model, optioneelerror.type; observaties van beurten gebruikengen_ai.operation.name = invoke_agent)openclaw.model_call.duration_ms(histogram, attrs:openclaw.provider,openclaw.model,openclaw.api,openclaw.transport,openclaw.model_call.observation_unit, plusopenclaw.errorCategoryenopenclaw.failureKindbij geclassificeerde fouten)openclaw.model_call.request_bytes(histogram, UTF-8-bytegrootte van de uiteindelijke payload van de modelaanvraag; voor de Claude Code CLI de hierboven beschreven waarneembare promptinvoer/-envelop; geen onbewerkte payloadinhoud)openclaw.model_call.response_bytes(histogram, UTF-8-bytegrootte van gestreamde payloadfragmenten van de respons; hoogfrequente delta's voor tekst, gedachten en toolaanroepen tellen alleen incrementeledelta-bytes; voor de Claude Code CLI waargenomen stdout-bytes; geen onbewerkte responsinhoud)openclaw.model_call.time_to_first_byte_ms(histogram, verstreken tijd vóór de eerste gestreamde responsgebeurtenis; voor de Claude Code CLI de eerste waarneembare CLI-uitvoer in plaats van netwerk-TTFB)openclaw.model.failover(teller, attrs:openclaw.provider,openclaw.model,openclaw.failover.to_provider,openclaw.failover.to_model,openclaw.failover.reason,openclaw.failover.suspended,openclaw.lane)openclaw.skill.used(teller, attrs:openclaw.skill.name,openclaw.skill.source,openclaw.skill.activation, optioneelopenclaw.agent, optioneelopenclaw.toolName)
Berichtenstroom
openclaw.webhook.received(teller, attrs:openclaw.channel,openclaw.webhook)openclaw.webhook.error(teller, attrs:openclaw.channel,openclaw.webhook)openclaw.webhook.duration_ms(histogram, attrs:openclaw.channel,openclaw.webhook)openclaw.message.queued(teller, attrs:openclaw.channel,openclaw.source)openclaw.message.received(teller, attrs:openclaw.channel,openclaw.source)openclaw.message.dispatch.started(teller, attrs:openclaw.channel,openclaw.source)openclaw.message.dispatch.completed(teller, attrs:openclaw.channel,openclaw.outcome,openclaw.reason,openclaw.source)openclaw.message.dispatch.duration_ms(histogram, attrs:openclaw.channel,openclaw.outcome,openclaw.reason,openclaw.source)openclaw.message.processed(teller, attrs:openclaw.channel,openclaw.outcome)openclaw.message.duration_ms(histogram, attrs:openclaw.channel,openclaw.outcome)openclaw.message.delivery.started(teller, attrs:openclaw.channel,openclaw.delivery.kind)openclaw.message.delivery.duration_ms(histogram, attrs:openclaw.channel,openclaw.delivery.kind,openclaw.outcome,openclaw.errorCategory)
Talk
openclaw.talk.event(teller, attrs:openclaw.talk.event_type,openclaw.talk.mode,openclaw.talk.transport,openclaw.talk.brain,openclaw.talk.provider)openclaw.talk.event.duration_ms(histogram, attrs: hetzelfde alsopenclaw.talk.event; geëmit wanneer een Talk-gebeurtenis een duur rapporteert)openclaw.talk.audio.bytes(histogram, attrs: hetzelfde alsopenclaw.talk.event; geëmit voor Talk-audioframegebeurtenissen die een bytelengte rapporteren)
Wachtrijen en sessies
openclaw.queue.lane.enqueue(teller, attributen:openclaw.lane)openclaw.queue.lane.dequeue(teller, attributen:openclaw.lane)openclaw.queue.depth(histogram, attributen:openclaw.laneofopenclaw.channel=heartbeat)openclaw.queue.wait_ms(histogram, attributen:openclaw.lane)openclaw.session.state(teller, attributen:openclaw.state,openclaw.reason)openclaw.session.stuck(teller, attributen:openclaw.state; gegenereerd voor herstelbare verouderde sessieboekhouding)openclaw.session.stuck_age_ms(histogram, attributen:openclaw.state; gegenereerd voor herstelbare verouderde sessieboekhouding)openclaw.session.turn.created(teller, attributen:openclaw.agent,openclaw.channel,openclaw.trigger)openclaw.session.recovery.requested(teller, attributen:openclaw.state,openclaw.action,openclaw.active_work_kind,openclaw.reason)openclaw.session.recovery.completed(teller, attributen:openclaw.state,openclaw.action,openclaw.status,openclaw.active_work_kind,openclaw.reason)openclaw.session.recovery.age_ms(histogram, attributen: dezelfde als de bijbehorende herstelteller)openclaw.run.attempt(teller, attributen:openclaw.attempt)
Telemetrie voor sessieactiviteit
Een processing-sessie nadert de ingebouwde activiteitsdrempel niet zolang OpenClaw voortgang waarneemt van antwoorden, tools, status, blokkeringen of de ACP-runtime. Typindicaties om de verbinding actief te houden gelden niet als voortgang, zodat een stil model of stille harness nog steeds kan worden gedetecteerd.
OpenClaw classificeert sessies op basis van het werk dat nog kan worden waargenomen:
session.long_running: actief ingebed werk, modelaanroepen of toolaanroepen boeken nog steeds voortgang. Stille modelaanroepen met een eigenaar worden vóór de ingebouwde afbreekdrempel ook als langlopend gerapporteerd, zodat trage of niet-streamende modelproviders niet op vastgelopen Gateway-sessies lijken zolang afbreken waarneembaar is.session.stalled: er bestaat actief werk, maar de actieve uitvoering heeft onlangs geen voortgang gemeld. Modelaanroepen met een eigenaar schakelen op of na de ingebouwde afbreekdrempel over vansession.long_runningnaarsession.stalled; verouderde model-/toolactiviteit zonder eigenaar wordt niet als onschadelijk langlopend werk beschouwd. Vastgelopen ingebedde uitvoeringen worden aanvankelijk alleen geobserveerd en gaan vervolgens na de afbreekdrempel zonder voortgang over op afbreken en leegmaken, zodat uitvoeringen in de wachtrij achter de lane kunnen worden hervat.session.stuck: verouderde sessieboekhouding zonder actief werk, of een inactieve sessie in de wachtrij met verouderde model-/toolactiviteit zonder eigenaar. Hierdoor wordt de betreffende sessielane onmiddellijk vrijgegeven nadat de herstelcontroles zijn geslaagd.
Herstel genereert gestructureerde session.recovery.requested- en
session.recovery.completed-gebeurtenissen. De diagnostische sessiestatus wordt alleen als inactief gemarkeerd
na een muterend herstelresultaat (aborted of released) en alleen als
dezelfde verwerkingsgeneratie nog actueel is.
Alleen session.stuck genereert de teller openclaw.session.stuck, het
histogram openclaw.session.stuck_age_ms en de span openclaw.session.stuck.
Herhaalde session.stuck-diagnoses passen exponentiële vertraging toe zolang de sessie
ongewijzigd blijft. Dashboards moeten daarom waarschuwen bij aanhoudende stijgingen en niet bij
elke Heartbeat-tik. Zie voor de configuratieoptie en standaardwaarden de
configuratiereferentie.
Activiteitswaarschuwingen genereren ook:
openclaw.liveness.warning(teller, attributen:openclaw.liveness.reason)openclaw.liveness.event_loop_delay_p99_ms(histogram, attributen:openclaw.liveness.reason)openclaw.liveness.event_loop_delay_max_ms(histogram, attributen:openclaw.liveness.reason)openclaw.liveness.event_loop_utilization(histogram, attributen:openclaw.liveness.reason)openclaw.liveness.cpu_core_ratio(histogram, attributen:openclaw.liveness.reason)
Levenscyclus van de harness
openclaw.harness.duration_ms(histogram, attributen:openclaw.harness.id,openclaw.harness.plugin,openclaw.outcome,openclaw.harness.phasebij fouten)
Tooluitvoering en lusdetectie
openclaw.tool.execution.duration_ms(histogram, attributen:gen_ai.tool.name,openclaw.toolName,openclaw.tool.source,openclaw.tool.owner,openclaw.tool.params.kind, plusopenclaw.errorCategorybij fouten)openclaw.tool.execution.blocked(teller, attributen:gen_ai.tool.name,openclaw.toolName,openclaw.tool.source,openclaw.tool.owner,openclaw.tool.params.kind,openclaw.deniedReason)openclaw.tool.loop(teller, attributen:openclaw.toolName,openclaw.loop.level,openclaw.loop.action,openclaw.loop.detector,openclaw.loop.count, optioneelopenclaw.loop.paired_tool; gegenereerd wanneer een repetitieve lus van toolaanroepen wordt gedetecteerd)
Exec
openclaw.exec.duration_ms(histogram, attributen:openclaw.exec.target,openclaw.exec.mode,openclaw.outcome,openclaw.failureKind)
Interne diagnostiek (geheugen, payloads, gezondheid van de exporter)
openclaw.payload.large(teller, attributen:openclaw.payload.surface,openclaw.payload.action,openclaw.channel,openclaw.plugin,openclaw.reason)openclaw.payload.large_bytes(histogram, attributen: dezelfde alsopenclaw.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(histogrammen, geen attributen; metingen van procesgeheugen)openclaw.memory.pressure(teller, attributen:openclaw.memory.level,openclaw.memory.reason)openclaw.diagnostic.async_queue.dropped(teller, attributen:openclaw.diagnostic.async_queue.drop_class; verwijderingen door tegendruk in de interne diagnostiekwachtrij)openclaw.telemetry.exporter.events(teller, attributen:openclaw.exporter,openclaw.signal,openclaw.status, optioneelopenclaw.reason, optioneelopenclaw.errorCategory; zelftelemetrie voor de levenscyclus en storingen van de exporter)
Geëxporteerde spans
openclaw.model.usageopenclaw.channel,openclaw.provider,openclaw.modelopenclaw.tokens.*(invoer/uitvoer/cache_read/cache_write/totaal)gen_ai.systemstandaard, ofgen_ai.provider.namewanneer voor de nieuwste semantische GenAI-conventies is gekozengen_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.systemstandaard, ofgen_ai.provider.namewanneer voor de nieuwste semantische GenAI-conventies is gekozengen_ai.request.model,gen_ai.operation.name,openclaw.provider,openclaw.model,openclaw.api,openclaw.transport,openclaw.model_call.observation_unit(requestofturn)openclaw.errorCategory,error.typeen optioneelopenclaw.failureKindbij foutenopenclaw.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(alleen veilige componentgroottes, geen prompttekst)openclaw.model_call.usage.*engen_ai.usage.*wanneer het resultaat gebruiksgegevens voor die aanvraag of geaggregeerde beurt bevat- Span-gebeurtenis
openclaw.provider.requestmet attribuutopenclaw.upstreamRequestIdHash(begrensd, op hashes gebaseerd) wanneer het resultaat van de upstreamprovider een aanvraag-id bevat; onbewerkte id's worden nooit geëxporteerd - Met
OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimentalgebruiken aanvraagspans de nieuwste GenAI-naam voor inferentiespans{gen_ai.operation.name} {gen_ai.request.model}. Beurtspans gebruikeninvoke_agent, omdat OpenClaw vanuit de ondoorzichtige CLI-grens geen systeemeigen agentnaam claimt. Beide gebruiken spansoortCLIENTin plaats vanopenclaw.model.call.
openclaw.harness.runopenclaw.harness.id,openclaw.harness.plugin,openclaw.outcome,openclaw.provider,openclaw.model,openclaw.channel- Bij voltooiing:
openclaw.harness.result_classification,openclaw.harness.yield_detected,openclaw.harness.items.started,openclaw.harness.items.completed,openclaw.harness.items.active - Bij een fout:
openclaw.harness.phase,openclaw.errorCategory, optioneelopenclaw.harness.cleanup_failed
openclaw.tool.executiongen_ai.tool.name,gen_ai.operation.name(execute_tool),openclaw.toolName,openclaw.tool.source, optioneelgen_ai.tool.call.id,openclaw.tool.owner,openclaw.tool.params.*- Optioneel
openclaw.errorCategory/openclaw.errorCodebij fouten,openclaw.deniedReasonenopenclaw.outcome=blockedbij weigering door beleid of sandbox
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(geen inhoud van prompts, geschiedenis, antwoorden of sessiesleutels)
openclaw.tool.loopopenclaw.toolName,openclaw.loop.level,openclaw.loop.action,openclaw.loop.detector,openclaw.loop.count, optioneelopenclaw.loop.paired_tool(geen lusberichten, parameters of tooluitvoer)
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, optioneelopenclaw.memory.threshold_bytes/openclaw.memory.rss_growth_bytes/openclaw.memory.window_ms
Wanneer inhoudsregistratie expliciet is ingeschakeld, kunnen model- en toolspans ook
begrensde, geredigeerde openclaw.content.*-attributen bevatten voor de specifieke
inhoudsklassen waarvoor je hebt gekozen.
Catalogus met diagnostische gebeurtenissen
De onderstaande gebeurtenissen ondersteunen de bovenstaande metrische gegevens en spans of zijn beschikbaar voor rechtstreekse
Plugin-abonnementen. run.progress en run.execution_phase zijn uitsluitend rechtstreekse
levenscyclussignalen; de diagnostics-otel-Plugin exporteert ze niet als
zelfstandige OTLP-signalen. Gebeurtenissoorten en run.execution_phase.phase-waarden zijn
additief. TypeScript-consumenten moeten standaardtakken behouden in plaats van aan te nemen
dat een van beide unions permanent uitputtend is.
Modelgebruik
model.usage- tokens, kosten, duur, context, provider/model/kanaal, sessie-id's.usageis de provider-/beurtboekhouding voor kosten en telemetrie;context.usedis de huidige momentopname van prompt/context en kan lager zijn danusage.totalvan de provider wanneer gecachete invoer of aanroepen binnen een toollus betrokken zijn.
Berichtenstroom
webhook.received/webhook.processed/webhook.errormessage.queued/message.processedmessage.delivery.started/message.delivery.completed/message.delivery.error
Wachtrij en sessie
queue.lane.enqueue/queue.lane.dequeuesession.state/session.long_running/session.stalled/session.stuckrun.attempt/run.progressrun.execution_phase(openbare, aan sessies gekoppelde opstartmijlpalen van de ingebedde runner)diagnostic.heartbeat(geaggregeerde tellers: webhooks/wachtrij/sessie)
Levenscyclus van de harness
harness.run.started/harness.run.completed/harness.run.error- levenscyclus per uitvoering voor de agentharness. BevatharnessId, optioneelpluginId, provider/model/kanaal en uitvoerings-id. Voltooiing voegtdurationMs,outcome, optioneelresultClassification,yieldDetectedenitemLifecycle-aantallen toe. Fouten voegenphase(prepare/start/send/resolve/cleanup),errorCategoryen optioneelcleanupFailedtoe.
Exec
exec.process.completed- terminalresultaat, duur, doel, modus, afsluitcode en fouttype. Opdrachttekst en werkmappen zijn niet opgenomen.exec.approval.followup_suppressed- verouderde opvolging van goedkeuring verwijderd nadat een sessie opnieuw was gekoppeld. BevatapprovalId,reason(session_rebound),phase(direct_deliveryofgateway_preflight) en het tijdstempel van de dispatcher. Sessiesleutels, routes en opdrachttekst zijn niet opgenomen.
Zonder een exporter
Houd diagnostische gebeurtenissen beschikbaar voor plugins of aangepaste sinks zonder
diagnostics-otel uit te voeren:
{ diagnostics: { enabled: true },}Gebruik diagnostische vlaggen voor gerichte debuguitvoer zonder logging.level
te verhogen. Vlaggen zijn niet hoofdlettergevoelig en ondersteunen jokertekens
(telegram.* of *):
{ diagnostics: { flags: ["telegram.http"] },}Of als een eenmalige overschrijving via een omgevingsvariabele:
OPENCLAW_DIAGNOSTICS=telegram.http,telegram.payload openclaw gatewayUitvoer van vlaggen gaat naar het standaardlogbestand (logging.file) en wordt nog
steeds geredigeerd door logging.redactSensitive. Volledige handleiding:
Diagnostische vlaggen.
Uitschakelen
{ diagnostics: { otel: { enabled: false } },}Of laat diagnostics-otel weg uit plugins.allow, of voer
openclaw plugins disable diagnostics-otel uit.
Gerelateerd
- Logboekregistratie - bestandslogboeken, console-uitvoer, volgen via de CLI en het tabblad Logs van de Control UI
- Interne werking van Gateway-logboekregistratie - WS-logboekstijlen, subsysteemvoorvoegsels en consolevastlegging
- Diagnostische vlaggen - gerichte vlaggen voor debuglogboeken
- Diagnostische export - tool voor ondersteuningsbundels voor operators (los van OTEL-export)
- Configuratiereferentie - volledige referentie voor het veld
diagnostics.*