ข้ามไปยังเนื้อหา

Debug API

เก็บข้อมูลเมื่อ 2026-07-28 จาก CE หนึ่งเครื่องของการติดตั้งนี้ โดย sitecli/capture-manifest.json บันทึกว่าเป็นโหนดใด และ scripts/capture-sitecli.sh --check จะตรวจสอบพื้นผิวคำสั่ง เทียบกับ CE ที่ทำงานอยู่จริงอีกครั้ง

API vpm/debug เรียกใช้คำสั่ง Site CLI บนโหนดที่ลงทะเบียนไว้และคืนค่าผลลัพธ์ ของคำสั่งนั้น ทุกสิ่งที่อยู่ด้านล่างนี้ได้รับการยืนยันกับโหนดที่ทำงานอยู่จริง และไม่มีส่วนใด ที่เผยแพร่ไว้ในเอกสารต้นทาง

สอบถามโหนดว่ารองรับคำสั่งอะไรบ้าง โดยส่ง POST ไปที่ exec-user และ ละ คีย์ command ไว้:

Terminal window
curl -sS -X POST \
-H "Authorization: APIToken $XCSH_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"namespace":"system","site":"<site>","node":"<node>"}' \
"$XCSH_API_URL/api/operate/namespaces/system/sites/<site>/vpm/debug/<node>/exec-user" \
| jq -r .output | jq .

การตอบกลับเป็นอ็อบเจ็กต์ JSON ที่ใช้ชื่อคำสั่งเป็นคีย์:

{
"crictl-inspect": ["System Troubleshooting", "ExecUser", " container-id"],
"diagnosis": ["System Troubleshooting", "ExecUser", "no argument needed", "GLOBAL"],
"ip-link-set": ["Network Troubleshooting", "Exec", " (<device>||<group>) (up||down)"]
}

แต่ละรายการมีรูปแบบ [category, tier, exampleArgument?, scope?] และฟิลด์เหล่านั้น ไม่ใช่เพียงเอกสารประกอบ — มันกำหนดว่าคำสั่งนั้นต้องถูกเรียกอย่างไร

เงื่อนไขเมธอดและพาธBodyคืนค่า
scope เป็น GLOBALGET .../vpm/debug/global/<cmd>ไม่มีJSON
tier เป็น ExecUserPOST .../vpm/debug/<node>/exec-userอาร์เรย์ commandข้อความ
tier เป็น ExecPOST .../vpm/debug/<node>/execอาร์เรย์ commandข้อความ

กรณีที่พบทั่วไป ส่งคำสั่งและอาร์กิวเมนต์ของคำสั่งเป็นอาร์เรย์ โดยให้ชื่อคำสั่ง อยู่ลำดับแรก:

Terminal window
curl -sS -X POST \
-H "Authorization: APIToken $XCSH_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"namespace":"system","site":"<site>","node":"<node>","command":["crictl-ps"]}' \
"$XCSH_API_URL/api/operate/namespaces/system/sites/<site>/vpm/debug/<node>/exec-user"
{ "return_code": 0, "output": "CONTAINER IMAGE CREATED STATE ..." }

อาร์กิวเมนต์ต้องเป็นสมาชิกแยกกันของอาร์เรย์ ไม่ใช่สตริงเดียว:

{ "command": ["journalctl", "-u", "vpm", "-n", "200"] }

GLOBAL — ครอบคลุมทั้งไซต์ และใช้ transport ที่แตกต่างไปโดยสิ้นเชิง 2 commands

หัวข้อที่มีชื่อว่า “GLOBAL — ครอบคลุมทั้งไซต์ และใช้ transport ที่แตกต่างไปโดยสิ้นเชิง ”

มีเพียง health และ diagnosis สองคำสั่งเท่านั้น ทั้งคู่เป็นคำขอ GET ไปยังพาธ global ไม่รับอาร์กิวเมนต์ และคืนค่าเป็น JSON ที่มีโครงสร้างแทนที่จะเป็นข้อความแบบเทอร์มินัล

Terminal window
curl -sS -H "Authorization: APIToken $XCSH_API_TOKEN" \
"$XCSH_API_URL/api/operate/namespaces/system/sites/<site>/vpm/debug/global/health" | jq .

Exec — ระดับที่มีสิทธิ์พิเศษ 1 command on this build

หัวข้อที่มีชื่อว่า “Exec — ระดับที่มีสิทธิ์พิเศษ ”

เป็น endpoint แยกต่างหาก และระดับนี้ถูกบังคับใช้จริงไม่ใช่เพียงคำแนะนำ: exec จะปฏิเสธ คำสั่งระดับ ExecUser ด้วยข้อความ command not supported เดียวกัน สมาชิกทุกตัว ในระดับนี้ล้วนเปลี่ยนแปลงสถานะของโหนดหรืออ่านค่าตัวบ่งชี้สถานะ

บนบิลด์ที่เทนแนนต์นี้ใช้งาน ระดับนี้มีเพียง ip-link-set เท่านั้น บิลด์ที่ใหม่กว่า เพิ่ม systemctl-restart-NetworkManager, systemctl-restart-crio, systemctl-restart-kubelet, systemctl-start-crio-prune และคำสั่ง marker-exists-* อีกสามคำสั่ง

ชื่อโหนดคือชื่อ Azure VM และ list-service เป็นวิธีที่ประหยัดในการยืนยันชื่อนั้น พร้อมกับบริการที่กำลังทำงานอยู่บนโหนด:

Terminal window
curl -sS -H "Authorization: APIToken $XCSH_API_TOKEN" \
"$XCSH_API_URL/api/operate/namespaces/system/sites/<site>/vpm/debug/global/list-service" \
| jq -r '[.service[].node] | unique'
["", "f5-xc-ce-vm-01"]

บริการบางรายการรายงานชื่อโหนดเป็นค่าว่าง ดังนั้นสตริงว่างในรายการนั้นเป็นผลพลอยได้จาก การตอบกลับ ไม่ใช่โหนดที่สอง นอกจากนี้ list-service ยังไม่อยู่ในแคตตาล็อก 34 คำสั่ง: มันเป็น endpoint แบบ global ที่แคตตาล็อกไม่ประกาศไว้ ซึ่งเป็นเหตุผลที่มันถูกบันทึกไว้ที่นี่ ไม่ใช่ในเอกสารอ้างอิงคำสั่ง

ทุกหน้าคำสั่งฝังผลลัพธ์ที่เก็บได้จาก scripts/capture-sitecli.sh ซึ่ง นำกฎทั้งสามข้อด้านบนไปใช้งาน

  1. ชี้ให้สคริปต์ทำงานกับเทนแนนต์ สคริปต์จะอ่าน XCSH_API_URL และ XCSH_API_TOKEN หรือย้อนไปใช้คอนเท็กซ์ xcsh ที่เปิดใช้งานอยู่

  2. รีเฟรชแคตตาล็อกและยืนยันว่าโหนดไม่ได้เปลี่ยนแปลงไปจากที่เอกสารระบุไว้:

    Terminal window
    bash scripts/capture-sitecli.sh --check

    คำสั่งนี้เปรียบเทียบเฉพาะแคตตาล็อกที่คอมมิตไว้และบิลด์ซอฟต์แวร์เท่านั้น และจะ รายงานการเปลี่ยนแปลงของบิลด์แยกจากคำสั่งที่ถูกเพิ่มหรือถูกลบ

  3. เก็บข้อมูลใหม่เมื่อคุณต้องการหลักฐานที่สดใหม่:

    Terminal window
    bash scripts/capture-sitecli.sh