Loki คืออะไร
คำจำกัดความสั้น ๆ คือ
เหมือนกับ Prometheus แต่ใช้สำหรับเก็บข้อมูล log
ความสามารถที่น่าสนใจคือ

  • Horizontal scale
  • High availability
  • Log aggregation
  • ออกแบบมาเพื่อให้จัดการได้ง่าย รวมทั้งเรื่องประหยัดค่าใช้จ่าย หรือใช้ให้เกิดประโยชน์สูงสุด

ออกแบบมาเพื่อแก้ไขปัญหาของระบบจัดการ log แบบเดิม
ที่ยากต่อการ scale ใช้ค่าใช้จ่ายที่สูง
รวมทั้งหาความสัมพันธ์หรือเกี่ยวข้องได้ยากมาก ๆ

Loki ทำงานอย่างไร

Loki จะทำการจัดทำ index ของข้อมูล log ที่ส่งเข้ามาเหมือนกับ Elasticsearch เลย แต่ไม่ได้ทำการสร้าง index ของข้อมูลที่ส่งมาทั้งหมด จะจัดทำ index เฉพาะข้อมูลที่จำเป็นต้องใช้ หรือเรียกว่า metadata ซึ่งมีขนาดเล็กมาก ๆ  เช่น สำหรับ log ของ web server จะจัดทำ index เพียง

  • Timestamp
  • HTTP Method
  • HTTP Status

ทำให้เราสามารถดึงข้อมูลตามเงื่อนไขจากที่เก็บไว้เท่านั้น
ถ้ามีความต้องการเพิ่มเติม ก็สามารถ config ได้
ดังนั้น แนวคิดของการจัดทำ index คือ
คนใช้งานต้องคิดก่อนว่า จะใช้งาน log กันอย่างไรและอะไรบ้าง
ไม่ใช่เก็บลูกเดียวเท่านั้น
และยังมีแนวคิดของ Label เพื่อเพิ่มประสิทธิภาพการดึงข้อมูลอีกด้วย

ส่วนการนำไปใช้งานนั้น ทาง Grafana Labs ก็มีเครื่องมือมาให้ครบเลย
แสดงการทำงานดังรูป

การใช้งาน Loki

แน่นอนว่า Loki มีแนวคิดมาจาก Prometheus
ดังนั้นก็ต้องทำงานร่วมกับ prometheus ได้

กับทำงานร่วมกับเครื่องมืออื่น ๆ ได้เช่นกัน
ยกตัวอย่างเช่น Fluentd เป็นต้น แสดงดังรูป

เพื่อความง่าย จะลองใช้งาน Loki + Promtail + Grafana

ซึ่งเป็นการใช้งานหลักจากทาง Grafana Labs ทั้งหมด

  • Promtail คือ Agent ที่ไป run ในเครื่องต้นทางของข้อมูลที่เราต้องการจัดเก็บ
  • Loki คือ Database สำหรับจัดเก็บข้อมูลที่ส่งมาจาก Promtail
  • Grafana คือ ส่วนการแสดงผลข้อมูลจาก Loki ในรูปแบบสวยงาม โดยการดึงข้อมูลจะใช้งานผ่าน LogQL ของ Loki ซึ่งต้องทำการเพิ่ม Datasource ใหม่ใน Grafana

แสดงโครงสร้างการทำงานดังรูป

โดยที่ใน project Loki ได้เตรียม Docker compose ไว้ให้ใช้แบบง่าย ๆ ดังนี้

ก่อนอื่นต้อง config Promtail ซึ่งทำงานเป็น Agent
เพื่อดึงข้อมูลจาก log ที่เราต้องการ
ยกตัวอย่างเช่น การดึงจาก System log

จากนั้นทำการ start stack ของ Loki ด้วย Docker compose ดังนี้

จากนั้นเข้าไปเพิ่ม Datasource Loki ใน Grafana

ใน Grafana จะเพิ่ม Explore menu => Loki มาให้ใช้งานเพื่อทำการดึงข้อมูลจาก Loki ผ่าน LogQL

เพียงเท่านี้ก็ใช้งาน Loki ได้แล้ว

Reference Websites

https://grafana.com/blog/2020/05/12/an-only-slightly-technical-introduction-to-loki-the-prometheus-inspired-open-source-logging-system/