ใช้ Prometheus, Grafana ทำ Monitoring อย่างง่าย
วันนี้จะนำเสนอวิธีการใช้ prometheus และ grafana ในการทำระบบ monitoring อย่างง่าย
โดย prometheus และ grafana จะใช้ docker image ที่มีอยู่แล้วเพื่อให้ง่ายและไม่หัวร้อนตอนติดตั้ง
ขั้นตอนแรกคือสร้าง prometheus container ขึ้นมา โดยจะใช้ image ของ prom/prometheus
docker run — name prometheus -d -p 9090:9090 -v /root/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
เรา mount volumn ของไฟล์ prometheus.yml ได้ เขียนไว้ดังนี้
ตาม config นี้ prometheus จะดึงข้อมูลที่ localhost:9095 ที่ endpoint /metrics ทุกๆ 5 วินาที
อีกอย่างที่สำคัญคือ เราควรจะ mount volumn ที่เก็บข้อมูลออกมาด้วยนะ ไม่ควรจะให้ข้อมูลอยู่ใน container
เราได้ prometheus แล้ว
ต่อไปคือ grafana ก็ใช้ docker image ที่มีอยู่แล้วเหมือนกัน
จะใช้ image grafana/grafana ซึ่งใช้งานดังนี้
docker run -i -p 3000:3000 \
-e "GF_SERVER_ROOT_URL=http://coepkt.org" \
-e "GF_SECURITY_ADMIN_PASSWORD=password \
grafana/grafana
เข้าใช้งานผ่าน port 3000 username: admin และ password ตามที่ได้กำหนดไว้ตอนสร้าง container
เข้าไป setup datasource ใน grafana โดยเพิ่ม datasource prometheus ดังนี้
จากนั้นลองสร้างแอปพลิเคชันง่ายๆ โดยใช้ nodejs เพื่อให้ prometheus มาดึงข้อมูลไปเก็บ
การใช้งาน nodejs กับ prometheus เราสามารถใช้งาน prometheus-client ได้
จากไฟล์ m.js คือการดึงข้อมูลจาก mongodb และ เซ็ตค่า numberOfShare เมื่อเรารันแอพนี้ และเข้าไปที่ host:9095/metrics จะได้เห็น
# HELP psu_project_post_count number of post count in facebook
# TYPE psu_project_post_count counter
psu_project_post_count{} 92
# HELP psu_project_post_fetcher_count number of post fetcher
# TYPE psu_project_post_fetcher_count counter
psu_project_post_fetcher_count{} 84
# HELP psu_project_api_request_per_sec api request/sec
# TYPE psu_project_api_request_per_sec counter
psu_project_api_request_per_sec{} 2
# HELP psu_project_like_count number of like
# TYPE psu_project_like_count gauge
psu_project_like_count{period="10sec"} 2063
# HELP psu_project_love_count number of love
# TYPE psu_project_love_count gauge
psu_project_love_count{period="10sec"} 97
# HELP psu_project_wow_count number of wow
# TYPE psu_project_wow_count gauge
psu_project_wow_count{period="10sec"} 55
# HELP psu_project_haha_count number of haha
# TYPE psu_project_haha_count gauge
psu_project_haha_count{period="10sec"} 1
# HELP psu_project_share_count number of share
# TYPE psu_project_share_count gauge
psu_project_share_count{period="10sec"} 2145
prometheus ก็จะมาดึงข้อมูลจากที่นี้ไปเก็บไว้ ตามที่เขียนไว้ใน prometheus.yml
จากนั้นเข้าไปสร้างกราฟที่ grafana ทดลอง query หลายแบบ ตามที่ prometheus ทำได้ ก็จะได้กราฟออกมาดังนี้