Gateway
การส่งออก OpenTelemetry
OpenClaw ส่งออกข้อมูลวินิจฉัยผ่าน plugin diagnostics-otel อย่างเป็นทางการ
โดยใช้ OTLP/HTTP (protobuf) นอกจากนี้ยังสามารถเขียนบันทึกเป็น stdout JSONL สำหรับ
ไปป์ไลน์บันทึกของคอนเทนเนอร์และแซนด์บ็อกซ์ได้ ตัวรวบรวมหรือแบ็กเอนด์ใดก็ตามที่รองรับ
OTLP/HTTP สามารถใช้งานได้โดยไม่ต้องแก้ไขโค้ด สำหรับบันทึกไฟล์ภายในเครื่อง โปรดดู
การบันทึก
- เหตุการณ์วินิจฉัย คือระเบียนที่มีโครงสร้างภายในกระบวนการ ซึ่งปล่อยโดย Gateway และ plugin ที่รวมมาให้ สำหรับการเรียกใช้โมเดล โฟลว์ข้อความ เซสชัน คิว และการเรียกใช้คำสั่ง
diagnostics-otelสมัครรับเหตุการณ์เหล่านั้นและส่งออกเป็น เมตริก, เทรซ และ บันทึก ของ OpenTelemetry ผ่าน OTLP/HTTP และสามารถ ทำสำเนาระเบียนบันทึกไปยัง stdout JSONL ได้- การเรียกผู้ให้บริการ จะได้รับส่วนหัว W3C
traceparentจากบริบทสแปน การเรียกโมเดลที่เชื่อถือได้ของ OpenClaw เมื่อการรับส่งข้อมูลของผู้ให้บริการรองรับส่วนหัว ที่กำหนดเอง บริบทเทรซที่ปล่อยโดย plugin จะไม่ถูกส่งต่อ - ตัวส่งออกจะเชื่อมต่อเฉพาะเมื่อเปิดใช้งานทั้งพื้นผิวการวินิจฉัยและ plugin ดังนั้นโดยค่าเริ่มต้นต้นทุนภายในกระบวนการจึงยังคงใกล้ศูนย์
เริ่มต้นอย่างรวดเร็ว
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, }, },}หรือเปิดใช้งาน plugin จาก CLI: openclaw plugins enable diagnostics-otel
สัญญาณที่ส่งออก
| สัญญาณ | เนื้อหาที่รวมอยู่ |
|---|---|
| เมตริก | ตัวนับ/ฮิสโตแกรมสำหรับการใช้โทเค็น ค่าใช้จ่าย ระยะเวลาการเรียกใช้ การสลับไปใช้ระบบสำรอง การใช้ Skills โฟลว์ข้อความ เหตุการณ์ Talk เลนคิว สถานะ/การกู้คืนเซสชัน การเรียกใช้เครื่องมือ การเรียกใช้คำสั่ง หน่วยความจำ ความพร้อมทำงาน และสถานะตัวส่งออก |
| เทรซ | สแปนสำหรับการใช้โมเดล การเรียกโมเดล วงจรชีวิตของฮาร์เนส การใช้ Skills การเรียกใช้เครื่องมือ การเรียกใช้คำสั่ง การประมวลผล Webhook/ข้อความ การประกอบบริบท และลูปเครื่องมือ |
| บันทึก | ระเบียน logging.file ที่มีโครงสร้าง ซึ่งส่งออกผ่าน OTLP หรือ stdout JSONL เมื่อเปิดใช้งาน diagnostics.otel.logs; เนื้อหาหลักของบันทึกจะถูกระงับ เว้นแต่จะเปิดใช้งานการบันทึกเนื้อหาไว้อย่างชัดเจน |
สลับ traces, metrics และ logs แยกกันได้ เทรซและเมตริก
จะเปิดตามค่าเริ่มต้นเมื่อ diagnostics.otel.enabled เป็น true ส่วนบันทึกจะปิดตามค่าเริ่มต้น
และส่งออกเฉพาะเมื่อ diagnostics.otel.logs เป็น true อย่างชัดเจน การส่งออกบันทึก
ใช้ OTLP โดยค่าเริ่มต้น ตั้งค่า diagnostics.otel.logsExporter เป็น stdout สำหรับ JSONL บน
stdout หรือ both สำหรับทั้งสองแบบ
ข้อมูลอ้างอิงการกำหนดค่า
{ 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 ปิดใช้งานการส่งออก OTLP serviceName: "openclaw-gateway", // หากไม่ได้ตั้งค่า จะใช้ OTEL_SERVICE_NAME แล้วจึงใช้ "openclaw" headers: { "x-collector-token": "..." }, traces: true, metrics: true, logs: true, logsExporter: "otlp", // otlp | stdout | ทั้งสอง sampleRate: 0.2, // ตัวสุ่มตัวอย่างสแปนราก 0.0..1.0 flushIntervalMs: 60000, // ช่วงเวลาส่งออกเมตริก (ขั้นต่ำ 1000ms) captureContent: { enabled: false, inputMessages: false, outputMessages: false, toolInputs: false, toolOutputs: false, systemPrompt: false, toolDefinitions: false, }, }, },}ตัวแปรสภาพแวดล้อม
| ตัวแปร | วัตถุประสงค์ |
|---|---|
OTEL_EXPORTER_OTLP_ENDPOINT |
ค่าสำรองสำหรับ diagnostics.otel.endpoint เมื่อไม่ได้ตั้งค่าคีย์การกำหนดค่า |
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT / OTEL_EXPORTER_OTLP_METRICS_ENDPOINT / OTEL_EXPORTER_OTLP_LOGS_ENDPOINT |
ค่าสำรองปลายทางเฉพาะสัญญาณ ซึ่งใช้เมื่อไม่ได้ตั้งค่าคีย์การกำหนดค่า diagnostics.otel.*Endpoint ที่ตรงกัน การกำหนดค่าเฉพาะสัญญาณมีลำดับความสำคัญเหนือสภาพแวดล้อมเฉพาะสัญญาณ และสภาพแวดล้อมเฉพาะสัญญาณมีลำดับความสำคัญเหนือปลายทางที่ใช้ร่วมกัน |
OTEL_SERVICE_NAME |
ค่าสำรองสำหรับ diagnostics.otel.serviceName เมื่อไม่ได้ตั้งค่าคีย์การกำหนดค่า ชื่อบริการเริ่มต้นคือ openclaw |
OTEL_EXPORTER_OTLP_PROTOCOL |
ค่าสำรองสำหรับโปรโตคอลบนสายเมื่อไม่ได้ตั้งค่า diagnostics.otel.protocol มีเพียง http/protobuf เท่านั้นที่เปิดใช้งานการส่งออก |
OTEL_SEMCONV_STABILITY_OPT_IN |
ตั้งค่าเป็น gen_ai_latest_experimental เพื่อปล่อยรูปแบบสแปนการอนุมาน GenAI ล่าสุด ได้แก่ ชื่อสแปน {gen_ai.operation.name} {gen_ai.request.model}, ชนิดสแปน CLIENT และ gen_ai.provider.name แทน gen_ai.system แบบเดิม เมตริก GenAI จะใช้แอตทริบิวต์ที่มีขอบเขตและคาร์ดินาลิตีต่ำเสมอไม่ว่าจะตั้งค่าอย่างไร |
OPENCLAW_OTEL_PRELOADED |
ตั้งค่าเป็น 1 เมื่อพรีโหลดหรือกระบวนการโฮสต์อื่นได้ลงทะเบียน OpenTelemetry SDK ส่วนกลางแล้ว จากนั้น plugin จะข้ามวงจรชีวิต NodeSDK ของตนเอง แต่ยังคงเชื่อมโยงตัวฟังการวินิจฉัยและเคารพ traces/metrics/logs |
ความเป็นส่วนตัวและการบันทึกเนื้อหา
โดยค่าเริ่มต้นจะไม่ส่งออกเนื้อหาดิบของโมเดล/เครื่องมือ สแปนจะมีตัวระบุ
ที่มีขอบเขต (ช่องทาง ผู้ให้บริการ โมเดล หมวดหมู่ข้อผิดพลาด รหัสคำขอที่เป็นแฮชเท่านั้น
แหล่งที่มาของเครื่องมือ เจ้าของเครื่องมือ ชื่อ/แหล่งที่มาของ Skills) และจะไม่รวมข้อความพรอมต์
ข้อความตอบกลับ อินพุตเครื่องมือ เอาต์พุตเครื่องมือ พาธไฟล์ Skills หรือคีย์เซสชัน
ค่าที่มีลักษณะเหมือนคีย์เซสชันของเอเจนต์ที่มีขอบเขต (เช่น ขึ้นต้นด้วย
agent:) จะถูกแทนที่ด้วย unknown ในแอตทริบิวต์คาร์ดินาลิตีต่ำ ระเบียนบันทึก
OTLP จะเก็บระดับความรุนแรง ตัวบันทึก ตำแหน่งโค้ด บริบทเทรซที่เชื่อถือได้ และ
แอตทริบิวต์ที่ผ่านการทำให้ปลอดภัยไว้โดยค่าเริ่มต้น ส่วนเนื้อหาหลักของข้อความบันทึกดิบจะส่งออกเฉพาะ
เมื่อ diagnostics.otel.captureContent เป็นค่าบูลีน true คีย์ย่อยแบบละเอียด
captureContent.* จะไม่เปิดใช้งานเนื้อหาหลักของบันทึก เมตริก Talk จะส่งออกเฉพาะ
เมทาดาทาเหตุการณ์ที่มีขอบเขต (โหมด การรับส่งข้อมูล ผู้ให้บริการ ประเภทเหตุการณ์) โดยไม่มี
บทถอดเสียง เพย์โหลดเสียง รหัสเซสชัน รหัสเทิร์น รหัสการโทร รหัสห้อง หรือ
โทเค็นส่งต่อ
คำขอโมเดลขาออกอาจรวมส่วนหัว W3C traceparent ที่สร้างขึ้นเฉพาะ
จากบริบทเทรซการวินิจฉัยที่ OpenClaw เป็นเจ้าของสำหรับการเรียกโมเดลที่กำลังทำงาน
ส่วนหัว traceparent ที่ผู้เรียกส่งมาอยู่แล้วจะถูกแทนที่ ดังนั้น plugin หรือ
ตัวเลือกผู้ให้บริการที่กำหนดเองจึงไม่สามารถปลอมแปลงลำดับบรรพบุรุษของเทรซข้ามบริการได้
ตั้งค่า diagnostics.otel.captureContent.* เป็น true เฉพาะเมื่อตัวรวบรวม
และนโยบายการเก็บรักษาของคุณได้รับอนุมัติสำหรับข้อความพรอมต์ การตอบกลับ เครื่องมือ หรือ
พรอมต์ระบบแล้ว คีย์ย่อยแต่ละรายการทำงานแยกกัน:
inputMessages- เนื้อหาพรอมต์ของผู้ใช้outputMessages- เนื้อหาการตอบกลับของโมเดลtoolInputs- เพย์โหลดอาร์กิวเมนต์ของเครื่องมือtoolOutputs- เพย์โหลดผลลัพธ์ของเครื่องมือsystemPrompt- พรอมต์ระบบ/นักพัฒนาที่ประกอบแล้วtoolDefinitions- ชื่อ คำอธิบาย และสคีมาของเครื่องมือโมเดล
เมื่อเปิดใช้งานคีย์ย่อยใดก็ตาม สแปนของโมเดลและเครื่องมือจะได้รับแอตทริบิวต์
openclaw.content.* ที่มีขอบเขตและผ่านการปกปิดข้อมูลเฉพาะสำหรับคลาสนั้น
เนื้อหา toolInputs/toolOutputs จะถูกบันทึกสำหรับการเรียกใช้เครื่องมือ
ของรันไทม์เอเจนต์ในตัว (openclaw.content.tool_input และ
gen_ai.tool.call.arguments บนสแปนที่เสร็จสมบูรณ์/เกิดข้อผิดพลาด;
openclaw.content.tool_output และ gen_ai.tool.call.result บนสแปนที่เสร็จสมบูรณ์)
ชื่อ openclaw.content.* ยังคงเป็นชื่อแอตทริบิวต์ OpenClaw ที่เสถียร
ส่วนสำเนา gen_ai.tool.call.* จะทำสำเนาชื่อเหล่านั้นสำหรับโปรแกรมดูที่ใช้ semconv โดยตรง
การเรียกเครื่องมือของฮาร์เนสภายนอก (Codex, Claude CLI) จะปล่อย
สแปน tool.execution.* โดยไม่มีเพย์โหลดเนื้อหา เนื้อหาที่บันทึกจะเดินทางผ่าน
ช่องทางที่เชื่อถือได้และรับฟังได้เท่านั้น และจะไม่ถูกวางบนบัสเหตุการณ์วินิจฉัยสาธารณะ
โดยเด็ดขาด
การสุ่มตัวอย่างและการล้างข้อมูล
- เทรซ:
diagnostics.otel.sampleRateกำหนดTraceIdRatioBasedSamplerเฉพาะบนสแปนรากเท่านั้น (0.0ละทิ้งทั้งหมด,1.0เก็บทั้งหมด) หากไม่กำหนด จะใช้ค่าเริ่มต้นของ OpenTelemetry SDK (เปิดตลอดเวลา) - เมตริก:
diagnostics.otel.flushIntervalMs(จำกัดค่าต่ำสุดไว้ที่1000); หากไม่กำหนด จะใช้ค่าเริ่มต้นสำหรับการส่งออกเป็นระยะของ SDK - บันทึก: บันทึก OTLP ใช้
logging.level(ระดับบันทึกของไฟล์) และใช้เส้นทางการปกปิดข้อมูลระเบียนบันทึก สำหรับการวินิจฉัย ไม่ใช่การจัดรูปแบบคอนโซล การติดตั้งที่มีปริมาณข้อมูลสูง ควรเลือกใช้การสุ่มตัวอย่าง/การกรองของตัวรวบรวม OTLP แทนการ สุ่มตัวอย่างภายในเครื่อง ตั้งค่าdiagnostics.otel.logsExporter: "stdout"เมื่อแพลตฟอร์มของคุณ ส่ง stdout/stderr ไปยังตัวประมวลผลบันทึกอยู่แล้ว และคุณไม่มีตัวรวบรวม บันทึก OTLP ระเบียน stdout เป็นออบเจ็กต์ JSON หนึ่งรายการต่อบรรทัด โดยมีts,signal,service.name, ระดับความรุนแรง, เนื้อหา, แอตทริบิวต์ที่ปกปิดข้อมูลแล้ว และฟิลด์เทรซ ที่เชื่อถือได้เมื่อมี - การเชื่อมโยงบันทึกไฟล์: บันทึกไฟล์ JSONL มี
traceId,spanId,parentSpanIdและtraceFlagsที่ระดับบนสุด เมื่อการเรียกบันทึกมีบริบทเทรซ สำหรับการวินิจฉัยที่ถูกต้อง ทำให้ตัวประมวลผลบันทึกเชื่อมบรรทัดบันทึกภายในเครื่องกับ สแปนที่ส่งออกได้ - การเชื่อมโยงคำขอ: คำขอ HTTP และเฟรม WebSocket ของ Gateway จะสร้าง
ขอบเขตเทรซคำขอภายใน บันทึกและเหตุการณ์วินิจฉัยภายใน
ขอบเขตนั้นจะสืบทอดเทรซคำขอตามค่าเริ่มต้น ส่วนสแปนการเรียกใช้เอเจนต์และการเรียกโมเดล
จะถูกสร้างเป็นสแปนลูก เพื่อให้ส่วนหัว
traceparentของผู้ให้บริการอยู่ใน เทรซเดียวกัน - การเชื่อมโยงการเรียกโมเดล: สแปน
openclaw.model.callมีขนาดคอมโพเนนต์ พรอมต์ที่ปลอดภัยตามค่าเริ่มต้น และแอตทริบิวต์โทเค็นต่อการเรียกเมื่อผลลัพธ์จากผู้ให้บริการ เปิดเผยข้อมูลการใช้งานopenclaw.model.usageยังคงเป็นสแปนการคำนวณบัญชี ระดับการเรียกใช้สำหรับแดชบอร์ดต้นทุนรวม บริบท และช่องทาง และ ยังคงอยู่ในเทรซการวินิจฉัยเดียวกันเมื่อรันไทม์ที่ปล่อยข้อมูลมีบริบทเทรซ ที่เชื่อถือได้
หน่วยการสังเกตการเรียกโมเดล
ทุกสแปน openclaw.model.call ระบุว่าวงจรชีวิตของสแปนวัดสิ่งใดผ่าน
openclaw.model_call.observation_unit:
request- คำขอโมเดล/ผู้ให้บริการที่สังเกตได้หนึ่งรายการ การเรียกโมเดลแบบฝังตัวเนทีฟ ใช้หน่วยนี้ และตัวส่งออกจะถือว่าค่าที่ขาดหายเป็นrequestเพื่อ ให้เข้ากันได้กับตัวปล่อยข้อมูลรุ่นเก่าหรือจากภายนอกturn- หนึ่งรอบการทำงานของ CLI เอเจนต์แบบทึบ ซึ่งอาจมีคำขอโมเดลที่ซ่อนอยู่ การลองใหม่ งานเครื่องมือ หรืองานเบื้องหลัง การเรียก Claude Code CLI และ Codex app-server ใช้หน่วยนี้
ทั้งสองหน่วยยังคงเป็นสแปนการเรียกโมเดล เพื่อให้แบ็กเอนด์เทรซแสดงอินพุต
เอาต์พุต การใช้งาน และลำดับชั้นของโมเดลได้ สแปนคำขอใช้การดำเนินการ GenAI ที่ได้จาก API
(chat, generate_content หรือ text_completion) ส่วนสแปนรอบการทำงานใช้
gen_ai.operation.name = invoke_agent ทั้งสองมีส่วนร่วมใน
gen_ai.client.operation.duration โดยชื่อการดำเนินการจะแยกเวลาแฝงของ
คำขอโดยตรงออกจากเวลาแฝงของทั้งรอบการทำงาน เมตริกการเรียกโมเดล OTEL ของ OpenClaw
ยังมี openclaw.model_call.observation_unit; เมตริกการเรียกโมเดลของ Prometheus
เปิดเผยป้ายกำกับ observation_unit ที่เทียบเท่ากัน
ความเที่ยงตรงของการเรียกโมเดล Claude Code CLI
รอบการทำงานของ Claude Code CLI ปล่อยสแปน openclaw.model.call สังเคราะห์
ระดับรอบการทำงานหนึ่งสแปน สแปนเหล่านี้ไม่ใช่สแปนคำขอ HTTP ของ Anthropic โดยใช้ openclaw.api = claude-code, openclaw.model_call.observation_unit = turn และระบุ
การดำเนินการเป็น gen_ai.operation.name = invoke_agent พร้อมระบุ
ขอบเขต CLI ของ OpenClaw ผ่าน
openclaw.transport:
stdio- กระบวนการ Claude Code ภายในเครื่องแบบครั้งเดียวstdio-live- หนึ่งรอบการทำงานในเซสชัน Claude stdio แบบถาวรที่มีการจัดการpaired-node-cli- การเรียกใช้ Claude Code แบบครั้งเดียวที่มอบหมายให้ Node ที่จับคู่ไว้
ระบบวินิจฉัย Claude CLI จะถูกสร้างขึ้นเฉพาะขณะที่ตัวกระจายเหตุการณ์วินิจฉัย ของกระบวนการเปิดใช้งานอยู่ และมีตัวรับฟังเหตุการณ์ภายในหรือที่เชื่อถือได้แนบอยู่ หากไม่มี Plugin สำหรับความสามารถในการสังเกตหรือไม่มีตัวรับฟังอื่นทำงานอยู่ รอบการทำงานของ Claude CLI จะข้าม ลำดับชั้นเทรซสังเคราะห์ บัฟเฟอร์เนื้อหา และการคำนวณจำนวนไบต์ของสตรีม การวินิจฉัย เมื่อเปิดใช้การบันทึกเนื้อหา ฟิลด์พรอมต์และพรอมต์ระบบ จะถูกจำกัดไว้ที่ฟิลด์ละ 128 KiB; เอาต์พุตผู้ช่วยถูกจำกัดไว้ที่ 128 KiB จาก เอนเวโลปไม่เกิน 200 รายการ โดยสงวน 16 KiB และหนึ่งรายการไว้สำหรับการตอบกลับสำรอง สุดท้ายที่มองเห็นได้ เครื่องหมายจะบันทึกการตัดทอนเมื่อถึงขีดจำกัด
OpenClaw กำหนดลำดับชั้นความเป็นเจ้าของให้รอบการทำงานของ Claude CLI แบบเดียวกับที่ใช้โดย
รันไทม์เอเจนต์อื่น: openclaw.harness.run (openclaw.harness.id = claude-cli)
มี openclaw.run ซึ่งมีสแปน openclaw.model.call ของ Claude
แฮร์เนสและสแปนการเรียกใช้เป็นขอบเขตรอบการทำงานสังเคราะห์ของ OpenClaw ไม่ใช่
เฟสภายในของ Claude Code รอบการทำงานแบบครั้งเดียวและแบบ stdio ที่มีการจัดการใช้
ลำดับชั้นเดียวกัน; การลองใหม่ด้วยเซสชันใหม่จริงจะสร้างสแปนลูกการเรียกโมเดลอีกหนึ่งสแปนภายใน
การเรียกใช้ OpenClaw เดิม
สแปนเริ่มเมื่อ OpenClaw รับรอบการทำงาน CLI ที่เตรียมไว้ และสิ้นสุดหลังจาก รอบการทำงานนั้นสำเร็จหรือล้มเหลวเท่านั้น สำหรับเซสชันที่มีการจัดการ ผลลัพธ์สำเร็จชั่วคราว จะไม่สิ้นสุดสแปนขณะที่ Claude รายงานเอเจนต์เบื้องหลังหรือ เวิร์กโฟลว์ที่ยังคงเก็บผลลัพธ์ไว้; ผลลัพธ์สุดท้ายหลังระบายงานจึงจะสิ้นสุดสแปน การยกเลิก การหมดเวลา ความล้มเหลวของกระบวนการ ความล้มเหลวของเอาต์พุต/การแยกวิเคราะห์ และความล้มเหลวอื่นของรอบการทำงาน จะสิ้นสุดสแปนเดียวกันด้วยข้อผิดพลาด
Claude Code รายงานการใช้งานต่อข้อความผู้ช่วย และอาจรายงานการใช้งาน สะสมในผลลัพธ์ปลายทางด้วย การคำนวณบัญชีการตอบกลับของ OpenClaw ยังคงใช้ ข้อความผู้ช่วยล่าสุด เพื่อไม่ให้ความหมายด้านต้นทุนเดิมเปลี่ยนแปลง; สแปนการเรียกโมเดลระดับรอบการทำงานใช้การใช้งานสะสมจากผลลัพธ์ปลายทางเมื่อมี รวมถึงโทเค็นการอ่านแคชและการสร้างแคช
สำหรับสแปน CLI เหล่านี้ ฟิลด์ไบต์และเวลาจะอธิบายขอบเขต CLI ของ OpenClaw ที่สังเกตได้:
openclaw.model_call.request_bytesคือขนาด UTF-8 ของค่าพรอมต์ ที่ส่งผ่าน stdin/argv แบบครั้งเดียว หรือเอนเวโลปผู้ใช้ JSONL ของ stdio ที่มีการจัดการ ซึ่ง ไม่ใช่ขนาดของคำขอโมเดลที่ซ่อนอยู่ของ Claude Codeopenclaw.model_call.response_bytesคือขนาด UTF-8 ของ stdout จาก Claude CLI ที่สังเกตได้ระหว่างรอบการทำงาน ซึ่งไม่ใช่ขนาดการตอบกลับ HTTP ของ Anthropicopenclaw.model_call.time_to_first_byte_msคือระยะเวลาจนถึงเอาต์พุต stdout หรือ stderr แรกจาก Claude CLI ที่สังเกตได้ ซึ่งไม่ใช่ TTFB ของเครือข่าย
เมื่อเปิดใช้ฟิลด์ captureContent แบบละเอียดที่ตรงกัน สแปนจะส่งออก
พรอมต์จริงที่ OpenClaw ส่งให้ Claude Code, พรอมต์ระบบที่ OpenClaw ต่อท้าย และข้อความ/การให้เหตุผล/ข้อมูลระบุตัวตนการเรียกเครื่องมือ
ของผู้ช่วยที่มองเห็นได้ ผ่าน
gen_ai.input.messages, gen_ai.output.messages และ
gen_ai.system_instructions อาร์กิวเมนต์เครื่องมือ ลายเซ็นการคิดแบบทึบ และ
ผลลัพธ์เครื่องมือจะถูกละเว้นจากเอนเวโลปผู้ช่วย Claude OpenClaw ไม่
อ้างว่าสามารถเข้าถึงพรอมต์ระบบส่วนตัวของ Claude Code, เพย์โหลดคำขอที่ซ่อนอยู่ซึ่งกลับมาทำต่อหรือ
ผ่าน Compaction แล้ว, สคีมาเครื่องมือภายในแบบเนทีฟ, คำขอ HTTP ดิบของ Anthropic,
การลองใหม่ภายใน, รหัสคำขอจากต้นทาง หรือ TTFB เครือข่ายจริง เนื่องจาก
Claude Code ไม่เปิดเผยข้อกำหนดเครื่องมือเนทีฟที่มีผลจริงอย่างแม่นยำ
สแปนเหล่านี้จึงไม่เติมข้อมูลใน gen_ai.tool.definitions
สแปนเครื่องมือของแฮร์เนส Claude ภายนอกยังคงมีเฉพาะเมทาดาทา แม้เปิดใช้ การบันทึกเนื้อหาเครื่องมือ เช่นเดียวกับทุกสแปนโมเดล เนื้อหา Claude CLI ที่บันทึกไว้ใช้ เส้นทางเฉพาะตัวรับฟังที่เชื่อถือได้ ตลอดจนการปกปิดข้อมูลและขีดจำกัดขนาด ที่มีอยู่ของตัวส่งออก; เนื้อหายังคงปิดอยู่ตามค่าเริ่มต้น
เมตริกที่ส่งออก
การใช้งานโมเดล
openclaw.tokens(ตัวนับ, แอตทริบิวต์:openclaw.token,openclaw.channel,openclaw.provider,openclaw.model,openclaw.agent)openclaw.cost.usd(ตัวนับ, แอตทริบิวต์:openclaw.channel,openclaw.provider,openclaw.model)openclaw.run.duration_ms(ฮิสโตแกรม, แอตทริบิวต์:openclaw.channel,openclaw.provider,openclaw.model)openclaw.context.tokens(ฮิสโตแกรม, แอตทริบิวต์:openclaw.context,openclaw.channel,openclaw.provider,openclaw.model)gen_ai.client.token.usage(ฮิสโตแกรม, เมตริกตามข้อตกลงเชิงความหมาย GenAI, แอตทริบิวต์:gen_ai.token.type=input/output,gen_ai.provider.name,gen_ai.operation.name,gen_ai.request.model)gen_ai.client.operation.duration(ฮิสโตแกรม, วินาที, เมตริกตามข้อตกลงเชิงความหมาย GenAI สำหรับคำขอโมเดลและรอบการทำงานเอเจนต์สังเคราะห์; แอตทริบิวต์:gen_ai.provider.name,gen_ai.operation.name,gen_ai.request.model,error.typeที่ไม่บังคับ; การสังเกตรอบการทำงานใช้gen_ai.operation.name = invoke_agent)openclaw.model_call.duration_ms(ฮิสโตแกรม, แอตทริบิวต์:openclaw.provider,openclaw.model,openclaw.api,openclaw.transport,openclaw.model_call.observation_unitรวมถึงopenclaw.errorCategoryและopenclaw.failureKindสำหรับข้อผิดพลาดที่จำแนกแล้ว)openclaw.model_call.request_bytes(ฮิสโตแกรม, ขนาดไบต์ UTF-8 ของเพย์โหลดคำขอโมเดลสุดท้าย; สำหรับ Claude Code CLI คืออินพุตพรอมต์/เอนเวโลปที่สังเกตได้ตามที่อธิบายไว้ข้างต้น; ไม่มีเนื้อหาเพย์โหลดดิบ)openclaw.model_call.response_bytes(ฮิสโตแกรม, ขนาดไบต์ UTF-8 ของเพย์โหลดส่วนย่อยการตอบกลับแบบสตรีม; เดลตาข้อความ การคิด และการเรียกเครื่องมือที่มีความถี่สูงจะนับเฉพาะไบต์deltaส่วนเพิ่ม; สำหรับ Claude Code CLI คือไบต์ stdout ที่สังเกตได้; ไม่มีเนื้อหาการตอบกลับดิบ)openclaw.model_call.time_to_first_byte_ms(ฮิสโตแกรม, เวลาที่ผ่านไปก่อนเหตุการณ์การตอบกลับแบบสตรีมครั้งแรก; สำหรับ Claude Code CLI คือเอาต์พุต CLI แรกที่สังเกตได้แทน TTFB ของเครือข่าย)openclaw.model.failover(ตัวนับ, แอตทริบิวต์:openclaw.provider,openclaw.model,openclaw.failover.to_provider,openclaw.failover.to_model,openclaw.failover.reason,openclaw.failover.suspended,openclaw.lane)openclaw.skill.used(ตัวนับ, แอตทริบิวต์:openclaw.skill.name,openclaw.skill.source,openclaw.skill.activation,openclaw.agentที่ไม่บังคับ,openclaw.toolNameที่ไม่บังคับ)
การไหลของข้อความ
openclaw.webhook.received(ตัวนับ, แอตทริบิวต์:openclaw.channel,openclaw.webhook)openclaw.webhook.error(ตัวนับ, แอตทริบิวต์:openclaw.channel,openclaw.webhook)openclaw.webhook.duration_ms(ฮิสโตแกรม, แอตทริบิวต์:openclaw.channel,openclaw.webhook)openclaw.message.queued(ตัวนับ, แอตทริบิวต์:openclaw.channel,openclaw.source)openclaw.message.received(ตัวนับ, แอตทริบิวต์:openclaw.channel,openclaw.source)openclaw.message.dispatch.started(ตัวนับ, แอตทริบิวต์:openclaw.channel,openclaw.source)openclaw.message.dispatch.completed(ตัวนับ, แอตทริบิวต์:openclaw.channel,openclaw.outcome,openclaw.reason,openclaw.source)openclaw.message.dispatch.duration_ms(ฮิสโตแกรม, แอตทริบิวต์:openclaw.channel,openclaw.outcome,openclaw.reason,openclaw.source)openclaw.message.processed(ตัวนับ, แอตทริบิวต์:openclaw.channel,openclaw.outcome)openclaw.message.duration_ms(ฮิสโตแกรม, แอตทริบิวต์:openclaw.channel,openclaw.outcome)openclaw.message.delivery.started(ตัวนับ, แอตทริบิวต์:openclaw.channel,openclaw.delivery.kind)openclaw.message.delivery.duration_ms(ฮิสโตแกรม, แอตทริบิวต์:openclaw.channel,openclaw.delivery.kind,openclaw.outcome,openclaw.errorCategory)
การสนทนา
openclaw.talk.event(ตัวนับ, แอตทริบิวต์:openclaw.talk.event_type,openclaw.talk.mode,openclaw.talk.transport,openclaw.talk.brain,openclaw.talk.provider)openclaw.talk.event.duration_ms(ฮิสโตแกรม, แอตทริบิวต์: เหมือนกับopenclaw.talk.event; ปล่อยเมื่อเหตุการณ์การสนทนารายงานระยะเวลา)openclaw.talk.audio.bytes(ฮิสโตแกรม, แอตทริบิวต์: เหมือนกับopenclaw.talk.event; ปล่อยสำหรับเหตุการณ์เฟรมเสียงของการสนทนาที่รายงานความยาวเป็นไบต์)
คิวและเซสชัน
openclaw.queue.lane.enqueue(ตัวนับ, แอตทริบิวต์:openclaw.lane)openclaw.queue.lane.dequeue(ตัวนับ, แอตทริบิวต์:openclaw.lane)openclaw.queue.depth(ฮิสโตแกรม, แอตทริบิวต์:openclaw.laneหรือopenclaw.channel=heartbeat)openclaw.queue.wait_ms(ฮิสโตแกรม, แอตทริบิวต์:openclaw.lane)openclaw.session.state(ตัวนับ, แอตทริบิวต์:openclaw.state,openclaw.reason)openclaw.session.stuck(ตัวนับ, แอตทริบิวต์:openclaw.state; ปล่อยออกมาสำหรับการเก็บบัญชีเซสชันที่ล้าสมัยซึ่งกู้คืนได้)openclaw.session.stuck_age_ms(ฮิสโตแกรม, แอตทริบิวต์:openclaw.state; ปล่อยออกมาสำหรับการเก็บบัญชีเซสชันที่ล้าสมัยซึ่งกู้คืนได้)openclaw.session.turn.created(ตัวนับ, แอตทริบิวต์:openclaw.agent,openclaw.channel,openclaw.trigger)openclaw.session.recovery.requested(ตัวนับ, แอตทริบิวต์:openclaw.state,openclaw.action,openclaw.active_work_kind,openclaw.reason)openclaw.session.recovery.completed(ตัวนับ, แอตทริบิวต์:openclaw.state,openclaw.action,openclaw.status,openclaw.active_work_kind,openclaw.reason)openclaw.session.recovery.age_ms(ฮิสโตแกรม, แอตทริบิวต์: เหมือนกับตัวนับการกู้คืนที่ตรงกัน)openclaw.run.attempt(ตัวนับ, แอตทริบิวต์:openclaw.attempt)
เทเลเมทรีความพร้อมใช้งานของเซสชัน
เซสชัน processing จะไม่สะสมอายุไปสู่เกณฑ์ความพร้อมใช้งานในตัว ขณะที่ OpenClaw สังเกตเห็นความคืบหน้าของการตอบกลับ เครื่องมือ สถานะ บล็อก หรือรันไทม์ ACP การส่งสัญญาณรักษาสถานะขณะพิมพ์ไม่นับเป็นความคืบหน้า จึงยังตรวจพบโมเดลหรือฮาร์เนสที่เงียบได้
OpenClaw จำแนกเซสชันตามงานที่ยังสังเกตเห็นได้:
session.long_running: งานแบบฝังที่ทำงานอยู่ การเรียกโมเดล หรือการเรียกเครื่องมือ ยังคงมีความคืบหน้า การเรียกโมเดลแบบเงียบที่มีเจ้าของยังถูกรายงานว่าใช้เวลานานก่อนถึงเกณฑ์ยกเลิกในตัว เพื่อให้ผู้ให้บริการโมเดลที่ช้าหรือไม่สตรีมไม่ดูเหมือนเซสชัน Gateway ที่หยุดค้าง ขณะที่ยังสังเกตการยกเลิกได้session.stalled: มีงานที่ทำงานอยู่ แต่การทำงานที่ใช้งานอยู่ไม่ได้รายงาน ความคืบหน้าล่าสุด การเรียกโมเดลที่มีเจ้าของจะเปลี่ยนจากsession.long_runningเป็นsession.stalledเมื่อถึงหรือหลังเกณฑ์ยกเลิกในตัว กิจกรรม ของโมเดล/เครื่องมือที่ล้าสมัยและไม่มีเจ้าของจะไม่ถือเป็นงานที่ใช้เวลานานโดยไม่เป็นอันตราย การทำงานแบบฝังที่หยุดค้างจะอยู่ในสถานะสังเกตการณ์อย่างเดียวในตอนแรก จากนั้นจึงยกเลิกและระบายงานหลังจาก ถึงเกณฑ์ยกเลิกโดยไม่มีความคืบหน้า เพื่อให้เทิร์นที่รอคิวอยู่ด้านหลังเลนกลับมาทำงานต่อได้session.stuck: การเก็บบัญชีเซสชันที่ล้าสมัยโดยไม่มีงานที่ทำงานอยู่ หรือเซสชัน ที่เข้าคิวและไม่ได้ใช้งานซึ่งมีกิจกรรมโมเดล/เครื่องมือที่ล้าสมัยและไม่มีเจ้าของ การดำเนินการนี้จะปล่อย เลนเซสชันที่ได้รับผลกระทบทันทีหลังผ่านเกตการกู้คืน
การกู้คืนจะปล่อยเหตุการณ์ session.recovery.requested และ
session.recovery.completed ที่มีโครงสร้าง สถานะเซสชันสำหรับการวินิจฉัยจะถูกทำเครื่องหมายว่าไม่ได้ใช้งาน
เฉพาะหลังผลลัพธ์การกู้คืนที่เปลี่ยนแปลงสถานะ (aborted หรือ released) และเฉพาะเมื่อ
รุ่นการประมวลผลเดียวกันยังคงเป็นรุ่นปัจจุบัน
เฉพาะ session.stuck เท่านั้นที่ปล่อยตัวนับ openclaw.session.stuck,
ฮิสโตแกรม openclaw.session.stuck_age_ms และ
สแปน openclaw.session.stuck การวินิจฉัย session.stuck ที่เกิดซ้ำจะเพิ่มช่วงหน่วงขณะที่เซสชันยังคง
ไม่เปลี่ยนแปลง ดังนั้นแดชบอร์ดควรแจ้งเตือนเมื่อมีการเพิ่มขึ้นอย่างต่อเนื่อง แทนที่จะเป็น
ทุกจังหวะ Heartbeat สำหรับตัวเลือกการกำหนดค่าและค่าเริ่มต้น โปรดดู
ข้อมูลอ้างอิงการกำหนดค่า
คำเตือนความพร้อมใช้งานยังปล่อย:
openclaw.liveness.warning(ตัวนับ, แอตทริบิวต์:openclaw.liveness.reason)openclaw.liveness.event_loop_delay_p99_ms(ฮิสโตแกรม, แอตทริบิวต์:openclaw.liveness.reason)openclaw.liveness.event_loop_delay_max_ms(ฮิสโตแกรม, แอตทริบิวต์:openclaw.liveness.reason)openclaw.liveness.event_loop_utilization(ฮิสโตแกรม, แอตทริบิวต์:openclaw.liveness.reason)openclaw.liveness.cpu_core_ratio(ฮิสโตแกรม, แอตทริบิวต์:openclaw.liveness.reason)
วงจรชีวิตของฮาร์เนส
openclaw.harness.duration_ms(ฮิสโตแกรม, แอตทริบิวต์:openclaw.harness.id,openclaw.harness.plugin,openclaw.outcome,openclaw.harness.phaseเมื่อเกิดข้อผิดพลาด)
การดำเนินการเครื่องมือและการตรวจจับลูป
openclaw.tool.execution.duration_ms(ฮิสโตแกรม, แอตทริบิวต์:gen_ai.tool.name,openclaw.toolName,openclaw.tool.source,openclaw.tool.owner,openclaw.tool.params.kindและopenclaw.errorCategoryเมื่อเกิดข้อผิดพลาด)openclaw.tool.execution.blocked(ตัวนับ, แอตทริบิวต์:gen_ai.tool.name,openclaw.toolName,openclaw.tool.source,openclaw.tool.owner,openclaw.tool.params.kind,openclaw.deniedReason)openclaw.tool.loop(ตัวนับ, แอตทริบิวต์:openclaw.toolName,openclaw.loop.level,openclaw.loop.action,openclaw.loop.detector,openclaw.loop.count,openclaw.loop.paired_toolซึ่งเป็นตัวเลือก; ปล่อยออกมาเมื่อตรวจพบลูปการเรียกเครื่องมือซ้ำ)
Exec
openclaw.exec.duration_ms(ฮิสโตแกรม, แอตทริบิวต์:openclaw.exec.target,openclaw.exec.mode,openclaw.outcome,openclaw.failureKind)
ส่วนภายในของการวินิจฉัย (หน่วยความจำ เพย์โหลด สถานะของตัวส่งออก)
openclaw.payload.large(ตัวนับ, แอตทริบิวต์:openclaw.payload.surface,openclaw.payload.action,openclaw.channel,openclaw.plugin,openclaw.reason)openclaw.payload.large_bytes(ฮิสโตแกรม, แอตทริบิวต์: เหมือนกับ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(ฮิสโตแกรม, ไม่มีแอตทริบิวต์; ตัวอย่างหน่วยความจำของกระบวนการ)openclaw.memory.pressure(ตัวนับ, แอตทริบิวต์:openclaw.memory.level,openclaw.memory.reason)openclaw.diagnostic.async_queue.dropped(ตัวนับ, แอตทริบิวต์:openclaw.diagnostic.async_queue.drop_class; การทิ้งข้อมูลเนื่องจากแรงดันย้อนกลับของคิววินิจฉัยภายใน)openclaw.telemetry.exporter.events(ตัวนับ, แอตทริบิวต์:openclaw.exporter,openclaw.signal,openclaw.status,openclaw.reasonซึ่งเป็นตัวเลือก,openclaw.errorCategoryซึ่งเป็นตัวเลือก; เทเลเมทรีตนเองของวงจรชีวิต/ความล้มเหลวของตัวส่งออก)
สแปนที่ส่งออก
openclaw.model.usageopenclaw.channel,openclaw.provider,openclaw.modelopenclaw.tokens.*(อินพุต/เอาต์พุต/การอ่านแคช/การเขียนแคช/รวม)gen_ai.systemโดยค่าเริ่มต้น หรือgen_ai.provider.nameเมื่อเลือกใช้ข้อกำหนดเชิงความหมาย GenAI ล่าสุดgen_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.systemโดยค่าเริ่มต้น หรือgen_ai.provider.nameเมื่อเลือกใช้ข้อกำหนดเชิงความหมาย GenAI ล่าสุดgen_ai.request.model,gen_ai.operation.name,openclaw.provider,openclaw.model,openclaw.api,openclaw.transport,openclaw.model_call.observation_unit(requestหรือturn)openclaw.errorCategory,error.typeและopenclaw.failureKindซึ่งเป็นตัวเลือกเมื่อเกิดข้อผิดพลาดopenclaw.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(เฉพาะขนาดคอมโพเนนต์ที่ปลอดภัย ไม่มีข้อความพรอมต์)openclaw.model_call.usage.*และgen_ai.usage.*เมื่อผลลัพธ์มีข้อมูลการใช้งานสำหรับคำขอนั้นหรือเทิร์นแบบรวม- เหตุการณ์สแปน
openclaw.provider.requestพร้อมแอตทริบิวต์openclaw.upstreamRequestIdHash(มีขอบเขตจำกัดและอิงแฮช) เมื่อผลลัพธ์จากผู้ให้บริการต้นทางเปิดเผยรหัสคำขอ โดยจะไม่มีการส่งออกรหัสดิบ - เมื่อใช้
OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimentalสแปนคำขอจะใช้ชื่อสแปนการอนุมาน GenAI ล่าสุด{gen_ai.operation.name} {gen_ai.request.model}สแปนเทิร์นใช้invoke_agentเนื่องจาก OpenClaw ไม่อ้างชื่อเอเจนต์ดั้งเดิมจากขอบเขต CLI ที่ไม่โปร่งใส ทั้งสองใช้ชนิดสแปนCLIENTแทนopenclaw.model.call
openclaw.harness.runopenclaw.harness.id,openclaw.harness.plugin,openclaw.outcome,openclaw.provider,openclaw.model,openclaw.channel- เมื่อเสร็จสมบูรณ์:
openclaw.harness.result_classification,openclaw.harness.yield_detected,openclaw.harness.items.started,openclaw.harness.items.completed,openclaw.harness.items.active - เมื่อเกิดข้อผิดพลาด:
openclaw.harness.phase,openclaw.errorCategory,openclaw.harness.cleanup_failedซึ่งเป็นตัวเลือก
openclaw.tool.executiongen_ai.tool.name,gen_ai.operation.name(execute_tool),openclaw.toolName,openclaw.tool.source,gen_ai.tool.call.idซึ่งเป็นตัวเลือก,openclaw.tool.owner,openclaw.tool.params.*openclaw.errorCategory/openclaw.errorCodeซึ่งเป็นตัวเลือกเมื่อเกิดข้อผิดพลาด,openclaw.deniedReasonและopenclaw.outcome=blockedเมื่อถูกปฏิเสธโดยนโยบายหรือแซนด์บ็อกซ์
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(ไม่มีเนื้อหาพรอมต์ ประวัติ การตอบกลับ หรือคีย์เซสชัน)
openclaw.tool.loopopenclaw.toolName,openclaw.loop.level,openclaw.loop.action,openclaw.loop.detector,openclaw.loop.count,openclaw.loop.paired_toolซึ่งเป็นตัวเลือก (ไม่มีข้อความลูป พารามิเตอร์ หรือเอาต์พุตเครื่องมือ)
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_msซึ่งเป็นตัวเลือก
เมื่อเปิดใช้งานการบันทึกเนื้อหาอย่างชัดเจน สแปนของโมเดลและเครื่องมือยังสามารถ
รวมแอตทริบิวต์ openclaw.content.* ที่มีขอบเขตจำกัดและปกปิดข้อมูล สำหรับคลาส
เนื้อหาเฉพาะที่เลือกใช้
แค็ตตาล็อกเหตุการณ์วินิจฉัย
เหตุการณ์ด้านล่างรองรับเมตริกและสแปนด้านบน หรือพร้อมใช้งานสำหรับการสมัครรับข้อมูลโดยตรง
ของ Plugin run.progress และ run.execution_phase เป็นสัญญาณวงจรชีวิต
สำหรับการใช้งานโดยตรงเท่านั้น โดย Plugin diagnostics-otel จะไม่ส่งออกเป็น
สัญญาณ OTLP แบบแยกเดี่ยว ชนิดเหตุการณ์และค่า run.execution_phase.phase สามารถ
เพิ่มเติมได้ ผู้ใช้ TypeScript ควรคงสาขาเริ่มต้นไว้ แทนที่จะถือว่า
ยูเนียนใดยูเนียนหนึ่งจะครอบคลุมทั้งหมดอย่างถาวร
การใช้งานโมเดล
model.usage- โทเค็น ค่าใช้จ่าย ระยะเวลา บริบท ผู้ให้บริการ/โมเดล/ช่องทาง และรหัสเซสชันusageคือการลงบัญชีระดับผู้ให้บริการ/เทิร์นสำหรับค่าใช้จ่ายและเทเลเมทรี ส่วนcontext.usedคือสแนปช็อตพรอมต์/บริบทปัจจุบัน และอาจต่ำกว่าusage.totalของผู้ให้บริการ เมื่อมีอินพุตที่แคชไว้หรือการเรียกในลูปเครื่องมือ
โฟลว์ข้อความ
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(ไมล์สโตนการเริ่มต้นตัวรันแบบฝังที่เป็นสาธารณะและเชื่อมโยงกับเซสชัน)diagnostic.heartbeat(ตัวนับแบบรวม: Webhook/คิว/เซสชัน)
วงจรชีวิตของฮาร์เนส
harness.run.started/harness.run.completed/harness.run.error- วงจรชีวิตต่อการทำงานสำหรับฮาร์เนสของเอเจนต์ รวมharnessId,pluginIdซึ่งเป็นตัวเลือก, ผู้ให้บริการ/โมเดล/ช่องทาง และรหัสการทำงาน เมื่อเสร็จสมบูรณ์จะเพิ่มdurationMs,outcome,resultClassificationซึ่งเป็นตัวเลือก,yieldDetectedและจำนวนitemLifecycleข้อผิดพลาดจะเพิ่มphase(prepare/start/send/resolve/cleanup),errorCategoryและcleanupFailedซึ่งเป็นตัวเลือก
Exec
exec.process.completed- ผลลัพธ์ของเทอร์มินัล ระยะเวลา เป้าหมาย โหมด รหัส การออก และประเภทความล้มเหลว ไม่รวมข้อความคำสั่งและไดเรกทอรี ทำงานexec.approval.followup_suppressed- ละทิ้งการติดตามผลการอนุมัติที่ล้าสมัย หลังจากเซสชันเชื่อมโยงใหม่ รวมapprovalId,reason(session_rebound),phase(direct_deliveryหรือgateway_preflight) และการประทับเวลาของตัวกระจายงาน ไม่รวมคีย์เซสชัน เส้นทาง และข้อความคำสั่ง
เมื่อไม่มีตัวส่งออก
ทำให้อีเวนต์การวินิจฉัยพร้อมใช้งานสำหรับ Plugin หรือปลายทางแบบกำหนดเองโดยไม่ต้องเรียกใช้
diagnostics-otel:
{ diagnostics: { enabled: true },}สำหรับเอาต์พุตการดีบักแบบเจาะจงโดยไม่เพิ่ม logging.level ให้ใช้แฟล็ก
การวินิจฉัย แฟล็กไม่คำนึงถึงตัวพิมพ์เล็ก-ใหญ่และรองรับไวลด์การ์ด (telegram.* หรือ
*):
{ diagnostics: { flags: ["telegram.http"] },}หรือใช้การเขียนทับด้วยตัวแปรสภาพแวดล้อมแบบครั้งเดียว:
OPENCLAW_DIAGNOSTICS=telegram.http,telegram.payload openclaw gatewayเอาต์พุตของแฟล็กจะถูกส่งไปยังไฟล์บันทึกมาตรฐาน (logging.file) และยังคง
ถูกปกปิดข้อมูลโดย logging.redactSensitive คู่มือฉบับเต็ม:
แฟล็กการวินิจฉัย
ปิดใช้งาน
{ diagnostics: { otel: { enabled: false } },}หรือไม่นำ diagnostics-otel ไว้ใน plugins.allow หรือเรียกใช้
openclaw plugins disable diagnostics-otel
ที่เกี่ยวข้อง
- การบันทึก - บันทึกในไฟล์ เอาต์พุตคอนโซล การติดตามแบบต่อเนื่องด้วย CLI และแท็บ Logs ของ Control UI
- การทำงานภายในของการบันทึก Gateway - รูปแบบบันทึก WS คำนำหน้าระบบย่อย และการจับเอาต์พุตคอนโซล
- แฟล็กการวินิจฉัย - แฟล็กบันทึกการดีบักแบบเจาะจง
- การส่งออกข้อมูลวินิจฉัย - เครื่องมือชุดข้อมูลสนับสนุนสำหรับผู้ดูแลระบบ (แยกจากการส่งออก OTEL)
- ข้อมูลอ้างอิงการกำหนดค่า - ข้อมูลอ้างอิงฟิลด์
diagnostics.*ฉบับเต็ม