Prometheus คืออะไร
Tags: prometheus, devops, programming
Published: 2021-01-27 02:10:30

ตอนนี้กำลังหัดใช้ Prometheus อยู่ ก็เดี๋ยวจะบันทึกสิ่งที่ได้เรียนรู้ไปด้วย ซึ่งตอนนี้ก็อ่านจากเว็บทางการของ Prometheus เองคือลิ้งนี้ https://prometheus.io/docs/introduction/overview/

สำหรับวันนี้อ่านตรง Overview ซึ่งเล่าให้เราฟังก่อนว่า Prometheus นั้นคืออะไร

Prometheus คือระบบ monitoring และ alerting tookit ที่เริ่มพัฒนาโดยบริษัท SoundCloud ก่อน ซึ่งเขาก็ได้ opensource ตัวโปรเจ็คนี้ทำให้บริษัทอื่นๆก็ได้เอาไปประยุกต์ใช้งานด้วย ปัจจุบันตัวโปรเจ็คเองก็เป็นโครงการที่แยกตัวจาก SoundCloud ไม่ได้ขึ้นกับบริษัทใดๆโดยตรง

## Features

ความสามารถหลักของ Prometheus ที่ทำได้คือ
* เก็บข้อมูลในลักษณะ multi-dimensional ได้โดยจัดเก็บเป็น time series คือเรียกตามลำดับเวลาซึ่งแต่ละค่าที่ไหลเข้ามาก็จะเป็นแบบ key/value โดยคีย์คือ metric name นั่นเอง
* มีภาษาในการ query ข้อมูลของตัวเองชื่อ PromQL เพื่อ query ข้อมูล, aggregate ข้อมูลของ metric ที่เก็บไว้นั่นเอง
* storage ไม่จำเป็นต้องเป็นแบบ distributed แต่ละ server nodes ทำงานและเก็บข้อมูลได้ในตัวเอง
* การเก็บข้อมูลนั้นใช้ pull model over HTTP คือตัว Prometheus เองจะไปดึงข้อมูลจากเป้าหมายที่ต้องการรวบรวมเอง ไม่ต้องให้เป้าหมายส่งมาให้ Prometheus
* Prometheus จะหาเครื่องเป้าหมายผ่านทางระบบ service discovery หรือใช้วิธี config เองก็ได้
* รองรับระบบ graph และ dashboard หลายๆแบบ

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/ilfxuhv5gxw6exz03fdw.png)

# Components
architecture ของ Prometheus นั้นประกอบไปด้วย
* Prometheus server ซึ่งจะทำหน้าที่ไปดึงข้อมูลแล้วก็เก็บข้อมูล time series
* client libraries เป็น library ที่ช่วยให้ฝั่ง client เตรียมข้อมูลให้อยู่ในรูปแบบที่ Prometheus จะดึงมาเก็บได้
* push gateway ในบางงานที่ทำงานใช้งานสั้นๆแล้วปิดตัวเองลงไป คงไม่เหมาะที่จะให้ไป pull ดังนั้นจึงมี push gateway เพื่อให้งานสั้นๆพวกนี้ส่งข้อมูลมาเก็บไว้ที่ gateway ก่อนแล้วค่อยให้ Prometheus มา pull ไปอีกที
* exporters เป็นโปรแกรมที่จะช่วยแปลงข้อมูลของระบบอื่นๆที่มีอยู่แล้วให้มาอยู่ในรูปแบบของ metrics ที่ Prometheus เข้าใจได้ เช่น exporters ที่จะแปลงข้อมูลจากโปรแกรมพวก web server หรือ database ต่างๆ
* alertmanager เอาไว้ push alerts ไปหาระบบอื่นๆเช่น ส่ง email ส่ง messaging เป็นต้น
* Data visualization and export คือโปแกรมส่วนที่เป็น UI ที่มาดึงข้อมูลจาก Prometheus ไปแสดงผล ไม่ว่าจะเป็น Prometheus web UI เองหรือ Grafana เป็นต้น

# When does it fit?
- Prometheus ทำงานได้ดีกับข้อมูลที่เป็นตัวเองตามลำดับเวลา (purely numeric time series)
- ทำงานได้ดีกับทั้งการ monitor การทำงานของเครื่องเป็นหลัก หรือของ service เป็นหลัก
- ออกแบบให้ reliability แต่ละ node ของ Prometheus เป็นแบบ standalone ไม่จำเป็นต้องพึ่งพา network storage หรือ remote service อื่นๆในการทำงาน

# When does it not fit?
สิ่งที่ Prometheus ไม่เหมาะคือถ้าเราต้องการวัดข้อมูลทาง statistics แบบถูกต้อง 100% เช่นจะวัด per-request billing เพราะมันไม่ได้ถูกออกแบบมาให้เก็บข้อมูลรายละเอียดได้สมบูรณ์ 100% ขนาดนั้น แบบนั้นควรใช้เครื่องมือสำหรับรวบรวมและวิเคราะห์ข้อมูลโดยตรงดีกว่า ถ้าเป็นเรื่อง monitoring ค่อยยกให้เป็นหน้าที่ Prometheus

คร่าวๆประมาณนี้ครับสำหรับวันนี้ที่อ่านได้ อาจจะสรุปตกหล่นไปบ้างคงต้องไปอ่านเก็บรายละเอียดกันต่อเองที่เว็บของ Prometheus ครับ

<a href="https://www.buymeacoffee.com/weerasak" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" alt="Buy Me A Coffee" style="height: 60px !important;width: 217px !important;" ></a>