IT General
น้องๆ เคยปวดหัวกับการดู Log หรือ Metric ที่มันเยอะแยะตาลายไหม? สมัยผมทำร้านเน็ต SiamCafe.net เมื่อก่อนนะ ข้อมูล Server นี่กองเป็นภูเขาเลากาเลย จะหาอะไรทีนึงนี่งมเข็มในทะเลชัดๆ Grafana เนี่ยแหละครับ คือพระเอกขี่ม้าขาวที่จะมาช่วยเราจัดการปัญหาพวกนี้
Grafana คือเครื่องมือ Visualization ที่เอาไว้ทำ Dashboard สวยๆ ดูง่ายๆ ทำให้เราเห็นภาพรวมของข้อมูลได้ชัดเจน ไม่ว่าจะเป็น CPU Usage, Memory, Network Traffic หรืออะไรก็ตามที่เราอยากจะ Monitor
ทำไมถึงสำคัญน่ะเหรอ? ลองนึกภาพว่าเรามีร้านอาหาร แล้วเราไม่รู้เลยว่าเมนูไหนขายดี เมนูไหนขายไม่ดี เราก็สั่งวัตถุดิบมั่วซั่วไปหมด สุดท้ายก็เจ๊ง! Grafana ก็เหมือนกัน ถ้าเราไม่ Monitor ระบบของเรา เราก็ไม่รู้ว่าตรงไหนมีปัญหา ตรงไหนต้องปรับปรุง สุดท้ายระบบก็ล่ม! เข้าใจยัง?
ก่อนจะไปลงมือทำ Dashboard จริงๆ เรามาปูพื้นฐานกันก่อนนิดนึง จะได้ไม่งงตอนใช้งานจริง
Data Source คือแหล่งข้อมูลที่เราจะเอามาแสดงผลใน Grafana สมัยผมทำร้านเน็ตฯ ผมใช้ Data Source หลายแบบเลย เช่น Prometheus สำหรับเก็บ Metric ของ Server, Elasticsearch สำหรับเก็บ Log, MySQL สำหรับเก็บข้อมูล Billing ลูกค้า (อันนี้สำคัญ! ต้องรู้ว่าใครเล่นเกมอะไรไปบ้าง คิดเงินถูกไหม)
Grafana รองรับ Data Source เยอะมาก ลองเข้าไปดูใน Grafana Documentation ได้เลย
Panel คือแต่ละส่วนประกอบใน Dashboard ของเรา เช่น กราฟแท่ง, กราฟเส้น, ตาราง, หรือ Single Stat (แสดงค่าเดียว) แต่ละ Panel จะ Query ข้อมูลจาก Data Source แล้วแสดงผลออกมาในรูปแบบที่เราเลือก
ลองนึกภาพว่า Panel ก็เหมือน Widget บนหน้าจอโทรศัพท์ของเรานั่นแหละ แต่ละ Widget ก็แสดงข้อมูลแตกต่างกันไป
Query คือคำสั่งที่เราใช้ดึงข้อมูลจาก Data Source แต่ละ Data Source ก็จะมี Query Language ที่แตกต่างกัน เช่น Prometheus ใช้ PromQL, Elasticsearch ใช้ Lucene Query Syntax, MySQL ใช้ SQL (แน่นอน!) ต้องศึกษา Query Language ของ Data Source ที่เราใช้ให้เข้าใจ จะได้ดึงข้อมูลออกมาได้ตามที่เราต้องการ
สมัยผมหัดใช้ Prometheus ใหม่ๆ นี่มึนตึ้บเลย PromQL นี่อะไรวะเนี่ย! แต่พอใช้ไปเรื่อยๆ ก็เริ่มคล่องเองแหละ
เอาล่ะ! ทีนี้เรามาดูวิธีใช้งาน Grafana กันบ้าง เริ่มต้นยังไง ติดตั้งยังไง Config ยังไง
การติดตั้ง Grafana เนี่ยไม่ยากเลย มีให้เลือกหลายวิธี ทั้ง Download Package มาติดตั้งเอง, ใช้ Docker, หรือใช้ Cloud Service อย่าง Grafana Cloud (อันนี้สะดวกสุด)
ผมแนะนำให้ลองใช้ Docker ก่อนก็ได้ ง่ายดี
docker run -d -p 3000:3000 --name=grafana -v grafana-data:/var/lib/grafana grafana/grafana แค่นี้ Grafana ก็จะรันบน Port 3000 แล้ว เข้าไปที่ http://localhost:3000 ได้เลย
เราจะมาลองสร้าง Dashboard ง่ายๆ สักอันนึงกัน จะได้เห็นภาพว่ามันทำงานยังไง
อย่างแรกเลยคือเราต้อง Add Data Source ก่อน ในตัวอย่างนี้ผมจะใช้ Prometheus เป็น Data Source นะ (สมมติว่าเรามี Prometheus รันอยู่แล้วนะ) เข้าไปที่ Configuration -> Data Sources แล้วเลือก Prometheus กรอก URL ของ Prometheus แล้วกด Save & Test ถ้าทุกอย่างเรียบร้อย Grafana ก็จะขึ้นข้อความว่า "Data source is working"
ต่อไปก็ Create Dashboard ใหม่ ไปที่ + -> Dashboard แล้วเลือก Add new panel เราจะเจอกับ Panel Editor ที่นี่แหละที่เราจะ Query ข้อมูลและ Config หน้าตาของ Panel
ใน Panel Editor เราจะเลือก Data Source เป็น Prometheus แล้วเขียน PromQL Query เพื่อดึงข้อมูล เช่น node_cpu_seconds_total{mode="idle"} (อันนี้คือ CPU Idle Time) แล้ว Grafana ก็จะแสดงผลออกมาเป็นกราฟ
ลองปรับแต่งกราฟดู เช่น เปลี่ยนสี, เปลี่ยน Label, เพิ่ม Legend, หรืออะไรก็ตามที่เราอยากจะทำ Grafana มี Option ให้ปรับแต่งเยอะมาก ลองเล่นดูครับ
พอเราปรับแต่ง Panel จนพอใจแล้ว ก็กด Save Dashboard ตั้งชื่อ Dashboard แล้วกด Save แค่นี้เราก็มี Dashboard แรกของเราแล้ว!
Dashboard ที่เราสร้างขึ้นมานี้ เราสามารถ Share ให้คนอื่นดูได้, Export เป็น JSON File ได้, หรือจะ Import Dashboard ที่คนอื่นสร้างไว้ก็ได้ สะดวกมากๆ
Grafana ไม่ได้มีตัวเดียวในโลกนะ ยังมีเครื่องมือ Visualization อื่นๆ อีกเยอะแยะ แต่ละตัวก็มีข้อดีข้อเสียแตกต่างกันไป
สมัยผมทำร้านเน็ตฯ ผมเคยลองใช้หลายตัวเลย ทั้ง Zabbix, Nagios, Cacti แต่สุดท้ายก็มาจบที่ Grafana เพราะมันยืดหยุ่นที่สุด ใช้งานง่ายที่สุด และมี Community ที่แข็งแกร่งที่สุด
ลองดูตารางเปรียบเทียบเครื่องมือ Visualization ที่ผมเคยใช้มา:
| เครื่องมือ | ข้อดี | ข้อเสีย | ความยากในการใช้งาน |
|---|---|---|---|
| Grafana | ยืดหยุ่น, ใช้งานง่าย, Community ใหญ่ | ต้อง Config เองเยอะ | ปานกลาง |
| Zabbix | ครบวงจร, มี Agent ให้ติดตั้งง่าย | Interface ซับซ้อน, Config ยาก | ยาก |
| Nagios | เก่าแก่, Plugin เยอะ | Config ยากมาก, หน้าตาโบราณ | ยากมาก |
| Cacti | เน้น Network Monitoring | Feature น้อย, หน้าตาไม่สวย | ปานกลาง |
จะเห็นว่าแต่ละตัวก็มีข้อดีข้อเสียแตกต่างกันไป เลือกใช้ตัวที่เหมาะกับความต้องการของเราที่สุดครับ
สุดท้ายนี้ ผมหวังว่า Guide นี้จะเป็นประโยชน์กับน้องๆ นะครับ ลองเอาไปปรับใช้กับงานของตัวเองดู แล้วจะรู้ว่า Grafana เนี่ยมันเจ๋งจริงๆ ถ้ามีคำถามอะไรก็มาถามกันได้ใน SiamCafe Blog นะครับ
อย่าลืมติดตาม SiamCafe Blog เพื่ออ่านบทความ IT ดีๆ อีกนะครับ! แล้วเจอกันใหม่ครับ!
ทำ Grafana Dashboard มาก็เยอะ เจอปัญหามาก็แยะ สมัยผมทำร้านเน็ตนี่ โอ้โห! สารพัดปัญหาจริงๆ Dashboard ก็เหมือนกัน ถ้าออกแบบไม่ดี ชีวิตวุ่นวายแน่นอน
ผมเลยอยากจะมาแชร์เคล็ดลับที่ผมใช้ประจำ จะได้ไม่ต้องเสียเวลาลองผิดลองถูกเยอะ
อันนี้เจอบ่อย สาเหตุหลักๆ คือ Query ที่เราใช้มันซับซ้อนเกินไป หรือดึงข้อมูลเยอะเกินไป ลอง Optimize Query ดูครับ หรือลองใช้ Cache ช่วยดู อาจจะช่วยได้เยอะเลย สมัยก่อนผมเคยแก้ปัญหานี้ด้วยการทำ Summary Table ใน Database แล้วให้ Grafana ไปดึงข้อมูลจาก Summary Table แทน ดึงข้อมูลน้อยลง โหลดเร็วขึ้นเยอะ
Grafana alert คือการตั้งเงื่อนไขให้ Grafana แจ้งเตือนเมื่อข้อมูลผิดปกติ เช่น CPU Load เกิน 80% เราสามารถตั้งค่าให้ Grafana ส่ง Email หรือแจ้งเตือนผ่าน Slack ได้ ตอนทำร้านเน็ต ผมใช้ Grafana alert แจ้งเตือนเมื่อ Server ล่ม หรือ Internet หลุด มันช่วยให้ผมแก้ปัญหาได้ทันที
Datasource ที่ Grafana รองรับมีเยอะมาก เลือก Datasource ที่เหมาะสมกับข้อมูลที่เรามี ถ้าข้อมูลเราอยู่ใน Database ก็ใช้ Datasource ที่เป็น Database ถ้าข้อมูลอยู่ใน Metric Server ก็ใช้ Datasource ที่เป็น Metric Server ลองศึกษาดูครับว่า Datasource แต่ละตัวมันมีข้อดีข้อเสียยังไง
ถ้าอยากรู้เรื่อง Forex เพิ่มเติม ลองดู iCafeForex ได้นะครับ
Grafana Dashboard เป็นเครื่องมือที่มีประโยชน์มาก ถ้าเราใช้เป็น มันจะช่วยให้เรา Monitor ระบบต่างๆ ได้อย่างมีประสิทธิภาพ หวังว่าเคล็ดลับที่ผมแชร์ไป จะเป็นประโยชน์กับทุกคนนะครับ ลองเอาไปปรับใช้กันดู
อย่าลืมเข้าไปอ่านบทความอื่นๆ ใน SiamCafe Blog ด้วยนะครับ มีเรื่อง IT อีกเยอะแยะเลย