PlusMagi's Blog By Pitt Phunsanit Backend,Cloud Computing,Database Logging & Observability (Structured Logging with Serilog, OpenTelemetry, Health Checks)

Logging & Observability (Structured Logging with Serilog, OpenTelemetry, Health Checks)

ในโลกของสถาปัตยกรรม Microservices ที่ซับซ้อน การทำความเข้าใจว่าระบบทำงานอย่างไรเมื่อเกิดข้อผิดพลาด (Failure Domain) หรือเมื่อมีประสิทธิภาพลดลง (Performance Degradation) ถือเป็นความท้าทายระดับสูง การมองเห็นภาพรวม (Observability) จึงไม่ใช่แค่การบันทึก Log แต่คือการสร้างระบบที่สามารถตอบคำถามว่า “ทำไมถึงเกิดสิ่งนี้ขึ้น” ได้อย่างแม่นยำ

บทความนี้จะเจาะลึกหลักการสำคัญของ Observability โดยเน้นการนำแนวคิด Structured Logging, OpenTelemetry, และ Health Checks มาประยุกต์ใช้ร่วมกับ PostgreSQL เพื่อให้ได้ระบบที่ทนทานและสามารถตรวจสอบได้อย่างสมบูรณ์

1. Structured Logging: การจัดเก็บ Log ที่มีโครงสร้าง

การบันทึก Log แบบข้อความธรรมดา (Unstructured Text) นั้นยากต่อการค้นหาและวิเคราะห์อย่างยิ่ง หัวใจสำคัญคือการเปลี่ยนไปใช้ Structured Logging ซึ่งหมายถึงการจัดเก็บข้อมูลเหตุการณ์ (Event) ในรูปแบบที่มีโครงสร้าง เช่น JSON

เมื่อใช้ PostgreSQL เราสามารถใช้ประเภทข้อมูล JSONB เพื่อจัดเก็บ Log ที่มีโครงสร้างเหล่านี้ได้อย่างมีประสิทธิภาพ ทำให้เราสามารถ Query ข้อมูลเฉพาะเจาะจงได้ด้วยตัวดำเนินการ JSONB ที่ทรงพลัง แทนที่จะต้องใช้ Regular Expression ที่เปราะบาง

SQL

-- ตัวอย่างการบันทึก Log ที่มีโครงสร้าง (Structured Log) ใน PostgreSQL
INSERT INTO application_logs (timestamp, service_name, log_level, details) VALUES 
(NOW(), 'user_service', 'INFO', '{"user_id": 101, "action": "login", "ip_address": "192.168.1.1"}');

2. OpenTelemetry (OTel): การติดตามเส้นทางแบบกระจาย (Distributed Tracing)

ในระบบ Microservices หนึ่งคำขอ (Request) อาจต้องผ่านบริการย่อยหลายตัว (Service A -> Service B -> Database) OpenTelemetry เป็นมาตรฐานอุตสาหกรรมที่ช่วยให้เราสร้าง Traces เพื่อติดตามเส้นทางของ Request ตั้งแต่ต้นจนจบ (End-to-End) โดยไม่ขึ้นอยู่กับ Vendor

แม้ว่า OTel จะทำงานที่ระดับ Application Layer แต่ข้อมูลที่ได้ (Span Context) จะช่วยให้เราทราบว่าส่วนใดของกระบวนการที่ใช้เวลานานที่สุด ซึ่งเป็นข้อมูลสำคัญในการปรับปรุงประสิทธิภาพของ Query ใน PostgreSQL ด้วย

3. Health Checks: การตรวจสอบความพร้อมใช้งานของระบบ

Health Checks คือการตรวจสอบสถานะขององค์ประกอบต่างๆ ของระบบอย่างสม่ำเสมอ สำหรับ PostgreSQL เราสามารถทำ Health Check ได้ง่ายๆ ด้วยการรันคำสั่งพื้นฐานเพื่อยืนยันการเชื่อมต่อและความพร้อมของฐานข้อมูล

SQL

-- ตัวอย่าง Health Check พื้นฐานสำหรับ PostgreSQL
SELECT current_database(), current_user;

นอกจากนี้ยังสามารถตรวจสอบความสมบูรณ์ของข้อมูลสำคัญได้ เช่น การนับจำนวน Record ในตารางหลัก:

SQL

-- ตัวอย่างการตรวจสอบความพร้อมของตาราง Users
SELECT count(*) FROM users WHERE is_active = TRUE;

บทสรุป: การสร้างระบบที่ตรวจสอบได้

การผสานรวม Structured Logging (JSONB), OpenTelemetry (Tracing), และ Health Checks เข้าด้วยกัน ทำให้เรามีมุมมองที่ 360 องศาต่อระบบ ไม่ว่าจะเป็นการค้นหาข้อผิดพลาดที่เกิดขึ้นในอดีต (Logs), การระบุคอขวดของประสิทธิภาพ (Traces), หรือการยืนยันความพร้อมใช้งานในปัจจุบัน (Health Checks) การทำ Observability ที่สมบูรณ์เช่นนี้คือรากฐานสำคัญที่ทำให้ระบบซอฟต์แวร์ขนาดใหญ่มีความน่าเชื่อถือและสามารถขยายตัวได้อย่างยั่งยืน

Exit mobile version