---
read_when:
    - คุณต้องมีบันทึกที่คงทนเกี่ยวกับสิ่งที่ Gateway ดำเนินการ โดยไม่จัดเก็บเนื้อหา
    - คุณกำลังตัดสินใจว่าจะเปิดใช้การตรวจสอบวงจรชีวิตของข้อความหรือไม่
    - คุณต้องอธิบายว่าบันทึกการตรวจสอบพิสูจน์อะไรได้และพิสูจน์อะไรไม่ได้
summary: ประวัติการตรวจสอบที่มีเฉพาะเมทาดาทาสำหรับการทำงานของเอเจนต์ การดำเนินการของเครื่องมือ และวงจรชีวิตของข้อความที่เลือกเข้าร่วม
title: ประวัติการตรวจสอบ
x-i18n:
    generated_at: "2026-07-16T19:13:03Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    prompt_version: 32
    provider: openai
    source_hash: 1005b214a674f0f888d759837bd627be458cefcf9ed61bda722499333361dc45
    source_path: gateway/audit.md
    workflow: 16
---

# ประวัติการตรวจสอบ

Gateway เก็บบัญชีแยกประเภทการตรวจสอบที่มีขอบเขตจำกัดและมีเฉพาะข้อมูลเมตาไว้ในฐานข้อมูลสถานะที่ใช้ร่วมกันของ OpenClaw บัญชีนี้ใช้ตอบคำถามด้านการปฏิบัติงาน เช่น "เอเจนต์ใดทำงาน เมื่อใด และสิ้นสุดอย่างไร" "การทำงานหนึ่งครั้งเรียกใช้การดำเนินการของเครื่องมือใดบ้าง" และเมื่อเปิดใช้การตรวจสอบข้อความ "ข้อความขาเข้าที่ได้รับการยอมรับไปถึงขั้นตอนการส่งต่อหรือไม่" และ "ข้อความขาออกไปถึงสถานะสิ้นสุดของการนำส่งหรือไม่"

บัญชีแยกประเภทจัดเก็บข้อมูลประจำตัว ลำดับ แหล่งที่มา การดำเนินการ สถานะ และรหัสผลลัพธ์ที่ปรับให้อยู่ในรูปแบบมาตรฐาน โดยจะไม่จัดเก็บพรอมต์ เนื้อหาข้อความ อาร์กิวเมนต์ของเครื่องมือ ผลลัพธ์จากเครื่องมือ ไฟล์แนบ ชื่อไฟล์ URL เอาต์พุตคำสั่ง หรือข้อความข้อผิดพลาดดิบ

## กลุ่มระเบียน

ระบบจะบันทึกเหตุการณ์การทำงานและเหตุการณ์เครื่องมือทุกครั้งที่เปิดใช้การตรวจสอบ (ค่าเริ่มต้น) ส่วนเหตุการณ์วงจรชีวิตของข้อความต้องเลือกเปิดใช้และปิดอยู่โดยค่าเริ่มต้น

| กลุ่ม       | การดำเนินการ                                                  | ค่าเริ่มต้น |
| ------------ | -------------------------------------------------------- | ------- |
| การทำงานของเอเจนต์   | `agent.run.started`, `agent.run.finished`                | เปิด      |
| การดำเนินการของเครื่องมือ | `tool.action.started`, `tool.action.finished`            | เปิด      |
| ข้อความ     | `message.inbound.processed`, `message.outbound.finished` | ปิด     |

ทุกระเบียนมีรหัสเหตุการณ์ที่คงที่ ลำดับบัญชีแยกประเภทที่เพิ่มขึ้นอย่างต่อเนื่อง เวลาประทับของวงจรชีวิต ผู้ดำเนินการ การดำเนินการ สถานะ `schemaVersion: 1` และ `redaction: "metadata_only"` ดูข้อมูลอ้างอิงฟิลด์และตัวกรองการค้นหาทั้งหมดที่ [ระเบียนการตรวจสอบ](/cli/audit)

## เหตุการณ์วงจรชีวิตของข้อความ

ตั้งค่า [`audit.messages`](/th/gateway/configuration-reference#audit) เพื่อเลือกสิ่งที่จะบันทึก แล้วรีสตาร์ท Gateway:

- `off` (ค่าเริ่มต้น): ไม่มีระเบียนข้อความ
- `direct`: เฉพาะข้อความในการสนทนาโดยตรง
- `all`: ข้อความโดยตรง ข้อความกลุ่ม และข้อความในช่อง

ขอบเขตที่เป็นแหล่งข้อมูลหลักสองจุดสร้างระเบียนข้อความ:

- แถว **ขาเข้า** จะถูกเขียนเมื่อข้อความที่ได้รับการยอมรับไปถึงขั้นตอนการส่งต่อของแกนหลัก รวมถึงผลลัพธ์จากการประมวลผลข้อความซ้ำและผลลัพธ์สิ้นสุด
- แถว **ขาออก** จะถูกเขียนเมื่อการนำส่งแบบคงทนที่ใช้ร่วมกันไปถึงผลลัพธ์สิ้นสุด ได้แก่ ส่งแล้ว ระงับ ล้มเหลว หรือ `unknown` ที่ระบุอย่างชัดเจนสำหรับการส่งซึ่งกำกวมเนื่องจากการหยุดทำงาน รวมถึงผลลัพธ์จากการกู้คืนคิวและจดหมายที่นำส่งไม่ได้ เพย์โหลดการตอบกลับเชิงตรรกะต้นฉบับแต่ละรายการจะมีแถวสิ้นสุดหนึ่งแถว ส่วนการแบ่งเป็นส่วนย่อยและการกระจายไปยังอะแดปเตอร์จะถูกรวมเป็น `resultCount`

### การจำแนกประเภทการสนทนา

โหมด `direct` เป็นขอบเขตด้านความเป็นส่วนตัว ดังนั้นข้อความจะถูกจำแนกเป็นการสนทนาโดยตรงก็ต่อเมื่อข้อเท็จจริงของปลายทางพิสูจน์ได้เท่านั้น กล่าวคือ เส้นทางการส่งได้ประกาศประเภทการสนทนาของปลายทาง หรือเส้นทางเซสชันการนำส่งระบุชื่อช่องและเพียร์ที่กำลังนำส่งถึงอย่างตรงกันทุกประการ สัญญาณที่อ่อนกว่า เช่น สถานะนโยบายหรือการสนทนาต้นทาง สามารถจำแนกข้อความเป็น `group` (ซึ่งทำให้ไม่รวมอยู่ในการเก็บรวบรวม `direct`) แต่ไม่สามารถอ้างว่าเป็น `direct` ได้ ข้อความที่พิสูจน์ไม่ได้ว่าเป็นข้อความโดยตรงจะถูกจำแนกเป็น `unknown` และจะไม่ถูกบันทึกในโหมด `direct` ดังนั้นช่องที่ไม่ประกาศประเภทแชตอาจบันทึกแถวในโหมด `direct` ได้น้อยกว่าในโหมด `all`

## โมเดลความเป็นส่วนตัว

แถวข้อความจะไม่จัดเก็บตัวระบุแพลตฟอร์มดิบ ตัวระบุบัญชี การสนทนา ข้อความ และเป้าหมาย เมื่อสามารถเชื่อมโยงความสัมพันธ์ได้ จะถูกส่งออกเฉพาะในรูปนามแฝงแบบใช้คีย์ซึ่งใช้ภายในแต่ละการติดตั้ง (`hmac-sha256:v1:<keyId>:<digest>`):

- คีย์ HMAC จะถูกสร้างขึ้นเมื่อใช้งานครั้งแรก แยกโดเมนตามประเภทตัวระบุ และอยู่ในฐานข้อมูลสถานะเดียวกับบัญชีแยกประเภท
- นามแฝงจะคงที่ภายในการติดตั้งหนึ่งรายการ จึงสามารถเชื่อมโยงแถวที่เกี่ยวกับการสนทนาเดียวกันได้โดยไม่เปิดเผยตัวระบุแพลตฟอร์ม
- นี่คือ **การเชื่อมโยงความสัมพันธ์ ไม่ใช่การทำให้ไม่สามารถระบุตัวตนได้**: ผู้ที่มีสิทธิ์อ่านฐานข้อมูลสถานะย่อมเข้าถึงคีย์ได้ด้วย และสามารถทดสอบตัวระบุดิบที่คาดไว้กับนามแฝงได้ การส่งออกผ่าน RPC และ CLI จะไม่รวมคีย์
- หากข้อมูลคีย์สูญหายหรือเสียหายขณะที่ยังเก็บแถวข้อความไว้ Gateway จะปฏิเสธการทำงานอย่างปลอดภัยและทิ้งระเบียนข้อความใหม่ แทนที่จะหมุนเวียนไปใช้คีย์ใหม่โดยไม่แจ้งให้ทราบ ซึ่งจะทำให้การเชื่อมโยงความสัมพันธ์แยกออกจากกัน

ระเบียนการทำงานและเครื่องมือยังคงเก็บ `sessionKey` และ `sessionId` ไว้เพื่อการเชื่อมโยงความสัมพันธ์ โดยคีย์เซสชันแบบมาตรฐานอาจมีรหัสบัญชีแพลตฟอร์มหรือรหัสเพียร์อยู่ภายใน ส่วนระเบียนข้อความตั้งใจละเว้นทั้งสองรายการ

การส่งออกข้อมูลการตรวจสอบยังคงเป็นข้อมูลเมตาด้านการปฏิบัติงานที่ละเอียดอ่อนแม้ไม่มีเนื้อหา เนื่องจากเวลา ช่อง ผลลัพธ์ และนามแฝงที่คงที่สามารถนำไปเชื่อมโยงกิจกรรมได้ โปรดปกป้องข้อมูลที่ส่งออกด้วยการควบคุมการเข้าถึงและแนวทางการเก็บรักษาเช่นเดียวกับระเบียนอื่นของผู้ปฏิบัติงาน

## ขอบเขตความครอบคลุมและข้อจำกัดของหลักฐาน

บัญชีแยกประเภททำงานแบบพยายามให้ดีที่สุดและมีขอบเขตจำกัดโดยตั้งใจ ให้ถือว่าเป็นหลักฐานของสิ่งที่ถูกบันทึก ไม่ใช่หลักฐานของสิ่งที่เกิดขึ้น:

- **การไม่มีแถวไม่ได้พิสูจน์สิ่งใด** การทิ้งข้อความขาเข้าก่อนรับเข้าสู่ระบบ การส่งจากกระบวนการ CLI ที่ไม่มีตัวบันทึกของ Gateway ทำงานอยู่ และเส้นทางภายใน Plugin หรือเส้นทางการส่งโดยตรงที่ข้ามการนำส่งแบบคงทนที่ใช้ร่วมกัน จะไม่ทิ้งระเบียนไว้
- การเขียนข้อมูลดำเนินการผ่านเวิร์กเกอร์เบื้องหลังที่มีขอบเขตจำกัด หากเวิร์กเกอร์ล้มเหลวหรือคิวอิ่มตัว ระบบจะทิ้งระเบียนและบันทึกคำเตือนด้านการปฏิบัติงานหนึ่งรายการ
- การส่งขาออกที่กำกวมเนื่องจากการหยุดทำงานจะถูกบันทึกเป็น `unknown` แทนการสร้างผลลัพธ์ที่ไม่ได้เกิดขึ้นจริง

บัญชีแยกประเภทนี้รองรับการดีบักและการตรวจสอบด้านการปฏิบัติงาน แต่ไม่ใช่คลังข้อมูลการปฏิบัติตามข้อกำหนดที่เก็บข้อมูลได้ครบถ้วน หากต้องการระบบดังกล่าว ให้ใช้ระบบภายนอกที่รับข้อมูลจาก [OpenTelemetry](/th/gateway/opentelemetry) หรือเครื่องมือระดับช่อง

## การจัดเก็บ การเก็บรักษา และการย้ายข้อมูล

ระเบียนอยู่ในฐานข้อมูลสถานะที่ใช้ร่วมกัน (`state/openclaw.sqlite`) และถูกเขียนนอกเส้นทางสำคัญของการนำส่ง การค้นหาจะไม่คืนระเบียนที่มีอายุเกิน 30 วัน และบัญชีแยกประเภทจำกัดไว้ที่ 100,000 แถว โดยแถวที่หมดอายุจะถูกล้างระหว่างการเริ่มต้นระบบ การบำรุงรักษารายชั่วโมง และการเขียนครั้งถัดไป การบำรุงรักษาระยะเวลาเก็บข้อมูลยังคงทำงานแม้ปิดใช้งานการเก็บรวบรวม

การอัปเกรดจาก Gateway ที่ใช้บัญชีแยกประเภทเวอร์ชันก่อนหน้าซึ่งเก็บเฉพาะการทำงานและเครื่องมือ จะย้ายสคีมาโดยอัตโนมัติเมื่อเริ่มต้นระบบ (หรือผ่าน `openclaw doctor --fix`) โดยยังคงรักษาแถวที่มีอยู่และลำดับบัญชีแยกประเภทไว้

## การค้นหา

- CLI: [`openclaw audit`](/cli/audit) พร้อมตัวกรองสำหรับเอเจนต์ เซสชัน การทำงาน ประเภท สถานะ ทิศทาง ช่อง ขอบเขตเวลา และการแบ่งหน้าด้วยเคอร์เซอร์
- RPC ของ Gateway: `audit.activity.list` (ต้องใช้ `operator.read`) คืนค่ายูเนียนเหตุการณ์กิจกรรม V1 ที่มีการกำหนดเวอร์ชัน ส่วน RPC `audit.list` ที่เผยแพร่แล้วจะไม่เปลี่ยนแปลงสำหรับไคลเอนต์การทำงาน/เครื่องมือรุ่นเก่า ดู [โปรโตคอล Gateway](/th/gateway/protocol#audit-ledger-rpc)

## ที่เกี่ยวข้อง

- [CLI สำหรับระเบียนการตรวจสอบ](/cli/audit)
- [ข้อมูลอ้างอิงการกำหนดค่า](/th/gateway/configuration-reference#audit)
- [โปรโตคอล Gateway](/th/gateway/protocol#audit-ledger-rpc)
- [OpenTelemetry](/th/gateway/opentelemetry)
