Claude Code Observability คืออะไรและทำไมต้องสนใจ
เวลาเราเขียนโปรแกรมโดยใช้ Claude Code หรือเครื่องมือช่วยเขียนโค้ดแบบอัตโนมัติ (Agentic coding tools) เรามักจะรู้สึกว่ามันฉลาดจนน่าทึ่ง แต่มันก็เป็นเหมือนกล่องดำที่เราไม่รู้ว่าข้างในทำอะไรไปบ้าง การทำ Observability (ความสามารถในการสังเกตการณ์ระบบ) คือการติดกล้องวงจรปิดให้โค้ดของเรา เพื่อดูว่ามันทำงานอย่างไรโดยไม่ต้องเปิดดูซอร์สโค้ด (Source code - รหัสต้นฉบับของโปรแกรม) ให้ปวดหัว
ลองนึกภาพว่าคุณจ้างพนักงานมาเขียนโปรแกรมให้ แต่คุณไม่ได้คุมงานเลย คุณจะรู้ได้อย่างไรว่าเขาใช้งบไปเท่าไหร่ หรือทำไมงานถึงช้า การสังเกตการณ์ระบบช่วยให้เราตอบคำถามสำคัญได้ เช่น วันนี้เราเสียค่าโทเค็น (Token - หน่วยวัดปริมาณข้อความที่ส่งให้ AI) ไปเท่าไหร่ หรือมีขั้นตอนไหนที่ทำให้ AI ทำงานช้าลงจนน่าตกใจ
การเข้าใจเรื่องนี้จะช่วยให้เราเป็นโปรแกรมเมอร์ที่บริหารจัดการทรัพยากรเป็น ไม่ใช่แค่เขียนโค้ดให้เสร็จไปวัน ๆ Telemetry (ข้อมูลที่ระบบส่งออกมาเพื่อบอกสถานะการทำงาน) คือหัวใจสำคัญที่จะเปลี่ยนการเดาสุ่ม ให้กลายเป็นข้อมูลจริงที่คุณนำไปใช้วางแผนการทำงานและควบคุมต้นทุนของทีมได้อย่างแม่นยำ
รู้จักข้อมูล Telemetry 3 รูปแบบ
ข้อมูลที่ระบบส่งออกมาเพื่อบอกสถานะการทำงานมีอยู่ 3 อย่างหลัก ๆ ที่เราต้องทำความรู้จักกันก่อน อย่างแรกคือ Metrics (เมตริก - ตัวเลขที่สรุปผลในช่วงเวลาหนึ่ง) เช่น จำนวนครั้งที่ AI เรียกใช้คำสั่งต่อวินาที ซึ่งช่วยให้เราเห็นภาพรวมของระบบได้ทันที
อย่างที่สองคือ Logs (บันทึกเหตุการณ์) ซึ่งเป็นเหมือนไดอารี่ที่จดทุกอย่างที่เกิดขึ้นตามเวลา เช่น เมื่อไหร่ที่ AI เริ่มบีบอัดข้อมูล (Compaction) หรือเมื่อไหร่ที่เกิดข้อผิดพลาดขึ้นมา ส่วนอย่างสุดท้ายคือ Traces (ร่องรอยการทำงาน) ซึ่งช่วยให้เราเห็นเส้นทางเดินของคำสั่งหนึ่งคำสั่ง ว่ามันวิ่งไปเรียกใช้ส่วนไหนของระบบบ้าง
เพื่อให้ข้อมูลเหล่านี้เป็นมาตรฐาน เราจึงใช้เครื่องมือที่ชื่อว่า OpenTelemetry (เฟรมเวิร์กมาตรฐานสำหรับเก็บข้อมูลการทำงานของระบบ) ซึ่งเปรียบเสมือนภาษากลางที่ทำให้เครื่องมือต่าง ๆ คุยกันรู้เรื่อง ไม่ว่าคุณจะใช้ระบบเก็บข้อมูลตัวไหน คุณก็สามารถนำข้อมูลจาก Claude Code ไปใช้ต่อได้ทันทีโดยไม่ต้องเปลี่ยนวิธีเขียนโค้ด
การติดตั้งและเปิดใช้งาน Telemetry ใน Claude Code
การจะให้ Claude Code ส่งข้อมูลออกมา เราต้องไปตั้งค่าในเครื่องของเราก่อน โดยปกติแล้ว Claude Code จะมีฟังก์ชันนี้ฝังมาให้แล้ว หน้าที่ของเราคือการบอกให้มันเปิดใช้งานและส่งข้อมูลไปที่ไหน สำหรับบน Linux หรือ macOS คุณสามารถตั้งค่าผ่านตัวแปรสภาพแวดล้อม (Environment variable - ค่าตั้งค่าที่ใช้ในระบบ) ได้ง่าย ๆ
คุณต้องมี OpenTelemetry Collector (ตัวเก็บข้อมูลจากระบบ) เพื่อคอยรับข้อมูลที่ Claude Code ส่งมา ถ้าคุณเพิ่งเริ่มต้น ให้ลองรันตัว Collector นี้บนเครื่องตัวเองก่อน เพื่อทดสอบว่าข้อมูลไหลมาจริงหรือไม่ ก่อนจะขยับขยายไปใช้บนเซิร์ฟเวอร์ (Server - คอมพิวเตอร์ที่รันโปรแกรมตลอดเวลา) ในอนาคต
จุดที่มือใหม่มักพลาดคือการลืมเช็กว่าพอร์ต (Port - ช่องทางเชื่อมต่อเข้าออกของข้อมูล) เปิดอยู่หรือไม่ ก่อนจะเริ่มรันคำสั่ง ให้ตรวจสอบเสมอว่าไม่มีโปรแกรมอื่นใช้งานพอร์ตเดียวกันอยู่ เพราะจะทำให้การส่งข้อมูลล้มเหลวทันที
# ตั้งค่าให้ Claude Code ส่งข้อมูลผ่านโปรโตคอล OTLP
export OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:4317"
# สั่งเปิดใช้งาน Telemetry ในตัว Claude Code
export CLAUDE_CODE_TELEMETRY_ENABLED="true"
คำอธิบาย: บรรทัดแรกคือการกำหนดที่อยู่ปลายทางให้ Claude Code ส่งข้อมูลไป ส่วนบรรทัดที่สองคือการเปิดสวิตช์ให้ตัวโปรแกรมเริ่มส่งข้อมูลออกมา ผลลัพธ์คือเมื่อรัน Claude Code ในเทอร์มินัล (Terminal - หน้าต่างพิมพ์คำสั่ง) มันจะเริ่มส่งข้อมูลไปยังพอร์ต 4317 ของเครื่องคุณ
เลือกวิธีส่งข้อมูล: Pull vs Push
ข้อมูล Telemetry เดินทางออกจากแอปได้ 2 แบบ คือการ Pull (ดึงข้อมูล) และการ Push (ผลักข้อมูล) แบบ Pull คือการที่ตัวเก็บข้อมูลของเราเดินไปเคาะประตูถามแอปว่า "ตอนนี้สถานะเป็นยังไงบ้าง" ซึ่งเหมาะกับระบบที่ทำงานต่อเนื่องยาวนานและมีที่อยู่แน่นอน
ส่วนแบบ Push คือการที่แอปของเรา "ส่งข้อมูลไปบอก" ตัวเก็บข้อมูลเองทุก ๆ ช่วงเวลา แบบนี้ยืดหยุ่นกว่ามาก เพราะแอปจะเปิดหรือปิดเมื่อไหร่ก็ได้โดยไม่ต้องคอยบอกตัวเก็บข้อมูลล่วงหน้า สำหรับ Claude Code การใช้แบบ Push ผ่านโปรโตคอล OTLP (โปรโตคอลมาตรฐานของ OpenTelemetry) คือวิธีที่ง่ายและเสถียรที่สุด
ถ้าคุณยังไม่แน่ใจว่าจะใช้แบบไหน ให้เลือกแบบ Push ไปก่อนเสมอ เพราะมันลดความยุ่งยากในการจัดการไอพีแอดเดรส (IP Address - เลขที่อยู่ของคอมพิวเตอร์ในเครือข่าย) และทำให้การขยายระบบในอนาคตทำได้ง่ายโดยไม่ต้องไปแก้ตั้งค่าที่ตัวแอปบ่อย ๆ
การรวบรวมและแสดงผลข้อมูล
เมื่อข้อมูลถูกส่งออกมาแล้ว เราต้องมีที่เก็บและที่ดูข้อมูลเหล่านั้น เครื่องมือที่นิยมใช้กันคือ Grafana (เครื่องมือสร้างกราฟสรุปข้อมูล) ซึ่งจะดึงข้อมูลจากตัวจัดเก็บอย่าง Prometheus (ตัวเก็บข้อมูลตัวเลข) หรือ Loki (ตัวเก็บข้อมูลบันทึกข้อความ) มาโชว์ให้เราเห็นเป็นกราฟสวย ๆ
ลองนึกภาพว่าคุณมีแดชบอร์ด (Dashboard - หน้าจอสรุปข้อมูล) ที่แสดงกราฟเส้นแสดงการใช้โทเค็นรายวัน คุณจะเห็นทันทีว่าวันไหนที่ทีมใช้เงินไปเยอะผิดปกติ การเห็นภาพแบบนี้ทำให้เราปรับเปลี่ยนพฤติกรรมการใช้งานได้เร็วกว่าการมานั่งไล่ดูตัวเลขในไฟล์ข้อความ
ข้อควรระวัง: ในปัจจุบัน Claude Code ยังไม่ได้แยกข้อมูลตามชื่อผู้ใช้ชัดเจน ดังนั้นในหนึ่งเซสชัน (Session - ช่วงเวลาการใช้งานต่อเนื่อง) ข้อมูลอาจจะรวมกันอยู่ การติดตามต้นทุนจึงต้องดูจาก session_id (รหัสประจำช่วงเวลาการใช้งาน) เป็นหลักในตอนนี้
สรุป: เริ่มต้นสังเกตการณ์วันนี้เพื่อเป็นโปรแกรมเมอร์มืออาชีพ
การทำ Observability ไม่ใช่เรื่องไกลตัวสำหรับมือใหม่ แต่มันคือทักษะที่จะแยกโปรแกรมเมอร์ทั่วไป ออกจากคนที่เข้าใจระบบอย่างถ่องแท้ การเริ่มตั้งค่า Claude Code ให้ส่งข้อมูลวันนี้ จะทำให้คุณเห็นว่า AI ทำงานอย่างไร และช่วยให้คุณคุมงบประมาณในการพัฒนาโปรเจกต์ส่วนตัวได้ดีขึ้น
ตัวอย่างการนำไปใช้จริง: สมมติว่าคุณกำลังทำโปรเจกต์จบและต้องใช้ Claude Code ช่วยเขียนโค้ดเยอะมาก คุณสามารถตั้งค่าตัวเก็บข้อมูลไว้ในเครื่อง แล้วสร้างกราฟใน Grafana เพื่อดูว่าวันนี้คุณใช้โทเค็นไปกี่เหรียญ ถ้าเห็นว่าค่าใช้จ่ายพุ่งสูงเกินไป คุณจะได้รู้ตัวและปรับเปลี่ยนวิธีเขียน Prompt (ข้อความสั่ง AI) ให้กระชับขึ้นได้ทันที
จงจำไว้ว่าระบบที่ดีต้องตอบคำถามเราได้เสมอ ไม่ว่าจะเป็นเรื่องของประสิทธิภาพหรือต้นทุน การฝึกสังเกตการณ์ระบบตั้งแต่ตอนนี้ จะทำให้คุณเติบโตเป็นโปรแกรมเมอร์ที่ทำงานได้อย่างมีประสิทธิภาพและคุ้มค่าที่สุด
ที่มา: Claude Code Observability with OpenTelemetry — freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More