ใช้ Prometheus, Grafana ทำ Monitoring อย่างง่าย

Tossapon Nuanchuay
ntossapo
Published in
2 min readMay 1, 2017

วันนี้จะนำเสนอวิธีการใช้ 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 ทำได้ ก็จะได้กราฟออกมาดังนี้

Github: https://github.com/tspn/psu-project-fb

--

--