> ## Documentation Index
> Fetch the complete documentation index at: https://docs2.openclaw.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Xuất OpenTelemetry

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ý](/vi/logging).

## 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:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
openclaw plugins install clawhub:@openclaw/diagnostics-otel
```

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  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:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
openclaw plugins enable diagnostics-otel
```

<Note>
  `protocol` hiện chỉ hỗ trợ `http/protobuf`. `grpc` bị bỏ qua.
</Note>

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

| Tín hiệu    | Nội dung bên trong                                                                                                                                                                                                               |
| ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Metrics** | Counter 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ớ. |
| **Traces**  | Span 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ụ.                                                            |
| **Logs**    | Bả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

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  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ến                                                                                                              | Mục đích                                                                                                                                                                                                                                                                                                                                  |
| ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OTEL_EXPORTER_OTLP_ENDPOINT`                                                                                     | Ghi đè `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_ENDPOINT` | Ghi đè 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_NAME`                                                                                               | Ghi đè `diagnostics.otel.serviceName`.                                                                                                                                                                                                                                                                                                    |
| `OTEL_EXPORTER_OTLP_PROTOCOL`                                                                                     | Ghi đè 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.errorCategory` và `openclaw.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.requested` và
`session.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](/vi/gateway/configuration-reference#diagnostics).

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.errorCategory` và `openclaw.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.*` và `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`), `errorCategory` và
  `cleanupFailed` 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`:

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  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
`*`):

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  diagnostics: { flags: ["telegram.http"] },
}
```

Hoặc dưới dạng ghi đè env dùng một lần:

```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
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](/vi/diagnostics/flags).

## Tắt

```json5 theme={"theme":{"light":"min-light","dark":"min-dark"}}
{
  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

* [Ghi nhật ký](/vi/logging) - nhật ký tệp, đầu ra bảng điều khiển, theo dõi CLI và tab Nhật ký trong Control UI
* [Nội bộ ghi nhật ký Gateway](/vi/gateway/logging) - kiểu nhật ký WS, tiền tố hệ thống con và ghi nhận bảng điều khiển
* [Cờ chẩn đoán](/vi/diagnostics/flags) - cờ nhật ký debug có mục tiêu
* [Xuất chẩn đoán](/vi/gateway/diagnostics) - công cụ gói hỗ trợ cho người vận hành (tách biệt với xuất OTEL)
* [Tham chiếu cấu hình](/vi/gateway/configuration-reference#diagnostics) - tham chiếu đầy đủ cho trường `diagnostics.*`
