PFG = PostgreSQL + Fluent-bit + Grafana

ปีที่ผ่านมาความรับผิดชอบหนึ่งของผมใน MFEC คือการดู centralized log ทั้งบริษัท โดยทั่วไปการใช้ ELK (Elasticsearch + Logstash + Kibana) ก็เป็นแนวทางมาตรฐาน แม้จะทำงานได้ดีแต่ก็มีส่วนที่ไม่ชอบหลายอย่าง เช่น

  • ผมไม่เคยอัพเกรด Elasticsearch สำเร็จเลย หลังๆ เลยยอมลง cluster ใหม่แล้วชี้ Logstash ออกไปที่ใหม่ชัวร์กว่ามาก
  • ภาษา query ค่อนข้างเฉพาะตัว คนไม่เคยใช้งงแน่นอน
  • ทั้ง Stack เป็น Java กินแรมเริ่มต้นค่อนข้างสูง
  • จากปัญหากินแรม ใน edge จริงๆ ฝั่ง ELK เลยมักใช้ filebeat ไปกวาดข้อมูลขึ้น logstash แต่จะเจอว่า filebeat มันจำกัดมาก process อะไรกับ log แทบไม่ได้เลย

ผมเองเห็น fluentd มาพักใหญ่ๆ แล้วได้ลองมาพักหนึ่งแต่ไม่เคยเอาขึ้น production จริงจัง พอดีมีโปรเจคใหม่กำลังขึ้นเลยจะขอลอง พออ่านไปอ่านมาก็เจอว่า fluentbit มันเล็กกว่า แม้จะมีฟีเจอร์น้อยกว่า fluentd มาก แต่รวมๆ ก็ถือว่าเยอะกว่า filebeat อยู่ดี (มี stream processor ด้วยซ้ำไป)

จุดสำคัญคือ PostgreSQL นั้นมีคนเข้าใจมันเยอะกว่า Elasticsearch มาก งาน operation ทั่วๆ ไป การ query ข้อมูล, backup, restore, upgrade นั้นมักมีคนได้เป็นเรื่องปกติ ส่วนจุดขายของ ELK จะเป็นการทำงานกับข้อมูลแบบไม่มี schema ที่เหมาะกับ log มากกว่า แต่ PostgreSQL เองก็รองรับข้อมูลแบบ JSON/JSONB มาตั้งแต่เวอร์ชั่น 9.4

fluentbit รองรับ postgesql ในตัว โดยตารางที่เขียนข้อมูลมีแค่ 3 column คือ time, tag, data แล้วใส่ตัว data ไว้เป็น JSONB

พอลองเล่นแล้วพบว่าเวิร์คกว่าที่คิด จุดประหลาดที่สุดคงเป็น Grafana ที่คุมให้กราฟมันออกอย่างที่อยากได้ยากกว่า ELK แม้ ELK จะ alien กว่าตอนเริ่มต้น แต่พอทำงานจริงๆ แล้วจะพบว่ามันคิดอะไรให้เยอะแล้ว พวกกด drill down ข้อมูล ELK ทำได้ดีกว่ามากกดเงื่อนไขเพิ่มจากในกราฟได้เลย นับเป็นข้อได้เปรียบของการใช้ UI ที่ผูกกับ data source เดียว

ในแง่ประสิทธิภาพผมยังไม่ได้ทดสอบเองแต่เจอว่า Postgres เสียเปรียบเรื่องการกินพื้นที่ดิสก์มาก แต่ประสิทธิภาพการคิวรีดีกว่า InfluxDB ไว้มีเวลาแล้วค่อยเอา data ชุดเดียวกันมาเทียบอีกที (ยังหา benchmark เทียบกับ elasticsearch ไม่เจอ)

 

lewcpe

CTO at MFEC PLC. Chief Editor at Blognone.com