Chuyển đến nội dung chính
OpenClaw xuất chẩn đoán thông qua Plugin diagnostics-otel chính thức bằng OTLP/HTTP (protobuf). Nhật ký cũng có thể được ghi dưới dạng stdout JSONL cho các pipeline nhật ký container và sandbox. Mọi collector hoặc backend chấp nhận OTLP/HTTP đều hoạt động mà không cần thay đổi mã. Để biết nhật ký tệp cục bộ và cách đọc chúng, xem Ghi nhật ký.

Cách các thành phần khớp với nhau

  • Sự kiện chẩn đoán là các bản ghi có cấu trúc, trong tiến trình, do Gateway và các Plugin đi kèm phát ra cho lượt chạy mô hình, luồng tin nhắn, phiên, hàng đợi, và exec.
  • Plugin diagnostics-otel đăng ký nhận các sự kiện đó và xuất chúng dưới dạng metrics, traces, và logs của OpenTelemetry qua OTLP/HTTP. Nó cũng có thể sao chép các bản ghi nhật ký chẩn đoán sang stdout JSONL.
  • Lệnh gọi provider nhận header W3C traceparent từ ngữ cảnh span lệnh gọi mô hình đáng tin cậy của OpenClaw khi transport của provider chấp nhận header tùy chỉnh. Ngữ cảnh trace do Plugin phát ra không được truyền tiếp.
  • Exporter chỉ được gắn khi cả bề mặt chẩn đoán và Plugin đều được bật, nên chi phí trong tiến trình mặc định gần như bằng không.

Bắt đầu nhanh

Với bản cài đặt đóng gói, hãy cài Plugin trước:
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,
    },
  },
}
Bạn cũng có thể bật Plugin từ CLI:
openclaw plugins enable diagnostics-otel
protocol hiện chỉ hỗ trợ http/protobuf. grpc bị bỏ qua.

Tín hiệu được xuất

Tín hiệuNội dung bên trong
MetricsCounter và histogram cho mức dùng token, chi phí, thời lượng chạy, failover, mức dùng skill, luồng tin nhắn, sự kiện Talk, lane hàng đợi, trạng thái/khôi phục phiên, thực thi công cụ, payload quá lớn, exec, và áp lực bộ nhớ.
TracesSpan cho mức dùng mô hình, lệnh gọi mô hình, vòng đời harness, mức dùng skill, thực thi công cụ, exec, xử lý webhook/tin nhắn, lắp ráp ngữ cảnh, và vòng lặp công cụ.
LogsBản ghi logging.file có cấu trúc được xuất qua OTLP hoặc stdout JSONL khi diagnostics.otel.logs được bật; thân nhật ký được giữ lại trừ khi tính năng ghi lại nội dung được bật rõ ràng.
Bật/tắt traces, metrics, và logs độc lập. Trace và metric mặc định bật khi diagnostics.otel.enabled là true. Log mặc định tắt và chỉ được xuất khi diagnostics.otel.logs được đặt rõ ràng thành true. Xuất log mặc định sang OTLP; đặt diagnostics.otel.logsExporter thành stdout để có JSONL trên stdout, hoặc both để gửi từng bản ghi nhật ký chẩn đoán tới OTLP và stdout.

Tham chiếu cấu hình

{
  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 is ignored
      serviceName: "openclaw-gateway",
      headers: { "x-collector-token": "..." },
      traces: true,
      metrics: true,
      logs: true,
      logsExporter: "otlp", // otlp | stdout | both
      sampleRate: 0.2, // root-span sampler, 0.0..1.0
      flushIntervalMs: 60000, // metric export interval (min 1000ms)
      captureContent: {
        enabled: false,
        inputMessages: false,
        outputMessages: false,
        toolInputs: false,
        toolOutputs: false,
        systemPrompt: false,
        toolDefinitions: false,
      },
    },
  },
}

Biến môi trường

BiếnMục đích
OTEL_EXPORTER_OTLP_ENDPOINTGhi đè diagnostics.otel.endpoint. Nếu giá trị đã chứa /v1/traces, /v1/metrics, hoặc /v1/logs, giá trị đó được dùng nguyên trạng.
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT / OTEL_EXPORTER_OTLP_METRICS_ENDPOINT / OTEL_EXPORTER_OTLP_LOGS_ENDPOINTGhi đè endpoint theo từng tín hiệu, được dùng khi khóa cấu hình diagnostics.otel.*Endpoint tương ứng chưa được đặt. Cấu hình theo từng tín hiệu thắng env theo từng tín hiệu, và env theo từng tín hiệu thắng endpoint dùng chung.
OTEL_SERVICE_NAMEGhi đè diagnostics.otel.serviceName.
OTEL_EXPORTER_OTLP_PROTOCOLGhi đè giao thức truyền dẫn (hiện nay chỉ http/protobuf được áp dụng).
OTEL_SEMCONV_STABILITY_OPT_INĐặt thành gen_ai_latest_experimental để phát ra hình dạng span suy luận GenAI thử nghiệm mới nhất, bao gồm tên span {gen_ai.operation.name} {gen_ai.request.model}, loại span CLIENT, và gen_ai.provider.name thay cho gen_ai.system kế thừa. Metric GenAI luôn dùng các thuộc tính ngữ nghĩa có cardinality thấp, có giới hạn.
OPENCLAW_OTEL_PRELOADEDĐặt thành 1 khi một preload khác hoặc tiến trình host đã đăng ký SDK OpenTelemetry toàn cục. Khi đó Plugin bỏ qua vòng đời NodeSDK của chính nó nhưng vẫn nối listener chẩn đoán và tôn trọng traces/metrics/logs.

Quyền riêng tư và ghi lại nội dung

Nội dung mô hình/công cụ thô không được xuất theo mặc định. Span mang các định danh có giới hạn (channel, provider, model, danh mục lỗi, id yêu cầu chỉ dạng hash, nguồn công cụ, chủ sở hữu công cụ, và tên/nguồn skill) và không bao giờ bao gồm văn bản prompt, văn bản phản hồi, đầu vào công cụ, đầu ra công cụ, đường dẫn tệp skill, hoặc khóa phiên. Bản ghi log OTLP mặc định giữ lại mức độ nghiêm trọng, logger, vị trí mã, ngữ cảnh trace đáng tin cậy, và các thuộc tính đã được làm sạch, nhưng thân thông điệp log thô chỉ được xuất khi diagnostics.otel.captureContent được đặt thành boolean true. Các khóa con captureContent.* chi tiết không bật thân log. Nhãn trông giống khóa phiên agent có phạm vi sẽ được thay bằng unknown. Metric Talk chỉ xuất metadata sự kiện có giới hạn như chế độ, transport, provider, và loại sự kiện. Chúng không bao gồm bản chép lời, payload âm thanh, id phiên, id lượt, id cuộc gọi, id phòng, hoặc token bàn giao. Yêu cầu mô hình gửi đi có thể bao gồm header W3C traceparent. Header đó chỉ được tạo từ ngữ cảnh trace chẩn đoán do OpenClaw sở hữu cho lệnh gọi mô hình đang hoạt động. Header traceparent do caller hiện có cung cấp sẽ bị thay thế, nên Plugin hoặc tùy chọn provider tùy chỉnh không thể giả mạo quan hệ tổ tiên trace xuyên dịch vụ. Chỉ đặt diagnostics.otel.captureContent.* thành true khi collector và chính sách lưu giữ của bạn đã được phê duyệt cho văn bản prompt, phản hồi, công cụ, hoặc system-prompt. Mỗi khóa con được bật riêng:
  • inputMessages - nội dung prompt của người dùng.
  • outputMessages - nội dung phản hồi của mô hình.
  • toolInputs - payload đối số công cụ.
  • toolOutputs - payload kết quả công cụ.
  • systemPrompt - prompt hệ thống/nhà phát triển đã lắp ráp.
  • toolDefinitions - tên, mô tả, và schema công cụ mô hình.
Khi bất kỳ khóa con nào được bật, span mô hình và công cụ nhận các thuộc tính openclaw.content.* có giới hạn, đã biên tập cho riêng lớp đó. Chỉ dùng boolean captureContent: true cho các lần ghi chẩn đoán rộng khi thân thông điệp log OTLP cũng đã được phê duyệt để xuất. Nội dung toolInputs/toolOutputs được ghi lại cho các lần thực thi công cụ của runtime agent tích hợp sẵn (openclaw.content.tool_input trên span hoàn tất/lỗi, openclaw.content.tool_output trên span hoàn tất). Lệnh gọi công cụ của harness bên ngoài (Codex, Claude CLI) phát ra span tool.execution.* mà không có payload nội dung. Nội dung được ghi lại đi qua một channel đáng tin cậy, chỉ listener và không bao giờ được đặt trên bus sự kiện chẩn đoán công khai.

Lấy mẫu và flush

  • Dấu vết: diagnostics.otel.sampleRate (chỉ root-span, 0.0 loại bỏ tất cả, 1.0 giữ lại tất cả).
  • Chỉ số: diagnostics.otel.flushIntervalMs (tối thiểu 1000).
  • Nhật ký: Nhật ký OTLP tuân theo logging.level (mức nhật ký tệp). Chúng dùng đường dẫn biên tập log-record chẩn đoán, không dùng định dạng console. Các bản cài đặt có lưu lượng cao nên ưu tiên lấy mẫu/lọc tại OTLP collector thay vì lấy mẫu cục bộ. Đặt diagnostics.otel.logsExporter: "stdout" khi nền tảng của bạn đã chuyển stdout/stderr tới bộ xử lý nhật ký và bạn không có OTLP logs collector. Bản ghi stdout là một đối tượng JSON trên mỗi dòng với ts, signal, service.name, mức độ nghiêm trọng, nội dung, thuộc tính đã biên tập, và các trường dấu vết tin cậy khi có.
  • Tương quan nhật ký tệp: Nhật ký tệp JSONL bao gồm các trường cấp cao nhất traceId, spanId, parentSpanId, và traceFlags khi lời gọi nhật ký mang ngữ cảnh dấu vết chẩn đoán hợp lệ, cho phép bộ xử lý nhật ký nối các dòng nhật ký cục bộ với các span đã xuất.
  • Tương quan yêu cầu: Các yêu cầu HTTP của Gateway và khung WebSocket tạo một phạm vi dấu vết yêu cầu nội bộ. Nhật ký và sự kiện chẩn đoán bên trong phạm vi đó mặc định kế thừa dấu vết yêu cầu, còn các span chạy agent và lời gọi mô hình được tạo làm con để các header traceparent của provider vẫn nằm trên cùng dấu vết.
  • Tương quan lời gọi mô hình: Các span openclaw.model.call mặc định bao gồm kích thước thành phần prompt an toàn và bao gồm thuộc tính token theo từng lời gọi khi kết quả provider cung cấp thông tin sử dụng. openclaw.model.usage vẫn là span hạch toán cấp lượt chạy cho chi phí tổng hợp, ngữ cảnh, và dashboard kênh; nó vẫn nằm trên cùng dấu vết chẩn đoán khi runtime phát ra có ngữ cảnh dấu vết tin cậy.

Chỉ số đã xuất

Mức sử dụng mô hình

  • openclaw.tokens (bộ đếm, thuộc tính: openclaw.token, openclaw.channel, openclaw.provider, openclaw.model, openclaw.agent)
  • openclaw.cost.usd (bộ đếm, thuộc tính: openclaw.channel, openclaw.provider, openclaw.model)
  • openclaw.run.duration_ms (histogram, thuộc tính: openclaw.channel, openclaw.provider, openclaw.model)
  • openclaw.context.tokens (histogram, thuộc tính: openclaw.context, openclaw.channel, openclaw.provider, openclaw.model)
  • gen_ai.client.token.usage (histogram, chỉ số quy ước ngữ nghĩa GenAI, thuộc tính: gen_ai.token.type = input/output, gen_ai.provider.name, gen_ai.operation.name, gen_ai.request.model)
  • gen_ai.client.operation.duration (histogram, giây, chỉ số quy ước ngữ nghĩa GenAI, thuộc tính: gen_ai.provider.name, gen_ai.operation.name, gen_ai.request.model, error.type tùy chọn)
  • openclaw.model_call.duration_ms (histogram, thuộc tính: openclaw.provider, openclaw.model, openclaw.api, openclaw.transport, cộng thêm openclaw.errorCategoryopenclaw.failureKind trên các lỗi đã phân loại)
  • openclaw.model_call.request_bytes (histogram, kích thước byte UTF-8 của payload yêu cầu mô hình cuối cùng; không có nội dung payload thô)
  • openclaw.model_call.response_bytes (histogram, kích thước byte UTF-8 của các payload phân đoạn phản hồi được stream; văn bản tần suất cao, suy nghĩ, và delta lời gọi công cụ chỉ tính các byte delta tăng thêm; không có nội dung phản hồi thô)
  • openclaw.model_call.time_to_first_byte_ms (histogram, thời gian đã trôi qua trước sự kiện phản hồi stream đầu tiên)
  • openclaw.model.failover (bộ đếm, thuộc tính: openclaw.provider, openclaw.model, openclaw.failover.to_provider, openclaw.failover.to_model, openclaw.failover.reason, openclaw.failover.suspended, openclaw.lane)
  • openclaw.skill.used (bộ đếm, thuộc tính: openclaw.skill.name, openclaw.skill.source, openclaw.skill.activation, openclaw.agent tùy chọn, openclaw.toolName tùy chọn)

Luồng tin nhắn

  • openclaw.webhook.received (bộ đếm, thuộc tính: openclaw.channel, openclaw.webhook)
  • openclaw.webhook.error (bộ đếm, thuộc tính: openclaw.channel, openclaw.webhook)
  • openclaw.webhook.duration_ms (histogram, thuộc tính: openclaw.channel, openclaw.webhook)
  • openclaw.message.queued (bộ đếm, thuộc tính: openclaw.channel, openclaw.source)
  • openclaw.message.received (bộ đếm, thuộc tính: openclaw.channel, openclaw.source)
  • openclaw.message.dispatch.started (bộ đếm, thuộc tính: openclaw.channel, openclaw.source)
  • openclaw.message.dispatch.completed (bộ đếm, thuộc tính: openclaw.channel, openclaw.outcome, openclaw.reason, openclaw.source)
  • openclaw.message.dispatch.duration_ms (histogram, thuộc tính: openclaw.channel, openclaw.outcome, openclaw.reason, openclaw.source)
  • openclaw.message.processed (bộ đếm, thuộc tính: openclaw.channel, openclaw.outcome)
  • openclaw.message.duration_ms (histogram, thuộc tính: openclaw.channel, openclaw.outcome)
  • openclaw.message.delivery.started (bộ đếm, thuộc tính: openclaw.channel, openclaw.delivery.kind)
  • openclaw.message.delivery.duration_ms (histogram, thuộc tính: openclaw.channel, openclaw.delivery.kind, openclaw.outcome, openclaw.errorCategory)

Trò chuyện

  • openclaw.talk.event (bộ đếm, thuộc tính: openclaw.talk.event_type, openclaw.talk.mode, openclaw.talk.transport, openclaw.talk.brain, openclaw.talk.provider)
  • openclaw.talk.event.duration_ms (histogram, thuộc tính: giống openclaw.talk.event; được phát ra khi một sự kiện Trò chuyện báo cáo thời lượng)
  • openclaw.talk.audio.bytes (histogram, thuộc tính: giống openclaw.talk.event; được phát ra cho các sự kiện khung âm thanh Trò chuyện báo cáo độ dài byte)

Hàng đợi và phiên

  • openclaw.queue.lane.enqueue (bộ đếm, thuộc tính: openclaw.lane)
  • openclaw.queue.lane.dequeue (bộ đếm, thuộc tính: openclaw.lane)
  • openclaw.queue.depth (histogram, thuộc tính: openclaw.lane hoặc openclaw.channel=heartbeat)
  • openclaw.queue.wait_ms (histogram, thuộc tính: openclaw.lane)
  • openclaw.session.state (bộ đếm, thuộc tính: openclaw.state, openclaw.reason)
  • openclaw.session.stuck (bộ đếm, thuộc tính: openclaw.state; được phát ra cho sổ sách phiên cũ có thể khôi phục)
  • openclaw.session.stuck_age_ms (histogram, thuộc tính: openclaw.state; được phát ra cho sổ sách phiên cũ có thể khôi phục)
  • openclaw.session.turn.created (bộ đếm, thuộc tính: openclaw.agent, openclaw.channel, openclaw.trigger)
  • openclaw.session.recovery.requested (bộ đếm, thuộc tính: openclaw.state, openclaw.action, openclaw.active_work_kind, openclaw.reason)
  • openclaw.session.recovery.completed (bộ đếm, thuộc tính: openclaw.state, openclaw.action, openclaw.status, openclaw.active_work_kind, openclaw.reason)
  • openclaw.session.recovery.age_ms (histogram, thuộc tính: giống bộ đếm khôi phục tương ứng)
  • openclaw.run.attempt (bộ đếm, thuộc tính: openclaw.attempt)

Đo từ xa trạng thái sống của phiên

diagnostics.stuckSessionWarnMs là ngưỡng tuổi không có tiến triển cho chẩn đoán trạng thái sống của phiên. Một phiên processing không tính tuổi tới ngưỡng này trong khi OpenClaw quan sát thấy tiến triển runtime về trả lời, công cụ, trạng thái, khối, hoặc ACP. Typing keepalive không được tính là tiến triển, nên một mô hình hoặc harness im lặng vẫn có thể bị phát hiện. OpenClaw phân loại phiên theo công việc mà nó vẫn có thể quan sát:
  • session.long_running: công việc nhúng đang hoạt động, lời gọi mô hình, hoặc lời gọi công cụ vẫn đang tiến triển. Các lời gọi mô hình có chủ sở hữu im lặng quá diagnostics.stuckSessionWarnMs cũng báo cáo là chạy lâu trước diagnostics.stuckSessionAbortMs để provider mô hình chậm hoặc không stream không trông giống phiên gateway bị treo khi chúng vẫn có thể quan sát hủy bỏ.
  • session.stalled: có công việc đang hoạt động, nhưng lượt chạy đang hoạt động chưa báo cáo tiến triển gần đây. Các lời gọi mô hình có chủ sở hữu chuyển từ session.long_running sang session.stalled tại hoặc sau diagnostics.stuckSessionAbortMs; hoạt động mô hình/công cụ cũ không có chủ sở hữu không được xem là công việc chạy lâu vô hại. Các lượt chạy nhúng bị đình trệ ban đầu vẫn chỉ quan sát, rồi hủy bỏ-xả sau diagnostics.stuckSessionAbortMs khi không có tiến triển để các lượt đã xếp hàng phía sau lane có thể tiếp tục. Khi chưa đặt, ngưỡng hủy bỏ mặc định là cửa sổ mở rộng an toàn hơn tối thiểu 5 phút và 3 lần diagnostics.stuckSessionWarnMs.
  • session.stuck: sổ sách phiên cũ không có công việc đang hoạt động, hoặc một phiên đã xếp hàng đang nhàn rỗi với hoạt động mô hình/công cụ cũ không có chủ sở hữu. Điều này giải phóng lane phiên bị ảnh hưởng ngay sau khi các cổng khôi phục đạt yêu cầu.
Khôi phục phát ra các sự kiện có cấu trúc session.recovery.requestedsession.recovery.completed. Trạng thái phiên chẩn đoán chỉ được đánh dấu là nhàn rỗi sau một kết quả khôi phục có thay đổi (aborted hoặc released) và chỉ khi cùng thế hệ xử lý vẫn còn hiện hành. Chỉ session.stuck phát ra bộ đếm openclaw.session.stuck, histogram openclaw.session.stuck_age_ms, và span openclaw.session.stuck. Các chẩn đoán session.stuck lặp lại sẽ lùi nhịp trong khi phiên vẫn không đổi, nên dashboard nên cảnh báo trên các mức tăng kéo dài thay vì từng tick Heartbeat. Để biết núm cấu hình và giá trị mặc định, xem Tham chiếu cấu hình. Cảnh báo trạng thái sống cũng phát ra:
  • openclaw.liveness.warning (bộ đếm, thuộc tính: openclaw.liveness.reason)
  • openclaw.liveness.event_loop_delay_p99_ms (histogram, thuộc tính: openclaw.liveness.reason)
  • openclaw.liveness.event_loop_delay_max_ms (histogram, thuộc tính: openclaw.liveness.reason)
  • openclaw.liveness.event_loop_utilization (histogram, thuộc tính: openclaw.liveness.reason)
  • openclaw.liveness.cpu_core_ratio (histogram, thuộc tính: openclaw.liveness.reason)

Vòng đời harness

  • openclaw.harness.duration_ms (histogram, thuộc tính: openclaw.harness.id, openclaw.harness.plugin, openclaw.outcome, openclaw.harness.phase trên lỗi)

Thực thi công cụ

  • openclaw.tool.execution.duration_ms (histogram, thuộc tính: gen_ai.tool.name, openclaw.toolName, openclaw.tool.source, openclaw.tool.owner, openclaw.tool.params.kind, cộng thêm openclaw.errorCategory trên lỗi)
  • openclaw.tool.execution.blocked (bộ đếm, thuộc tính: gen_ai.tool.name, openclaw.toolName, openclaw.tool.source, openclaw.tool.owner, openclaw.tool.params.kind, openclaw.deniedReason)

Exec

  • openclaw.exec.duration_ms (histogram, thuộc tính: openclaw.exec.target, openclaw.exec.mode, openclaw.outcome, openclaw.failureKind)

Nội bộ chẩn đoán (bộ nhớ và vòng lặp công cụ)

  • openclaw.payload.large (bộ đếm, thuộc tính: openclaw.payload.surface, openclaw.payload.action, openclaw.channel, openclaw.plugin, openclaw.reason)
  • openclaw.payload.large_bytes (histogram, thuộc tính: giống openclaw.payload.large)
  • openclaw.memory.heap_used_bytes (histogram, thuộc tính: openclaw.memory.kind)
  • openclaw.memory.rss_bytes (histogram)
  • openclaw.memory.pressure (bộ đếm, thuộc tính: openclaw.memory.level)
  • openclaw.tool.loop.iterations (bộ đếm, thuộc tính: openclaw.toolName, openclaw.outcome)
  • openclaw.tool.loop.duration_ms (histogram, thuộc tính: openclaw.toolName, openclaw.outcome)

Span đã xuất

  • openclaw.model.usage
    • openclaw.channel, openclaw.provider, openclaw.model
    • openclaw.tokens.* (input/output/cache_read/cache_write/total)
    • gen_ai.system theo mặc định, hoặc gen_ai.provider.name khi đã chọn dùng các quy ước ngữ nghĩa GenAI mới nhất
    • gen_ai.request.model, gen_ai.operation.name, gen_ai.usage.*
  • openclaw.run
    • openclaw.outcome, openclaw.channel, openclaw.provider, openclaw.model, openclaw.errorCategory
  • openclaw.model.call
    • gen_ai.system theo mặc định, hoặc gen_ai.provider.name khi đã chọn dùng các quy ước ngữ nghĩa GenAI mới nhất
    • gen_ai.request.model, gen_ai.operation.name, openclaw.provider, openclaw.model, openclaw.api, openclaw.transport
    • openclaw.errorCategoryopenclaw.failureKind tùy chọn khi có lỗi
    • openclaw.model_call.request_bytes, openclaw.model_call.response_bytes, openclaw.model_call.time_to_first_byte_ms
    • openclaw.model_call.prompt.input_messages_count, openclaw.model_call.prompt.input_messages_chars, openclaw.model_call.prompt.system_prompt_chars, openclaw.model_call.prompt.tool_definitions_count, openclaw.model_call.prompt.tool_definitions_chars, openclaw.model_call.prompt.total_chars (chỉ kích thước thành phần an toàn, không có văn bản prompt)
    • openclaw.model_call.usage.*gen_ai.usage.* khi kết quả lệnh gọi mô hình mang thông tin sử dụng của nhà cung cấp cho lệnh gọi riêng lẻ đó
    • openclaw.provider.request_id_hash (hàm băm dựa trên SHA có giới hạn của id yêu cầu từ nhà cung cấp upstream; id thô không được xuất)
    • Với OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental, span lệnh gọi mô hình dùng tên span suy luận GenAI mới nhất {gen_ai.operation.name} {gen_ai.request.model} và loại span CLIENT thay vì openclaw.model.call.
  • openclaw.harness.run
    • openclaw.harness.id, openclaw.harness.plugin, openclaw.outcome, openclaw.provider, openclaw.model, openclaw.channel
    • Khi hoàn tất: openclaw.harness.result_classification, openclaw.harness.yield_detected, openclaw.harness.items.started, openclaw.harness.items.completed, openclaw.harness.items.active
    • Khi có lỗi: openclaw.harness.phase, openclaw.errorCategory, openclaw.harness.cleanup_failed tùy chọn
  • openclaw.tool.execution
    • gen_ai.tool.name, openclaw.toolName, openclaw.errorCategory, openclaw.tool.params.*
  • openclaw.exec
    • openclaw.exec.target, openclaw.exec.mode, openclaw.outcome, openclaw.failureKind, openclaw.exec.command_length, openclaw.exec.exit_code, openclaw.exec.timed_out
  • openclaw.webhook.processed
    • openclaw.channel, openclaw.webhook
  • openclaw.webhook.error
    • openclaw.channel, openclaw.webhook, openclaw.error
  • openclaw.message.processed
    • openclaw.channel, openclaw.outcome, openclaw.reason
  • openclaw.message.delivery
    • openclaw.channel, openclaw.delivery.kind, openclaw.outcome, openclaw.errorCategory, openclaw.delivery.result_count
  • openclaw.session.stuck
    • openclaw.state, openclaw.ageMs, openclaw.queueDepth
  • openclaw.context.assembled
    • openclaw.prompt.size, openclaw.history.size, openclaw.context.tokens, openclaw.errorCategory (không có nội dung prompt, lịch sử, phản hồi hoặc khóa phiên)
  • openclaw.tool.loop
    • openclaw.toolName, openclaw.outcome, openclaw.iterations, openclaw.errorCategory (không có thông điệp vòng lặp, tham số hoặc đầu ra công cụ)
  • openclaw.memory.pressure
    • openclaw.memory.level, openclaw.memory.heap_used_bytes, openclaw.memory.rss_bytes
Khi tính năng ghi nhận nội dung được bật rõ ràng, các span mô hình và công cụ cũng có thể bao gồm các thuộc tính openclaw.content.* có giới hạn và đã được biên tập cho những lớp nội dung cụ thể mà bạn đã chọn dùng.

Danh mục sự kiện chẩn đoán

Các sự kiện bên dưới hỗ trợ các chỉ số và span ở trên. Plugin cũng có thể đăng ký nhận trực tiếp các sự kiện này mà không cần xuất OTLP. Mức sử dụng mô hình
  • model.usage - token, chi phí, thời lượng, ngữ cảnh, nhà cung cấp/mô hình/kênh, id phiên. usage là kế toán theo nhà cung cấp/lượt để tính chi phí và telemetry; context.used là ảnh chụp nhanh prompt/ngữ cảnh hiện tại và có thể thấp hơn usage.total của nhà cung cấp khi có đầu vào được lưu trong bộ nhớ đệm hoặc các lệnh gọi vòng lặp công cụ.
Luồng thông điệp
  • webhook.received / webhook.processed / webhook.error
  • message.queued / message.processed
  • message.delivery.started / message.delivery.completed / message.delivery.error
Hàng đợi và phiên
  • queue.lane.enqueue / queue.lane.dequeue
  • session.state / session.long_running / session.stalled / session.stuck
  • run.attempt / run.progress
  • diagnostic.heartbeat (bộ đếm tổng hợp: webhook/hàng đợi/phiên)
Vòng đời harness
  • harness.run.started / harness.run.completed / harness.run.error - vòng đời theo từng lần chạy cho harness tác nhân. Bao gồm harnessId, pluginId tùy chọn, nhà cung cấp/mô hình/kênh và id lần chạy. Hoàn tất sẽ thêm durationMs, outcome, resultClassification tùy chọn, yieldDetected, và số đếm itemLifecycle. Lỗi thêm phase (prepare/start/send/resolve/cleanup), errorCategorycleanupFailed tùy chọn.
Exec
  • exec.process.completed - kết quả cuối, thời lượng, đích, chế độ, mã thoát và loại lỗi. Văn bản lệnh và thư mục làm việc không được bao gồm.
  • exec.approval.followup_suppressed - lượt theo dõi phê duyệt cũ bị bỏ sau khi một phiên bật lại. Bao gồm approvalId, reason (session_rebound), phase (direct_delivery hoặc gateway_preflight) và dấu thời gian của dispatcher. Khóa phiên, tuyến và văn bản lệnh không được bao gồm.

Không có exporter

Bạn có thể giữ cho các sự kiện chẩn đoán khả dụng với Plugin hoặc sink tùy chỉnh mà không cần chạy diagnostics-otel:
{
  diagnostics: { enabled: true },
}
Để xuất debug có mục tiêu mà không tăng logging.level, hãy dùng các cờ chẩn đoán. Cờ không phân biệt chữ hoa chữ thường và hỗ trợ ký tự đại diện (ví dụ telegram.* hoặc *):
{
  diagnostics: { flags: ["telegram.http"] },
}
Hoặc dưới dạng ghi đè env dùng một lần:
OPENCLAW_DIAGNOSTICS=telegram.http,telegram.payload openclaw gateway
Đầu ra cờ đi vào tệp nhật ký tiêu chuẩn (logging.file) và vẫn được biên tập bởi logging.redactSensitive. Hướng dẫn đầy đủ: Cờ chẩn đoán.

Tắt

{
  diagnostics: { otel: { enabled: false } },
}
Bạn cũng có thể bỏ diagnostics-otel khỏi plugins.allow, hoặc chạy openclaw plugins disable diagnostics-otel.

Liên quan