ในทุกวันนี้การทำงานในระบบ IT นั้นการ Monitor เป็นสิ่งสำคัญเป็นอย่างมากด้วยจากปัญหาของระบบถ้าสมมุติว่ามัน down ไปจะทำยังไง หรือ ถ้ามันทำงานผิดพลาดขึ้นมาเราจะรู้ได้ยังไง ว่าแต่ซอฟท์แวร์ อะไรหล่ะที่เหมาะแก่การทำ Monitoring เพราะปัจจุบัน ซอฟท์แวร์หรือผู้ให้บริการด้าน cloud monitoring ต่างๆ มีราคาที่ค่อนข้างสูง อีกทั้งหลายองค์กรณ์อยากได้แบบ Private ไว้ใช้เองอีกดังนั้น Opensource แบบที่สามารถติดตั้งได้เองนั้นจึงเข้ามาเป็นหนึ่งในตัวเลือกที่ดีที่เหมาะในการนำมาใช้งานในองค์กร ซึ่งก็มีหลายเจ้ามาก ๆ โดยในหัวข้อนี้จะกล่าวถึงเรื่องของ Prometheus และ Grafana
Prometheus และ Grafana คืออะไร
Prometheus คือ Software ที่นำมาใช้ในการทำ Monitoring แต่ Prometheus ไม่มีหน้า Dashboard ในตัวเองเลยต้องใช้Software ในการทำ Dashboard อย่าง Grafana
การแก้ไขปัญหา สามารถแก้ไขปัญหาอะไรได้บ้าง?
- หากคุณมีเครื่อง server เยอะ คุณสามารถนำ solution ตัวนี้มาช่วยในการ monitor status เครื่อง server ต่างๆได้
- สามารถกำหนดค่าต่างๆ ให้ดูง่ายยิ่งขึ้น
- เมื่อเราทราบปัญหาเราสามารถเข้าแก้ไขได้อย่างทันท่วงที
- ช่วยอำนวยความสะดวกให้แก่ support, engineer, หรือฝ่ายอื่นๆที่เกี่ยวข้อง
การทำงานของ Prometheus
ตัวของ Prometheus นั้นจะทำงานได้จะต้องประกอบไปด้วย 2 ส่วนด้วยกันคือ Prometheus Server เป็นตัว Server กลางในการเก็บรวบรวมข้อมูล Metric ต่าง ๆ จากส่วนของ Prometheus Exporter ซึ่งในตัวของ Prometheus Exporter นั้นจะเป็นส่วนที่เข้าไปเก็บข้อมูลของเครื่องหรือ Application ตัวนั้น ๆ โดยเมื่อทำการเก็บข้อมูลเสร็จจะ Export ตัว Metric ออกไปแล้วรอให้ตัว Prometheus Server เข้ามาเก็บข้อมูลไปยัง Server โดยสิ่งที่เก็บไว้ของ Prometheus Server นั้นคือ TSDB (Time Series Database) และในตัวของ Prometheus ยังมีการรองรับกับ Prometheus Alert Manager เพื่อทำการ Alert อีกด้วย

การทำงานของ Grafana
หลังจากที่มี Prometheus Exporter เพื่อทำการเก็บ Metric ต่าง ๆ มายัง Prometheus Server แล้วสิ่งที่จะทำให้ดูข้อมูลได้ง่ายขึ้นคือ Dashboard และ Software ที่นิยมนำมาใช้งานคือ Grafana เจ้าตัว Grafana นั้นจะไปทำการ Query ข้อมูลมาจากแหล่งข้อมูลต่าง ๆ ที่เรียกว่า Datasource ซึ่ง Grafana นั้นได้รองรับ Datasource หลากหลายรูปแบบเช่น Prometheus Server, JSON API, ZABBIX Server หรือ MYSQL เป็นต้น โดย Grafana จะนำข้อมูลมาและให้ทาง Admin สามารถทำการออกแบบ Dashboard ได้เองก็ย่อมได้ อีกทั้ง Grafana ยังรองรับการทำ Alert ภายในตัวเองได้แบบง่าย ๆ อีกด้วย
dashboard ด้านล่าง คือการเอา Grafana ไป Query ข้อมูลจาก Prometheus ออกมาเพื่อเอามาทำเป็น Graph ให้สวยๆ หรือจะทำเป็น Visualization อื่นๆ ให้ดูง่ายขึ้น

หรืออย่างด้านล่างนี้ก็สามารถเชื่อมต่อโดยตรงกับตัวของ MySQL เพื่อ Query ข้อมูลมาดูก็ได้ซึ่งในส่วนของหน้าต่างด้านล่างนี้จะเป็นการนำเอา status ของ MySQL Group Replication มาดูว่า Node ไหนใน Cluster เป็น Primary Node อยู่ในขณะนี้

หากใครที่มี Zabbix อยู่อยากได้หน้าตาให้ดูสวยงาม ดูง่ายๆ ก็สามารถนำมาต่อกับ Grafana ได้ ซึ่งเราจะได้ Dashboard ที่สวยงามมากกว่าเดิม และถ้าหากคุณอยาก Custom ยังไงก็ Freestyle ทำได้ไม่ยากอีกด้วย

ในส่วนของ Container status หล่ะทำได้ไหม บอกเลยว่าทำได้แน่นอน ตัวของ Prometheus นั้นสามารถเชื่อมต่อกับตัว cAdvisor ที่เป็น solution ในการ monitor container status ได้ ทีนี้เราเลยเอามาทำ alert ผ่าน grafana

เราต้อง Get ข้อมูลออกมาก่อน ที่เห็นกราฟขาดนี่ทางเราทำการตั้ง Interval ห่างไปหน่อย ที่ Prometheus

หัวข้อ Alert ก็จะมีให้เราตั้งว่าจะเอาแบบไหนในรูปนี้คือตั้งเป็นแบบว่าถ้า get status ไม่ได้ให้ถือว่ามัน down ไปนั้นเอง แน่นอนผมเชื่อว่าหลายๆคนคงเห็นประโยชน์จากการทำ monitor กราฟเหล่านี้บ้างแล้ว

ส่วนอันนี้เป็นตัวอย่าง Alert ที่มาจาก Grafana จะเห็นได้ว่า ใช้ Memory กันเยอะมาก
สุดท้ายนี้ Solution ของการทำ Monitoring นั้นจะใช้เป็น JSON API + Grafana, MySQL + Grafana, Prometheus + Grafana หรือ Zabbix + Grafana ก็ขึ้นอยู่กับการใช้งานของแต่ละความต้องการนั้น ๆ ไม่จำเป็นว่าต้องใช้ Prometheus + Geafana เท่านั้น ซึ่งทำให้การนำ Grafana มาใช้งานจะเหมาะกับ มีหลาย ๆ ระบบและจะรวมเป็น 1 Dashboard ก็ทำได้ และ Prometheus ก็ยังรองรับการใช้งานในหลายรูปแบบซึ่งทำให้การนำมาใช้งานนั้นยืดหยุ่นมาก ๆ อีกด้วย หรือถ้าหากใครสนใจปรึกษาเราได้นะครับ

