Prometheus ແມ່ນຫຍັງ ແລະເປັນຫຍັງທ່ານຕ້ອງການມັນ? Prometheus ເປັນລະບົບການຕິດຕາມທີ່ມີປະສິດທິພາບທີ່ເກັບກໍາແລະປະມວນຜົນຂໍ້ມູນຕົວເລກ (metrics) ຈາກຄໍາຮ້ອງສະຫມັກ. ມັນຊ່ວຍໃຫ້ທ່ານຕິດຕາມຕົວຊີ້ວັດທີ່ສໍາຄັນເຊັ່ນ: ຈໍານວນຂອງຄໍາຮ້ອງສະຫມັກທີ່ຈັດການໂດຍການບໍລິການຂອງທ່ານ. ເວລາຕອບສະຫນອງສໍາລັບແຕ່ລະຄໍາຮ້ອງຂໍ. ຫນ່ວຍຄວາມຈໍາແລະການນໍາໃຊ້ CPU. ຈໍານວນຄວາມຜິດພາດທີ່ເກີດຂື້ນໃນລະບົບ. ໂດຍການນໍາໃຊ້ Prometheus, ທ່ານສາມາດຕອບຄໍາຖາມທີ່ສໍາຄັນເຊັ່ນ: "ການບໍລິການຂອງຂ້ອຍເຮັດວຽກຢ່າງມີປະສິດທິພາບບໍ?" "ການຂັດຂວາງການປະຕິບັດແມ່ນຫຍັງ?" "ພວກເຮົາຈໍາເປັນຕ້ອງໄດ້ຂະຫຍາຍໂຄງສ້າງພື້ນຖານຂອງພວກເຮົາບໍ?" ແລະ Prometheus ລວບລວມ Metrics ແນວໃດ? ມີສອງວິທີຕົ້ນຕໍທີ່ Prometheus ລວບລວມຂໍ້ມູນ: - Prometheus ສອບຖາມການບໍລິການຢ່າງຈິງຈັງສໍາລັບຕົວຊີ້ວັດຂອງພວກເຂົາ. ຕົວແບບດຶງ - ການບໍລິການຊຸກຍູ້ການວັດແທກຂອງພວກເຂົາໄປຫາຕົວກາງ, ເຊິ່ງ Prometheus ຫຼັງຈາກນັ້ນເກັບກໍາ. ຮູບແບບການຊຸກຍູ້ (Pushgateway) ໃຫ້ທໍາລາຍພວກເຂົາລົງ. ດຶງຕົວແບບ ໃນ , 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 ຂອງມັນໄປຫາບໍລິການຕົວກາງທີ່ເອີ້ນວ່າ , ເຊິ່ງເກັບຮັກສາພວກມັນຈົນກ່ວາ Prometheus ດຶງພວກມັນ. ຮູບແບບການຊຸກຍູ້ ສົ່ງ Pushgateway ມັນເຮັດວຽກແນວໃດ (Push Model) ຄໍາຮ້ອງສະຫມັກຂອງທ່ານ ກັບ Pushgateway: pushes metrics 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 ເປັນປະໂຫຍດ ? ແທ້ໆ ທີ່ສໍາເລັດກ່ອນທີ່ Prometheus ສາມາດຂູດພວກມັນໄດ້. ວຽກງານທີ່ມີອາຍຸສັ້ນ (ວຽກ batch, ວຽກ cron) ທີ່ Prometheus ບໍ່ສາມາດເຂົ້າເຖິງການບໍລິການໂດຍກົງ. ຂໍ້ຈໍາກັດເຄືອຂ່າຍ (ອຸປະກອນ IoT, APIs ພາຍນອກ) ທີ່ບໍ່ສາມາດຂູດໄດ້ໂດຍກົງ. ແຫຼ່ງຂໍ້ມູນພາຍນອກ ເຈົ້າຄວນໃຊ້ຕົວແບບໃດ? ວິທີການ ດີທີ່ສຸດສຳລັບ... Pros ຂໍ້ເສຍ ດຶງ (ແນະນໍາ) ການບໍລິການເວັບໄຊຕ໌, APIs, ຄໍາຮ້ອງສະຫມັກທີ່ໃຊ້ເວລາດົນນານ ການຕັ້ງຄ່າງ່າຍດາຍ, ອີງໃສ່ຫນ້ອຍ, ທໍາຄວາມສະອາດອັດຕະໂນມັດ ບໍ່ເຫມາະສົມສໍາລັບວຽກງານທີ່ມີຊີວິດສັ້ນຫຼາຍ Push (Pushgateway) batch ວຽກ, ວຽກງານທີ່ບໍ່ມີການເຂົ້າເຖິງເຄືອຂ່າຍທີ່ຫມັ້ນຄົງ ອະນຸຍາດໃຫ້ຊຸກຍູ້ຂໍ້ມູນຈາກວຽກທີ່ມີຊີວິດສັ້ນ ຂໍ້ມູນຄົງຕົວ, ຄວາມສັບສົນເພີ່ມເຕີມ, ຄວາມສ່ຽງຂອງການເປັນຂອດ ເປັນຫຍັງ Push Model ຈຶ່ງບໍ່ເໝາະສົມ? ເຖິງແມ່ນວ່າ ແກ້ໄຂບັນຫາບາງຢ່າງ (ຕົວຢ່າງ, ຂະບວນການທີ່ມີຊີວິດສັ້ນທີ່ຢຸດກ່ອນທີ່ Prometheus ຈະຂູດພວກມັນ), ມັນ : Pushgateway ແນະນໍາບັນຫາໃຫມ່ຈໍານວນຫນຶ່ງ ຍາກທີ່ຈະຈັດການຂໍ້ມູນ stale ຖ້າການບໍລິການຕາຍ, ຕົວຊີ້ວັດເກົ່າຂອງມັນຍັງຄົງຢູ່ໃນ Pushgateway. Prometheus ບໍ່ມີທາງທີ່ຈະຮູ້ວ່າບໍລິການຍັງເຮັດວຽກຢູ່. ທ່ານຕ້ອງລຶບ metrics ທີ່ລ້າສະໄຫມດ້ວຍຕົນເອງໂດຍໃຊ້ ຫຼືກໍານົດນະໂຍບາຍຫມົດອາຍຸ. push.Delete(...) ຄວາມສັບສົນເພີ່ມເຕີມ ແທນທີ່ຈະເປັນ , ຕອນນີ້ທ່ານມີ . ການບໍລິການໂດຍກົງ → ການເຊື່ອມຕໍ່ Prometheus ບໍລິການ → Pushgateway → Prometheus Pushgateway ແມ່ນການເພິ່ງພາອາໄສພິເສດ, ເພີ່ມທະວີການບໍາລຸງຮັກສາ. ຂໍ້ຂັດແຍ່ງທີ່ເປັນໄປໄດ້ ຖ້າການບໍລິການຈໍານວນຫຼາຍຍູ້ metrics ເລື້ອຍໆ, Pushgateway ສາມາດກາຍເປັນ overwhelmed. ບໍ່ເຫມືອນກັບເຄື່ອງຂູດ Prometheus ໂດຍກົງ (ເຊິ່ງແຈກຢາຍການໂຫຼດ), ການຮ້ອງຂໍທັງຫມົດມົນຕີຕົວຢ່າງ Pushgateway ດຽວ. ບັນຫາຄວາມສອດຄ່ອງຂອງຂໍ້ມູນ ຖ້າຫຼາຍການບໍລິການຊຸກຍູ້ການວັດແທກທີ່ມີຊື່ດຽວກັນແຕ່ມີຄ່າທີ່ແຕກຕ່າງກັນ, ຂໍ້ມູນອາດຈະຖືກຂຽນທັບ, ນໍາໄປສູ່ຜົນໄດ້ຮັບທີ່ບໍ່ຖືກຕ້ອງ. ສະຫຼຸບ Prometheus ເປັນເຄື່ອງມືທີ່ມີປະສິດທິພາບແລະເຊື່ອຖືໄດ້ສໍາລັບການບໍລິການຕິດຕາມກວດກາ. ສໍາລັບຄໍາຮ້ອງສະຫມັກສ່ວນໃຫຍ່, ແມ່ນທາງເລືອກທີ່ດີທີ່ສຸດ - ມັນງ່າຍດາຍ, ມີປະສິດທິພາບ, ແລະຮັບປະກັນຂໍ້ມູນສົດໂດຍບໍ່ມີຄວາມສັບສົນເພີ່ມເຕີມ. ຢ່າງໃດກໍຕາມ, ຖ້າທ່ານກໍາລັງເຮັດວຽກກັບ ເຊັ່ນຫນ້າທີ່ Lambda ຫຼືວຽກ batch, ຜ່ານ Pushgateway ສາມາດເປັນປະໂຫຍດທີ່ຈະເກັບກໍາ metrics ກ່ອນທີ່ຂະບວນການຈະອອກໄປ. ຮູບແບບດຶງ ຂະບວນການທີ່ມີອາຍຸສັ້ນ ຮູບແບບການຊຸກຍູ້ ການເລືອກວິທີທີ່ຖືກຕ້ອງຮັບປະກັນການສັງເກດທີ່ດີກວ່າແລະການຮັກສາລະບົບຂອງທ່ານ. ເອົາໃຈ!