129 ການອ່ານ

ການຕິດຕາມການບໍລິການ Golang ກັບ Prometheus: ການເລືອກລະຫວ່າງຕົວແບບດຶງແລະການຊຸກຍູ້

ໂດຍ Ilia Ivankin5m2025/03/02
Read on Terminal Reader

ຍາວເກີນໄປ; ອ່ານ

Prometheus ເປັນລະບົບການຕິດຕາມທີ່ມີປະສິດທິພາບທີ່ເກັບກໍາແລະປະມວນຜົນຂໍ້ມູນຕົວເລກ (metrics) ຈາກຄໍາຮ້ອງສະຫມັກ. ມັນຊ່ວຍໃຫ້ທ່ານຕິດຕາມຕົວຊີ້ວັດທີ່ສໍາຄັນເຊັ່ນ: ຈໍານວນຄໍາຮ້ອງຂໍທີ່ຈັດການໂດຍການບໍລິການຂອງທ່ານ. ເວລາຕອບສະຫນອງສໍາລັບແຕ່ລະຄໍາຮ້ອງຂໍ. ຫນ່ວຍຄວາມຈໍາແລະການນໍາໃຊ້ CPU. ຄວາມຜິດພາດທີ່ເກີດຂຶ້ນໃນລະບົບ.
featured image - ການຕິດຕາມການບໍລິການ Golang ກັບ Prometheus: ການເລືອກລະຫວ່າງຕົວແບບດຶງແລະການຊຸກຍູ້
Ilia Ivankin HackerNoon profile picture
0-item
1-item

Prometheus ແມ່ນຫຍັງ ແລະເປັນຫຍັງທ່ານຕ້ອງການມັນ?

Prometheus ເປັນລະບົບການຕິດຕາມທີ່ມີປະສິດທິພາບທີ່ເກັບກໍາແລະປະມວນຜົນຂໍ້ມູນຕົວເລກ (metrics) ຈາກຄໍາຮ້ອງສະຫມັກ. ມັນຊ່ວຍໃຫ້ທ່ານຕິດຕາມຕົວຊີ້ວັດທີ່ສໍາຄັນເຊັ່ນ:


  • ຈໍາ​ນວນ​ຂອງ​ຄໍາ​ຮ້ອງ​ສະ​ຫມັກ​ທີ່​ຈັດ​ການ​ໂດຍ​ການ​ບໍ​ລິ​ການ​ຂອງ​ທ່ານ​.
  • ເວລາຕອບສະຫນອງສໍາລັບແຕ່ລະຄໍາຮ້ອງຂໍ.
  • ຫນ່ວຍຄວາມຈໍາແລະການນໍາໃຊ້ CPU.
  • ຈໍານວນຄວາມຜິດພາດທີ່ເກີດຂື້ນໃນລະບົບ.


ໂດຍການນໍາໃຊ້ Prometheus, ທ່ານສາມາດຕອບຄໍາຖາມທີ່ສໍາຄັນເຊັ່ນ:

  • "ການບໍລິການຂອງຂ້ອຍເຮັດວຽກຢ່າງມີປະສິດທິພາບບໍ?"

  • "ການຂັດຂວາງການປະຕິບັດແມ່ນຫຍັງ?"

  • "ພວກເຮົາຈໍາເປັນຕ້ອງໄດ້ຂະຫຍາຍໂຄງສ້າງພື້ນຖານຂອງພວກເຮົາບໍ?"


ແລະ Prometheus ລວບລວມ Metrics ແນວໃດ?

ມີສອງວິທີຕົ້ນຕໍທີ່ Prometheus ລວບລວມຂໍ້ມູນ:

  1. ຕົວແບບດຶງ - Prometheus ສອບຖາມການບໍລິການຢ່າງຈິງຈັງສໍາລັບຕົວຊີ້ວັດຂອງພວກເຂົາ.
  2. ຮູບແບບການຊຸກຍູ້ (Pushgateway) - ການບໍລິການຊຸກຍູ້ການວັດແທກຂອງພວກເຂົາໄປຫາຕົວກາງ, ເຊິ່ງ Prometheus ຫຼັງຈາກນັ້ນເກັບກໍາ.


ໃຫ້ທໍາລາຍພວກເຂົາລົງ.


ດຶງຕົວແບບ

ໃນ ຮູບແບບການດຶງ , Prometheus ດຶງເອົາ metrics ຈາກຄໍາຮ້ອງສະຫມັກຂອງທ່ານຜ່ານ HTTP (ເຊັ່ນ: http://your-service:8080/metrics ).

ນີ້ແມ່ນວິທີການເລີ່ມຕົ້ນ ແລະໃຊ້ຫຼາຍທີ່ສຸດ.

ການຕິດຕັ້ງ Prometheus ກັບ Golang (Pull Model)

  1. ຕິດ​ຕັ້ງ​ຫ້ອງ​ສະ​ຫມຸດ​ທີ່​ຈໍາ​ເປັນ​:

     go get github.com/prometheus/client_golang/prometheus go get github.com/prometheus/client_golang/prometheus/promhttp


  2. ກໍານົດການວັດແທກຂອງທ່ານ (ເຊັ່ນ: ການນັບຄໍາຮ້ອງຂໍ 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", })


  3. ເປີດເຜີຍ ຈຸດສິ້ນສຸດ /metrics :

     import ( "net/http" "github.com/prometheus/client_golang/prometheus/promhttp" ) func main() { http.Handle("/metrics", promhttp.Handler()) }


  4. ຕັ້ງຄ່າ 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)

  1. ຄໍາຮ້ອງສະຫມັກຂອງທ່ານ 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) } }


  2. ຕັ້ງຄ່າ 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 ຈະຂູດພວກມັນ), ມັນ ແນະນໍາບັນຫາໃຫມ່ຈໍານວນຫນຶ່ງ :


  1. ຍາກທີ່ຈະຈັດການຂໍ້ມູນ stale
    • ຖ້າການບໍລິການຕາຍ, ຕົວຊີ້ວັດເກົ່າຂອງມັນຍັງຄົງຢູ່ໃນ Pushgateway.

    • Prometheus ບໍ່ມີທາງທີ່ຈະຮູ້ວ່າບໍລິການຍັງເຮັດວຽກຢູ່.

    • ທ່ານຕ້ອງລຶບ metrics ທີ່ລ້າສະໄຫມດ້ວຍຕົນເອງໂດຍໃຊ້ push.Delete(...) ຫຼືກໍານົດນະໂຍບາຍຫມົດອາຍຸ.


  2. ຄວາມສັບສົນເພີ່ມເຕີມ
    • ແທນທີ່ຈະເປັນ ການບໍລິການໂດຍກົງ → ການເຊື່ອມຕໍ່ Prometheus , ຕອນນີ້ທ່ານມີ ບໍລິການ → Pushgateway → Prometheus .

    • Pushgateway ແມ່ນການເພິ່ງພາອາໄສພິເສດ, ເພີ່ມທະວີການບໍາລຸງຮັກສາ.


  3. ​ຂໍ້​ຂັດ​ແຍ່ງ​ທີ່​ເປັນ​ໄປ​ໄດ້
    • ຖ້າການບໍລິການຈໍານວນຫຼາຍຍູ້ metrics ເລື້ອຍໆ, Pushgateway ສາມາດກາຍເປັນ overwhelmed.

    • ບໍ່ເຫມືອນກັບເຄື່ອງຂູດ Prometheus ໂດຍກົງ (ເຊິ່ງແຈກຢາຍການໂຫຼດ), ການຮ້ອງຂໍທັງຫມົດມົນຕີຕົວຢ່າງ Pushgateway ດຽວ.


  4. ບັນຫາຄວາມສອດຄ່ອງຂອງຂໍ້ມູນ
    • ຖ້າຫຼາຍການບໍລິການຊຸກຍູ້ການວັດແທກທີ່ມີຊື່ດຽວກັນແຕ່ມີຄ່າທີ່ແຕກຕ່າງກັນ, ຂໍ້ມູນອາດຈະຖືກຂຽນທັບ, ນໍາໄປສູ່ຜົນໄດ້ຮັບທີ່ບໍ່ຖືກຕ້ອງ.



ສະຫຼຸບ

Prometheus ເປັນເຄື່ອງມືທີ່ມີປະສິດທິພາບແລະເຊື່ອຖືໄດ້ສໍາລັບການບໍລິການຕິດຕາມກວດກາ. ສໍາລັບຄໍາຮ້ອງສະຫມັກສ່ວນໃຫຍ່, ຮູບແບບດຶງ ແມ່ນທາງເລືອກທີ່ດີທີ່ສຸດ - ມັນງ່າຍດາຍ, ມີປະສິດທິພາບ, ແລະຮັບປະກັນຂໍ້ມູນສົດໂດຍບໍ່ມີຄວາມສັບສົນເພີ່ມເຕີມ. ຢ່າງໃດກໍຕາມ, ຖ້າທ່ານກໍາລັງເຮັດວຽກກັບ ຂະບວນການທີ່ມີອາຍຸສັ້ນ ເຊັ່ນຫນ້າທີ່ Lambda ຫຼືວຽກ batch, ຮູບແບບການຊຸກຍູ້ ຜ່ານ Pushgateway ສາມາດເປັນປະໂຫຍດທີ່ຈະເກັບກໍາ metrics ກ່ອນທີ່ຂະບວນການຈະອອກໄປ.


ການ​ເລືອກ​ວິ​ທີ​ທີ່​ຖືກ​ຕ້ອງ​ຮັບ​ປະ​ກັນ​ການ​ສັງ​ເກດ​ທີ່​ດີກ​ວ່າ​ແລະ​ການ​ຮັກ​ສາ​ລະ​ບົບ​ຂອງ​ທ່ານ​.


ເອົາໃຈ!

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks