Hardware
น้องๆ เคยเจอปัญหา Server แฮงค์ตอนตี 3 มั้ย? สมัยผมทำร้านเน็ตนี่เจอประจำเลยนะ! ลูกค้าโวยวาย เล่นเกมไม่ได้ เสียรายได้ไปอีก เพิ่งรู้ตอนนั้นแหละว่าการ Monitoring ระบบสำคัญขนาดไหน
Prometheus กับ Grafana เนี่ยแหละ คือพระเอกขี่ม้าขาวที่จะมาช่วยเราแก้ปัญหาพวกนี้ Prometheus จะคอยเก็บข้อมูล (metrics) ต่างๆ ของระบบเรา ไม่ว่าจะเป็น CPU Usage, Memory, Disk I/O, Network Traffic ส่วน Grafana ก็จะเอาข้อมูลที่ Prometheus เก็บไว้มาแสดงผลเป็นกราฟสวยๆ ให้เราดูง่ายๆ
พูดง่ายๆ คือ Prometheus เป็นคนเก็บข้อมูล ส่วน Grafana เป็นคนเอาข้อมูลมาโชว์นั่นเอง แล้วทำไมมันถึงสำคัญน่ะเหรอ? ก็เพราะว่ามันช่วยให้เราเห็นภาพรวมของระบบ เข้าใจปัญหาที่เกิดขึ้น และแก้ไขได้ทันท่วงทีไงล่ะ ถ้าไม่มี Monitoring ก็เหมือนขับรถโดยไม่ดูไมล์วัดความเร็ว จะรู้ได้ไงว่ากำลังจะเครื่องพัง!
Prometheus เป็นระบบ Monitoring แบบ Open Source ที่เน้นการเก็บข้อมูลแบบ Time Series Data พูดง่ายๆ คือเก็บข้อมูลพร้อม Timestamp นั่นเอง สมัยก่อนผมใช้ MRTG แต่ Prometheus นี่มัน Advance กว่าเยอะเลยนะ
มันจะไปดึงข้อมูล (Scrape) จากเป้าหมาย (Target) ที่เรากำหนด เช่น Server, Application, Database แล้วเอามาเก็บไว้ในฐานข้อมูลของมันเอง
Grafana เป็นเครื่องมือ Visualization ที่เอาข้อมูลจากแหล่งต่างๆ มาแสดงผลเป็น Dashboard สวยๆ เราสามารถสร้างกราฟ, Gauge, Table หรืออะไรก็ได้ที่เราต้องการ
Grafana รองรับ DataSource หลายชนิด ไม่ว่าจะเป็น Prometheus, InfluxDB, Graphite, Elasticsearch ดังนั้นเราสามารถเอาข้อมูลจากแหล่งต่างๆ มารวมกันใน Dashboard เดียวได้เลย เจ๋งป่ะล่ะ?
Metrics คือข้อมูลที่เราต้องการ Monitor เช่น CPU Usage, Memory Usage, Disk I/O, Network Traffic แต่ละ Metrics จะมี Type ที่แตกต่างกัน เช่น Counter, Gauge, Histogram, Summary ซึ่งแต่ละ Type ก็มีวิธีการใช้งานที่แตกต่างกันไป
สมัยผมเริ่มทำร้านเน็ตใหม่ๆ ไม่ค่อยเข้าใจเรื่องพวกนี้เท่าไหร่ ก็ลองผิดลองถูกไปเรื่อยๆ จนเริ่มเข้าใจหลักการทำงานของมันจริงๆ
การเริ่มต้นใช้งาน Prometheus กับ Grafana ไม่ยากอย่างที่คิดนะ แค่มี Docker ก็แทบจะเสร็จแล้ว สมัยผมต้องลง Linux เอง Config เอง ปวดหัวสุดๆ เดี๋ยวนี้สบายกว่าเยอะ
สร้างไฟล์ docker-compose.yml แล้วใส่ Code นี้ลงไป:
version: "3.9"
services:
prometheus:
image: prom/prometheus:latest
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
depends_on:
- prometheus
สร้างไฟล์ prometheus.yml แล้วใส่ Config นี้ลงไป:
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
จากนั้นรันคำสั่ง docker-compose up -d แค่นี้ Prometheus กับ Grafana ก็พร้อมใช้งานแล้ว
เราต้อง Config Prometheus ให้รู้ว่าจะไปดึงข้อมูลจากที่ไหนบ้าง ซึ่งเราจะทำผ่านไฟล์ prometheus.yml นั่นแหละ
ตัวอย่างเช่น ถ้าเราต้องการ Monitor Node Exporter (เครื่องมือที่เอาไว้เก็บข้อมูลของ Server) เราก็ต้องเพิ่ม Target เข้าไปใน prometheus.yml แบบนี้:
- job_name: 'node_exporter'
static_configs:
- targets: ['localhost:9100']
อย่าลืมติดตั้ง Node Exporter บน Server ของเราด้วยนะ
หลังจากที่ Prometheus เก็บข้อมูลได้แล้ว เราก็มาสร้าง Dashboard ใน Grafana กัน เริ่มจาก Login เข้า Grafana ผ่าน Browser (http://localhost:3000) แล้ว Add Prometheus เป็น DataSource
จากนั้นก็สร้าง Dashboard ใหม่ แล้ว Add Panel เข้าไป เลือก DataSource เป็น Prometheus แล้วเขียน Query เพื่อดึงข้อมูลที่เราต้องการมาแสดงผล
Query ที่ใช้ใน Prometheus จะเป็นภาษา PromQL ซึ่งต้องศึกษาเพิ่มเติมหน่อย แต่ไม่ต้องกังวล SiamCafe Blog เรามีบทความสอน PromQL ด้วยนะ!
นอกจาก Prometheus กับ Grafana แล้ว ยังมีเครื่องมือ Monitoring อื่นๆ อีกมากมาย เช่น Nagios, Zabbix, Datadog แต่ละตัวก็มีข้อดีข้อเสียแตกต่างกันไป
Nagios กับ Zabbix นี่เก่าแก่พอๆ กับร้านเน็ตผมเลย สมัยก่อนฮิตมาก แต่ Config ยาก Maintenance ก็ลำบาก Datadog นี่ใช้ง่ายดี แต่ราคาค่อนข้างสูง
Prometheus กับ Grafana เป็น Open Source ใช้งานฟรี แถมยัง Flexible ปรับแต่งได้เยอะ เหมาะกับคนที่ชอบ DIY แต่ก็ต้องศึกษาพอสมควรนะ SiamCafe Blog มีบทความเปรียบเทียบเครื่องมือ Monitoring ด้วย ลองไปอ่านดูนะ
| เครื่องมือ | ข้อดี | ข้อเสีย |
|---|---|---|
| Prometheus + Grafana | Open Source, Flexible, ปรับแต่งได้เยอะ | ต้องศึกษา PromQL, Config ค่อนข้างซับซ้อน |
| Nagios | เก่าแก่, มี Plugin เยอะ | Config ยาก, UI ไม่สวย |
| Zabbix | ครบเครื่อง, รองรับ Agent หลาย Platform | Config ยาก, กิน Resource เยอะ |
| Datadog | ใช้งานง่าย, มี Feature ครบ | ราคาแพง |
สมัยผมทำร้านเน็ต SiamCafe ช่วงแรกๆ เรื่อง Hardware นี่ปวดหัวสุดๆ เพราะเราต้องเลือกของที่ทนทาน ราคาไม่แรง และประสิทธิภาพต้องดีพอที่จะรันเกมออนไลน์ยอดฮิตในยุคนั้นได้
ถ้า Hardware ไม่ดี นอกจากจะทำให้ลูกค้าเล่นเกมกระตุกแล้ว ยังทำให้เราต้องเสียเวลาซ่อมบำรุงบ่อยๆ อีกด้วย เสียทั้งเงิน เสียทั้งเวลา
หลังจากลองผิดลองถูกมาเยอะ ผมก็สรุป Best Practices ในการเลือก Hardware สำหรับ Monitoring Prometheus Grafana Stack ได้ดังนี้
จำไว้เลยว่า "ถูกและดี" ไม่มีอยู่จริง ต้องบาลานซ์ระหว่างราคาและความทนทาน
CPU คือหัวใจหลักของการประมวลผลข้อมูล ถ้า CPU แรงไม่พอ Grafana ก็จะแสดงผลช้า ทำให้เราพลาดข้อมูลสำคัญได้
สมัยก่อนผมใช้ CPU Intel Celeron ก็ว่าแรงแล้วนะ แต่พอ Grafana เริ่มซับซ้อนขึ้น ก็ต้องอัพเกรดเป็น Core i3, i5 ถึงจะเอาอยู่
ถ้า Monitoring แค่ Server ไม่กี่ตัว CPU ระดับกลางๆ ก็พอ แต่ถ้าต้อง Monitoring เป็นร้อยๆ Server ต้อง CPU ระดับ Server Grade เท่านั้น
RAM คือหน่วยความจำชั่วคราวที่ใช้ในการประมวลผลข้อมูล ถ้า RAM น้อยเกินไป Grafana ก็จะ Swap ข้อมูลลง Harddisk ทำให้ช้าลงอย่างเห็นได้ชัด
ผมเคยเจอเคสที่ลูกค้าบ่นว่า Grafana ช้ามาก พอเข้าไปดู RAM เหลือแค่ 1 GB แทบจะร้องไห้
ขั้นต่ำควรมี RAM 8 GB แต่ถ้า Monitoring Server เยอะๆ หรือใช้ Dashboard ที่ซับซ้อน ควรมี 16 GB ขึ้นไป
Prometheus จะเก็บข้อมูล Time Series ไว้ใน Storage ดังนั้น Storage ต้องเร็ว แรง และทนทาน
สมัยก่อนใช้ Harddisk จานหมุนธรรมดา ก็พอใช้ได้ แต่พอเปลี่ยนมาใช้ SSD ชีวิตดีขึ้นเยอะ Grafana ตอบสนองเร็วขึ้นอย่างเห็นได้ชัด
ถ้ามีงบประมาณ ควรใช้ NVMe SSD เพราะเร็วกว่า SATA SSD หลายเท่า
อย่าลืมทำ RAID เพื่อป้องกันข้อมูลสูญหายด้วยนะ
Network Card คือช่องทางที่ใช้รับส่งข้อมูลระหว่าง Server กับ Grafana ถ้า Network Card ช้า ก็จะทำให้ Grafana แสดงผลช้าตามไปด้วย
สมัยนี้ Network Card Gigabit เป็นมาตรฐานแล้ว แต่ก็ควรตรวจสอบให้แน่ใจว่า Network Card รองรับความเร็ว Gigabit จริงๆ
ถ้า Monitoring Server ที่อยู่คนละ Network ควรตรวจสอบ Bandwidth ของ Network ด้วย
Spec ขั้นต่ำสำหรับ Monitoring Server ไม่เกิน 10 ตัว:
Cloud Server เหมาะสำหรับคนที่ต้องการความยืดหยุ่นและ Scalability แต่ Hardware Server เหมาะสำหรับคนที่ต้องการความปลอดภัยและควบคุม Hardware ได้อย่างเต็มที่
ถ้าเริ่มต้น แนะนำให้ใช้ Cloud Server ก่อน แล้วค่อยย้ายไป Hardware Server เมื่อต้องการ Scalability ที่สูงขึ้น
Linux Distro ที่นิยมใช้กันในการ Monitoring คือ Ubuntu, CentOS, และ Debian
ผมแนะนำให้เลือก Linux Distro ที่คุ้นเคย เพราะจะทำให้การติดตั้งและ Config ง่ายขึ้น
สมัยผมทำร้านเน็ต ใช้แต่ CentOS เพราะมันเสถียรดี
การเลือก Hardware ที่เหมาะสมสำหรับ Monitoring Prometheus Grafana Stack เป็นเรื่องสำคัญที่ไม่ควรมองข้าม
ควรพิจารณา Load ของระบบ, งบประมาณ, และความต้องการในการ Scalability ก่อนตัดสินใจเลือก Hardware
อย่าลืม Backup ข้อมูลเป็นประจำ เพื่อป้องกันข้อมูลสูญหาย
หวังว่าบทความนี้จะเป็นประโยชน์กับทุกคนนะครับ ติดตามบทความอื่นๆ ได้ที่ SiamCafe Blog และถ้าสนใจเรื่อง Forex ลองดู iCafeForex นะครับ