Prometheus ແມ່ນຫຍັງ ແລະເປັນຫຍັງທ່ານຕ້ອງການມັນ?
Prometheus ເປັນລະບົບການຕິດຕາມທີ່ມີປະສິດທິພາບທີ່ເກັບກໍາແລະປະມວນຜົນຂໍ້ມູນຕົວເລກ (metrics) ຈາກຄໍາຮ້ອງສະຫມັກ. ມັນຊ່ວຍໃຫ້ທ່ານຕິດຕາມຕົວຊີ້ວັດທີ່ສໍາຄັນເຊັ່ນ:
- ຈໍານວນຂອງຄໍາຮ້ອງສະຫມັກທີ່ຈັດການໂດຍການບໍລິການຂອງທ່ານ.
- ເວລາຕອບສະຫນອງສໍາລັບແຕ່ລະຄໍາຮ້ອງຂໍ.
- ຫນ່ວຍຄວາມຈໍາແລະການນໍາໃຊ້ CPU.
- ຈໍານວນຄວາມຜິດພາດທີ່ເກີດຂື້ນໃນລະບົບ.
ໂດຍການນໍາໃຊ້ Prometheus, ທ່ານສາມາດຕອບຄໍາຖາມທີ່ສໍາຄັນເຊັ່ນ:
"ການບໍລິການຂອງຂ້ອຍເຮັດວຽກຢ່າງມີປະສິດທິພາບບໍ?"
"ການຂັດຂວາງການປະຕິບັດແມ່ນຫຍັງ?"
"ພວກເຮົາຈໍາເປັນຕ້ອງໄດ້ຂະຫຍາຍໂຄງສ້າງພື້ນຖານຂອງພວກເຮົາບໍ?"
ແລະ Prometheus ລວບລວມ Metrics ແນວໃດ?
ມີສອງວິທີຕົ້ນຕໍທີ່ Prometheus ລວບລວມຂໍ້ມູນ:
- ຕົວແບບດຶງ - Prometheus ສອບຖາມການບໍລິການຢ່າງຈິງຈັງສໍາລັບຕົວຊີ້ວັດຂອງພວກເຂົາ.
- ຮູບແບບການຊຸກຍູ້ (Pushgateway) - ການບໍລິການຊຸກຍູ້ການວັດແທກຂອງພວກເຂົາໄປຫາຕົວກາງ, ເຊິ່ງ Prometheus ຫຼັງຈາກນັ້ນເກັບກໍາ.
ໃຫ້ທໍາລາຍພວກເຂົາລົງ.
ດຶງຕົວແບບ
ໃນ ຮູບແບບການດຶງ , Prometheus ດຶງເອົາ metrics ຈາກຄໍາຮ້ອງສະຫມັກຂອງທ່ານຜ່ານ HTTP (ເຊັ່ນ: http://your-service:8080/metrics
).
ນີ້ແມ່ນວິທີການເລີ່ມຕົ້ນ ແລະໃຊ້ຫຼາຍທີ່ສຸດ.
ການຕິດຕັ້ງ Prometheus ກັບ Golang (Pull Model)
ຕິດຕັ້ງຫ້ອງສະຫມຸດທີ່ຈໍາເປັນ:
go get github.com/prometheus/client_golang/prometheus go get github.com/prometheus/client_golang/prometheus/promhttp
ກໍານົດການວັດແທກຂອງທ່ານ (ເຊັ່ນ: ການນັບຄໍາຮ້ອງຂໍ HTTP):
import ( "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promauto" ) var httpRequestsTotal = promauto.NewCounter(prometheus.CounterOpts{ Name: "http_requests_total", Help: "Total number of HTTP requests", })
ເປີດເຜີຍ ຈຸດສິ້ນສຸດ
/metrics
:import ( "net/http" "github.com/prometheus/client_golang/prometheus/promhttp" ) func main() { http.Handle("/metrics", promhttp.Handler()) }
ຕັ້ງຄ່າ Prometheus ເພື່ອຂູດ metrics ຈາກການບໍລິການຂອງທ່ານ ໃນ
prometheus.yml
:scrape_configs: - job_name: "example_service" static_configs: - targets: ["localhost:8080"]
ດຽວນີ້, Prometheus ຈະສອບຖາມ http://localhost:8080/metrics
ໂດຍອັດຕະໂນມັດທຸກໆສອງສາມວິນາທີເພື່ອເກັບກຳຂໍ້ມູນ.
ເປັນຫຍັງຕົວແບບດຶງຈຶ່ງເປັນທີ່ມັກ?
- ຄວາມງ່າຍດາຍ - Prometheus ຄວບຄຸມຕາຕະລາງການຂູດແລະຄວາມຖີ່.
- ຈຸດຂອງຄວາມລົ້ມເຫຼວຫນ້ອຍລົງ – ບໍ່ຈໍາເປັນຕ້ອງມີການບໍລິການເພີ່ມເຕີມເພື່ອຮັບ metrics.
- ການທໍາຄວາມສະອາດອັດຕະໂນມັດ - ຖ້າການບໍລິການຢຸດການຕອບສະຫນອງ, Prometheus ພຽງແຕ່ຢຸດການຮັບຂໍ້ມູນ, ຫຼີກເວັ້ນການວັດແທກ stale.
Push Model (ວິທີການ Pushgateway)
ໃນ ຮູບແບບການຊຸກຍູ້ , ການບໍລິການ ສົ່ງ metrics ຂອງມັນໄປຫາບໍລິການຕົວກາງທີ່ເອີ້ນວ່າ Pushgateway , ເຊິ່ງເກັບຮັກສາພວກມັນຈົນກ່ວາ Prometheus ດຶງພວກມັນ.
ມັນເຮັດວຽກແນວໃດ (Push Model)
ຄໍາຮ້ອງສະຫມັກຂອງທ່ານ pushes metrics ກັບ Pushgateway:
import ( "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/push" ) func main() { registry := prometheus.NewRegistry() jobCounter := prometheus.NewCounter(prometheus.CounterOpts{ Name: "job_execution_count", Help: "Number of executed jobs", }) registry.MustRegister(jobCounter) jobCounter.Inc() err := push.New("http://localhost:9090", "my_service_or_job"). Collector(jobCounter). Grouping("instance", "worker_1"). Push() if err != nil { panic(err) } }
ຕັ້ງຄ່າ Prometheus ເພື່ອເກັບກໍາຂໍ້ມູນຈາກ Pushgateway:
scrape_configs: - job_name: "pushgateway" static_configs: - targets: ["localhost:9091"]
ເມື່ອໃດທີ່ Push Model ເປັນປະໂຫຍດ ແທ້ໆ ?
- ວຽກງານທີ່ມີອາຍຸສັ້ນ (ວຽກ batch, ວຽກ cron) ທີ່ສໍາເລັດກ່ອນທີ່ Prometheus ສາມາດຂູດພວກມັນໄດ້.
- ຂໍ້ຈໍາກັດເຄືອຂ່າຍ ທີ່ Prometheus ບໍ່ສາມາດເຂົ້າເຖິງການບໍລິການໂດຍກົງ.
- ແຫຼ່ງຂໍ້ມູນພາຍນອກ (ອຸປະກອນ IoT, APIs ພາຍນອກ) ທີ່ບໍ່ສາມາດຂູດໄດ້ໂດຍກົງ.
ເຈົ້າຄວນໃຊ້ຕົວແບບໃດ?
ວິທີການ | ດີທີ່ສຸດສຳລັບ... | Pros | ຂໍ້ເສຍ |
---|---|---|---|
ດຶງ (ແນະນໍາ) | ການບໍລິການເວັບໄຊຕ໌, APIs, ຄໍາຮ້ອງສະຫມັກທີ່ໃຊ້ເວລາດົນນານ | ການຕັ້ງຄ່າງ່າຍດາຍ, ອີງໃສ່ຫນ້ອຍ, ທໍາຄວາມສະອາດອັດຕະໂນມັດ | ບໍ່ເຫມາະສົມສໍາລັບວຽກງານທີ່ມີຊີວິດສັ້ນຫຼາຍ |
Push (Pushgateway) | batch ວຽກ, ວຽກງານທີ່ບໍ່ມີການເຂົ້າເຖິງເຄືອຂ່າຍທີ່ຫມັ້ນຄົງ | ອະນຸຍາດໃຫ້ຊຸກຍູ້ຂໍ້ມູນຈາກວຽກທີ່ມີຊີວິດສັ້ນ | ຂໍ້ມູນຄົງຕົວ, ຄວາມສັບສົນເພີ່ມເຕີມ, ຄວາມສ່ຽງຂອງການເປັນຂອດ |
ເປັນຫຍັງ Push Model ຈຶ່ງບໍ່ເໝາະສົມ?
ເຖິງແມ່ນວ່າ Pushgateway ແກ້ໄຂບັນຫາບາງຢ່າງ (ຕົວຢ່າງ, ຂະບວນການທີ່ມີຊີວິດສັ້ນທີ່ຢຸດກ່ອນທີ່ Prometheus ຈະຂູດພວກມັນ), ມັນ ແນະນໍາບັນຫາໃຫມ່ຈໍານວນຫນຶ່ງ :
- ຍາກທີ່ຈະຈັດການຂໍ້ມູນ stale
ຖ້າການບໍລິການຕາຍ, ຕົວຊີ້ວັດເກົ່າຂອງມັນຍັງຄົງຢູ່ໃນ Pushgateway.
Prometheus ບໍ່ມີທາງທີ່ຈະຮູ້ວ່າບໍລິການຍັງເຮັດວຽກຢູ່.
ທ່ານຕ້ອງລຶບ metrics ທີ່ລ້າສະໄຫມດ້ວຍຕົນເອງໂດຍໃຊ້
push.Delete(...)
ຫຼືກໍານົດນະໂຍບາຍຫມົດອາຍຸ.
- ຄວາມສັບສົນເພີ່ມເຕີມ
ແທນທີ່ຈະເປັນ ການບໍລິການໂດຍກົງ → ການເຊື່ອມຕໍ່ Prometheus , ຕອນນີ້ທ່ານມີ ບໍລິການ → Pushgateway → Prometheus .
Pushgateway ແມ່ນການເພິ່ງພາອາໄສພິເສດ, ເພີ່ມທະວີການບໍາລຸງຮັກສາ.
- ຂໍ້ຂັດແຍ່ງທີ່ເປັນໄປໄດ້
ຖ້າການບໍລິການຈໍານວນຫຼາຍຍູ້ metrics ເລື້ອຍໆ, Pushgateway ສາມາດກາຍເປັນ overwhelmed.
ບໍ່ເຫມືອນກັບເຄື່ອງຂູດ Prometheus ໂດຍກົງ (ເຊິ່ງແຈກຢາຍການໂຫຼດ), ການຮ້ອງຂໍທັງຫມົດມົນຕີຕົວຢ່າງ Pushgateway ດຽວ.
- ບັນຫາຄວາມສອດຄ່ອງຂອງຂໍ້ມູນ
- ຖ້າຫຼາຍການບໍລິການຊຸກຍູ້ການວັດແທກທີ່ມີຊື່ດຽວກັນແຕ່ມີຄ່າທີ່ແຕກຕ່າງກັນ, ຂໍ້ມູນອາດຈະຖືກຂຽນທັບ, ນໍາໄປສູ່ຜົນໄດ້ຮັບທີ່ບໍ່ຖືກຕ້ອງ.
ສະຫຼຸບ
Prometheus ເປັນເຄື່ອງມືທີ່ມີປະສິດທິພາບແລະເຊື່ອຖືໄດ້ສໍາລັບການບໍລິການຕິດຕາມກວດກາ. ສໍາລັບຄໍາຮ້ອງສະຫມັກສ່ວນໃຫຍ່, ຮູບແບບດຶງ ແມ່ນທາງເລືອກທີ່ດີທີ່ສຸດ - ມັນງ່າຍດາຍ, ມີປະສິດທິພາບ, ແລະຮັບປະກັນຂໍ້ມູນສົດໂດຍບໍ່ມີຄວາມສັບສົນເພີ່ມເຕີມ. ຢ່າງໃດກໍຕາມ, ຖ້າທ່ານກໍາລັງເຮັດວຽກກັບ ຂະບວນການທີ່ມີອາຍຸສັ້ນ ເຊັ່ນຫນ້າທີ່ Lambda ຫຼືວຽກ batch, ຮູບແບບການຊຸກຍູ້ ຜ່ານ Pushgateway ສາມາດເປັນປະໂຫຍດທີ່ຈະເກັບກໍາ metrics ກ່ອນທີ່ຂະບວນການຈະອອກໄປ.
ການເລືອກວິທີທີ່ຖືກຕ້ອງຮັບປະກັນການສັງເກດທີ່ດີກວ່າແລະການຮັກສາລະບົບຂອງທ່ານ.
ເອົາໃຈ!