Што е Прометеј и зошто ви е потребен? Prometheus е моќен систем за следење кој собира и обработува нумерички податоци (метрика) од апликациите. Тоа ви помага да ги следите клучните индикатори како што се: Бројот на барања што ги обработува вашата услуга. Времето на одговор за секое барање. Употреба на меморија и процесор. Бројот на грешки што се појавуваат во системот. Со користење на Прометеј, можете да одговорите на критични прашања како што се: „Дали мојата услуга работи ефикасно? „Кои се тесните грла на перформансите? „Дали треба да ја зголемиме нашата инфраструктура? И како Прометеј собира метрика? Постојат два основни начини на кои Прометеј собира податоци: - Прометеј активно ги бара услугите за нивните метрики. Модел на влечење – Услугите ги туркаат своите метрики до посредник, кој Prometheus потоа го собира. Push модел (Pushgateway) Ајде да ги разбиеме. Повлечете модел Во , Прометеј метрики од вашата апликација преку 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 да ги брише метриките од вашата услуга prometheus.yml scrape_configs: - job_name: "example_service" static_configs: - targets: ["localhost:8080"] Сега, Prometheus автоматски ќе бара на секои неколку секунди за да собира податоци. http://localhost:8080/metrics Зошто се претпочита моделот Pull? - Прометеј го контролира распоредот и фреквенцијата на гребење. Едноставност - Нема потреба од дополнителна услуга за примање метрика. Помалку точки на неуспех – Ако услугата престане да реагира, Prometheus едноставно престанува да прима податоци, избегнувајќи застоена метрика. Автоматско чистење Push Model (Pushgateway Approach) Во , услугата своите метрики до посредничка услуга наречена , која ги складира додека Прометеј не ги преземе. моделот push ги испраќа Pushgateway Како функционира (Push Model) Вашата апликација до 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 е корисен? всушност кои завршуваат пред Прометеј да може да ги изгребе. Краткотрајни работи (групни задачи, cron работни места) каде што Prometheus не може директно да пристапи до услугата. Мрежни ограничувања (IoT уреди, надворешни API) кои не можат директно да се изгребат. Надворешни извори на податоци Кој модел треба да го користите? Метод Најдобро за... Добрите Конс Повлечете (препорачано) Веб-услуги, API-и, долготрајни апликации Едноставно поставување, помалку зависности, автоматско чистење Не е погоден за многу краткотрајни задачи Push (Pushgateway) Сериски задачи, задачи без стабилен пристап до мрежата Овозможува туркање податоци од краткотрајни работни места Застарени податоци, дополнителна сложеност, ризик од тесни грла Зошто Push Model не е идеален? Иако решава некои проблеми (на пример, краткотрајните процеси кои завршуваат пред Прометеј да ги изгребе), тој : Pushgateway воведува неколку нови проблеми Тешко е да се управуваат застарените податоци Ако услугата изумре, нејзината стара метрика останува во Pushgateway. Прометеј нема начин да знае дали услугата сè уште работи. Мора рачно да ги избришете застарените метрики користејќи или да ги конфигурирате политиките за истекување. push.Delete(...) Дополнителна сложеност Наместо директна врска , сега имате . Service → Prometheus Service → Pushgateway → Prometheus Pushgateway е дополнителна зависност, што ги зголемува трошоците за одржување. Потенцијални тесни грла Ако многу услуги често притискаат метрика, Pushgateway може да биде преоптоварен. За разлика од директните гребење на Prometheus (кои го дистрибуираат товарот), сите барања погодуваат еден пример на Pushgateway. Проблеми со конзистентноста на податоците Ако повеќе услуги туркаат метрика со исто име, но различни вредности, податоците може да бидат препишани, што ќе доведе до неточни резултати. Заклучок Прометеј е моќна и сигурна алатка за следење на услугите. За повеќето апликации, е најдобриот избор - тој е едноставен, ефикасен и обезбедува свежи податоци без дополнителна сложеност. Меѓутоа, ако работите со како што се функциите на Lambda или сериските задачи, преку Pushgateway може да биде корисен за снимање на метрика пред да излезе процесот. моделот за повлекување краткотрајни процеси моделот на push Изборот на вистинскиот пристап обезбедува подобра набљудуваност и одржување на вашиот систем. Внимавајте!