跳到主要内容
返回文章列表

Grafana Loki: รวม Log และเลือก Label ที่ไม่ทำให้ระบบช้า

เริ่มส่ง log เข้า Loki แล้วเลือก label ที่คงที่เพื่อค้นหาเร็วโดยไม่สร้าง stream จำนวนมากจาก request ID หรือ user ID

Grafana Loki: รวม Log และเลือก Label ที่ไม่ทำให้ระบบช้า

เมื่อ log กระจายอยู่หลายเครื่อง การค้นเหตุ 500 ต้องสลับไฟล์และเทียบเวลาเอง Grafana Loki รับและจัด log เป็น stream โดยใช้ label เพื่อหากลุ่มข้อมูลก่อนอ่านข้อความจริง จุดตัดสินใจสำคัญจึงไม่ใช่แค่ติดตั้ง Loki แต่คือจะให้ field ใดเป็น label และจะเก็บข้อมูลไว้นานเท่าไร

ให้ label ตอบคำถามที่ใช้บ่อย

เริ่มด้วยค่าที่มีจำนวนจำกัดและเปลี่ยนไม่ถี่ เช่น service_name, environment, region หรือ namespace การแยก stream ตามบริการทำให้ค้นช่วงเวลาที่มีปัญหาได้เร็วขึ้น แต่ request_id, user_id และเลขคำสั่งซื้อมีค่าใหม่แทบทุกเหตุการณ์ หากเอาไปเป็น label จะสร้าง stream จำนวนมากและเพิ่มต้นทุน index กับ storage ให้เก็บค่าเหล่านี้ในเนื้อ log หรือ structured metadata ตามรูปแบบที่ระบบรองรับ

เมื่อมีข้อมูลเข้าแล้ว ทดลองค้นใน Grafana Explore ด้วย LogQL เช่น {service_name="api"} |= "error" เริ่มจาก label ที่เฉพาะเจาะจงและช่วงเวลาสั้น ก่อนขยายเวลา หากไม่พบ log ให้ตรวจว่าตัวส่ง log ทำงาน, timestamp อยู่ในช่วงค้นหา, label ชื่อตรงกัน และ endpoint รับข้อมูลตอบสำเร็จ

ทดลองจากบริการเดียวก่อน

คู่มือ Loki มีตัวอย่าง Docker Compose ที่รวม Loki, Grafana และตัวเก็บ log สำหรับทดลอง ให้เลือกแอปหนึ่งตัว ส่ง log ระดับ info และ error ที่รู้เวลาชัดเจน แล้วตรวจว่าข้อความถึงปลายทางครบ ทดสอบกรณีแอป restart และกรณีตัวส่ง log หยุดสั้น ๆ เพื่อรู้ว่ามีการส่งซ้ำหรือข้อมูลขาดหายหรือไม่

ก่อนขยายทุกเครื่อง ให้คำนวณปริมาณ log ต่อวันจากบริการตัวอย่าง ดูจำนวน stream และคิวรีที่ช้า แล้วกำหนด retention กับพื้นที่เก็บข้อมูลตามข้อกำหนดจริง การเพิ่ม label ใหม่ควรผ่านการทดลองกับข้อมูลจำลองที่มี cardinality ใกล้ของจริง ไม่ใช่ดูจากสิบ log แรกเท่านั้น

ความปลอดภัยและข้อจำกัด

Log อาจมี token, cookie, อีเมล หรือข้อมูลลูกค้า จึงควรกรองที่ต้นทางก่อนส่งและจำกัดสิทธิ์ผู้ค้นหา อย่าเชื่อว่าการย่ออายุเก็บ log จะแก้การรั่วของข้อมูลที่ถูก ingest ไปแล้ว การเก็บ log มากขึ้นไม่ได้แปลว่าจะวิเคราะห์ง่ายขึ้นเสมอ ให้กำหนดรูปแบบข้อความและ trace ID ที่ช่วยเชื่อมเหตุการณ์ แล้วตรวจว่า timestamp ของทุกบริการใช้เวลาอ้างอิงตรงกัน

Loki เหมาะกับการค้นและวิเคราะห์ log ที่ผูกกับระบบ observability อื่น แต่ยังต้องออกแบบ alert และขั้นตอนตอบสนองเหตุแยกต่างหาก เริ่มจากคำถามที่ทีมต้องตอบ เช่น “บริการใดมี error เพิ่มหลัง deploy” แล้วตั้ง label เท่าที่จำเป็นต่อคำถามนั้น

อ่านเพิ่มเติม: เริ่มใช้ Grafana Loki, แนวทางเลือก label