【prometheus】-02 一张图彻底搞懂Prometheus服务发现机制 世界看点

2023-03-25 10:10:31 来源: 腾讯云

概述

Prometheus是基于Pull模式抓取监控数据,首先要能够发现需要监控的目标对象target,特别Prometheus最开始设计是一个面向云原生应用程序的,云原生、容器场景下按需的资源使用方式对于监控系统而言就意味着没有了一个固定的监控目标,所有的监控对象(基础设施、应用、服务)都在动态的变化。而对于Prometheus而言其解决方案就是引入一个中间的代理人(服务注册中心),这个代理人掌握着当前所有监控目标的访问信息,Prometheus只需要向这个代理人询问有哪些监控目标控即可, 这种模式被称为服务发现(service discovery)。

如上图,SD模块专门负责去发现需要监控的target信息,Prometheus去从SD模块订阅该信息,有target信息时会推送给Prometheus,然后Prometheus拿到target信息后通过pull http协议去拉取监控指标数据。

Prometheus支持的服务发现协议是非常丰富的,目前已支持多达二十多种服务发现协议:


【资料图】

服务发现原理图

上图描述Prometheus服务发现协议比较笼统,Prometheus服务发现实现原理大致如下图:

如上图所述,Prometheus服务发现机制大致涉及到三个部分:

1、配置处理模块解析的prometheus.yml配置中scrape_configs部分,将配置的job生成一个个Discoverer服务,不同的服务发现协议都会有各自的Discoverer实现方式,它们根据实现逻辑去发现target,并将其放入到targets容器中;

2、discoveryManager组件内部有个定时周期触发任务,每5秒检查targets容器,如果有变更则将targets容器中target信息放入到syncCh通道中;

3、scrape组件会监听syncCh通道,这样需要监控的targets信息就传递给scrape组件,然后reloadtarget纳入监控开始抓取监控指标。

配置处理部分会根据scrape_configs部分配置的不同协议类型生成不同Discoverer,然后根据它们内部不同的实现逻辑去发现targetdiscoveryManager组件则相当于一个搬运工,scrape组件则是一个使用者,这两个组件都无感知服务发现协议的差异。

下面分别来分析下配置处理、discoveryManager组件和scrape组件在服务发现方面的具体实现流程。

配置处理

上节分析Prometheus启动流程,有个配置加载组件通过reloadConfig加载解析prometheus配置文件后,在reloader中循环调用各个组件的ApplyConfig(cfg map[string]Configs)方法处理配置,这其中就包括discovery/manager.go:

reloader中定义如下:

{name:"scrape_sd",//从配置文件中提取Section:scrape_configsreloader:func(cfg*config.Config)error{c:=make(map[string]discovery.Configs)for_,v:=rangecfg.ScrapeConfigs{c[v.JobName]=v.ServiceDiscoveryConfigs}returndiscoveryManagerScrape.ApplyConfig(c)},}

那下面就从discovery/manager.go中定义的ApplyConfig()方法分析。

1、根据配置注册provider:

forname,scfg:=rangecfg{//根据配置注册providerfailedCount+=m.registerProviders(scfg,name)discoveredTargets.WithLabelValues(m.name,name).Set()}

其中关键的是m.registerProviders(scfg, name),继续跟踪:

d,err:=cfg.NewDiscoverer(DiscovererOptions{Logger:log.With(m.logger,"discovery",typ),})

2、然后将所有注册到m.providers数组中的provider进行启动:

for_,prov:=rangem.providers{//启动服务发现实例m.startProvider(m.ctx,prov)}

跟踪到m.startProvider(m.ctx, prov)方法中:

updates:=make(chan[]*targetgroup.Group)//执行run 每个服务发现都有自己的run方法。gop.d.Run(ctx,updates)//更新发现的服务gom.updater(ctx,p,updates)

发现这里主要是启动两个协程,它们之间使用updates通道类型变量进行通信。

总结来说(见下图):

1、每个Config都会对应创建一个Discoverer实例,并被封装到provider存储在m.providers数组中;

2、然后遍历providers数组进行启动操作,启动操作启动了两个协程:

a、Discoverer.Run协程逻辑中主要根据发现协议发现targets

b、然后通过通道传递给discovery/Manager.updater协程中,将其存放到m.targets集合map中;

配置处理这里还有个比较关键的:Discoverer会根据不同协议实现发现target,它是如何实现的呢?

首先,我们来看下Discoverer实例创建:d, err := cfg.NewDiscoverer(),它是一个接口定义:

typeConfiginterface{Name()stringNewDiscoverer(DiscovererOptions)(Discoverer,error)}

每种服务发现协议都在自己的SDConfig中实现了各自的NewDiscoverver()方法,这样就可以将服务发现逻辑封装到Discovererver实现中:

discoveryManager组件

上节《Prometheus启动流程》一节分析过会启动discoveryManagerScrape组件通过通道将targets数据信息传递给scrapeManager组件(见下图):

1、discoveryManagerScrape组件启动入口:

g.Add(func()error{err:=discoveryManagerScrape.Run()level.Info(logger).Log("msg","Scrapediscoverymanagerstopped")returnerr},func(errerror){level.Info(logger).Log("msg","Stoppingscrapediscoverymanager...")cancelScrape()},)

2、一直跟踪会进入到sender()方法中,配置处理模块说过,有个协程会将Discoverer组件发现的targets信息存储到m.targets集合map中,然后给m.triggerSend发送信号,sender方法中就是启动定时周期触发器监听m.triggerSend信号:

func(m*Manager)sender(){//周期性定时器定时触发任务,这里是5s触发一次ticker:=time.NewTicker(m.updatert)deferticker.Stop()for{select{case<-m.ctx.Done():returncase<-ticker.C://Somediscovererssendupdatestoooftensowethrottlethesewiththeticker.select{case<-m.triggerSend:sentUpdates.WithLabelValues(m.name).Inc()select{casem.syncCh<-m.allGroups():default:delayedUpdates.WithLabelValues(m.name).Inc()level.Debug(m.logger).Log("msg","Discoveryreceiver"schannelwasfullsowillretrythenextcycle")select{casem.triggerSend<-struct{}{}:default:}}default:}}}}

监听到m.triggerSend信号,则执行m.syncCh <- m.allGroups(),我们来看下m.allGroups()干了什么?

func(m*Manager)allGroups()map[string][]*targetgroup.Group{m.mtx.RLock()deferm.mtx.RUnlock()tSets:=map[string][]*targetgroup.Group{}forpkey,tsets:=rangem.targets{varnintfor_,tg:=rangetsets{//Evenifthetargetgroup"tg"isemptywestillneedtosendittothe"Scrapemanager"//tosignalthatitneedstostopallscrapeloopsforthistargetset.tSets[pkey.setName]=append(tSets[pkey.setName],tg)n+=len(tg.Targets)}discoveredTargets.WithLabelValues(m.name,pkey.setName).Set(float64(n))}returntSets}

其实就是将m.targets数据发送到m.syncCh通道上,所以,discoveryManager组件比较简单,就是一个搬运工。

scrape组件

scrapeManager组件启动:scrapeManager.Run(discoveryManagerScrape.SyncCh()),通道syncCh是被scrapeManager组件持有的,跟踪进入Run方法中:

func(m*Manager)Run(tsets<-chanmap[string][]*targetgroup.Group)error{gom.reloader()for{select{//通过管道获取被监控的服务(targets)casets:=<-tsets:m.updateTsets(ts)select{//关闭ScrapeManager处理信号//若从服务发现(serviceDiscover)有服务(targets)变动,则给管道triggerReload传值,并触发reloader()方法更新服务casem.triggerReload<-struct{}{}:default:}case<-m.graceShut:returnnil}}}

通过case ts := <-tsets获取到syncCh通道上传递过来的targets数据,然后调用m.updateTsets(ts)targets数据存储到scrapeManager.targetSets中,然后给m.triggerReload发送信号。

这个方法中go m.reloader()启动了一个协程,进入reloader()方法中:

func(m*Manager)reloader(){//定时器5sticker:=time.NewTicker(*time.Second)deferticker.Stop()for{select{case<-m.graceShut:return//若服务发现(serviceDiscovery)有服务(targets)变动,就会向管道triggerReload写入值,定时器每5s判断一次triggerReload管道是否有值,若有值,则触发reload方法case<-ticker.C:select{case<-m.triggerReload:m.reload()case<-m.graceShut:return}}}}

也是通过定时周期触发任务监听m.triggerReload信号,执行m.reload()targets加载进来。

总结

前面分析了服务发现运行机制,可以看下面图梳理下前面流程逻辑:

标签:

无锡10个项目入选 江苏艺术基金2023年度资助项目立项名单公布

14日,江苏艺术基金2023年度资助项目立项名单结束公示,无锡共有民族舞

06-15 09:32:55

沃野万顷绘五彩画卷!全面推进乡村振兴,济南风景正好-每日热讯

06-15 09:00:27

财政部、工业和信息化部:打造一批数字化转型“小灯塔”企业

财政部、工业和信息化部近日联合印发《关于开展中小企业数字化转型城市

06-15 08:22:19

“两高一部”就依法惩治网暴征求意见 针对未成年人、组织“水军”实施网暴从重处罚 全球快消息

《征求意见稿》指出,人民法院、人民检察院、公安机关要充分认识网络暴

06-15 07:46:08

快看点丨芝加哥小麦期货周三跌超0.9%,原糖期货涨2.5%

周三(6月14日)纽约尾盘,彭博谷物分类指数跌0 36%,报44 5915点,美股

06-15 06:42:18

惊喜连连!下月利州东路将变身“紫薇大道”

眼下,广元市城区利州东路景观改造工程示范路段已接近尾声,颜值颇高的

06-15 05:34:03

天天时讯:请收藏!武汉武昌区安装220台AED,点位在这些地方

当发现身边有人突然倒地,出现意识丧失等突发情况时,作为普通人的你我

06-15 03:20:49

ESPN发问:库里杜兰特詹姆斯VS东契奇字母哥约基奇 你选谁赢? 世界微头条

ESPN发问:库里杜兰特詹姆斯VS东契奇字母哥约基奇你选谁赢?,espn,哥约

06-15 01:11:57

速讯:鲁迅经典大全集_关于鲁迅经典大全集简述

小伙伴们,你们好,今天小夏来聊聊一篇关于鲁迅经典大全集,关于鲁迅经

06-14 22:38:49

最新资讯:隐藏身份证号码中间几位公式函数_隐藏身份证号码中间几位公式

1、利用函数公式=SUBSTITUTE(A1,MID(A1,7,8), "******** ")。本文到此

06-14 21:39:25

环球观焦点:视频 | 国家发展改革委:持续优化营商环境 完善“1+N+X”法规政策体系

6月14日,国新办举行政策例行吹风会,介绍深化营商环境重点领域改革有

06-14 20:54:32

横空出世观后感200字20篇 横空出世观后感|世界快资讯

今天来聊聊空出世观后感200字20篇,横空出世观后感的文章,现在就为大

06-14 20:01:26

【维•新闻】奥地利银行服务费也将上涨! 全球微动态

由于通货膨胀上升,银行现在也在提高往来账户、ATM卡和其他服务的各种

06-14 19:32:06

老百姓:控股股东医药集团所持有部分股份被质押

2023年6月14日,老百姓(603883 SH)发布关于控股股东股份质押的公告。公

06-14 19:00:29

世界要闻:深圳多区学位爆仓、有学校要提前12年买房!家长直呼:入学太难了!

“我家小孩可能要被分流到其他学校了。”最近,朋友告诉我们,他们三年

06-14 18:16:52

青海省药品监管局召开医疗器械抽检工作推进会-精选

青海新闻网·大美青海客户端(记者李娜报道)近日,青海省药品监督管理

06-14 17:58:20

全球快讯:大宗交易:会稽山成交1578万元,折价1.50%(06-14)

2023年6月14日,会稽山发生1笔大宗交易,总成交120万股,成交金额1578

06-14 17:15:33

千万工程 一线探访|浙江省绍兴市越城区安桥头村:文旅融合促发展 每日热门

千万工程一线探访|浙江省绍兴市越城区安桥头村:文旅融合促发展---“

06-14 16:43:28

环球快报:口袋妖怪白金伊布进化什么好(口袋妖怪白金伊布)

1、获得全国图鉴后,与屋主羡慕先生对话,他会提及一只稀有的怪兽,之

06-14 16:14:02

全球时讯:贝壳找房是什么中介_贝壳找房是什么

“贝壳找房”是一款手机app,平台包含二手房、新房、租赁、家装等内容

06-14 15:57:29

三川智慧收关注函 被追问收购集盛科技8%股权估值的合理性和定价公允性 是否向关联方利益输送

三川智慧6月14日收深交所关注函,6月6日,公司披露公告称拟以6240万元

06-14 15:01:39

今日热讯:港股内房股持续走低 合景泰富集团跌超6%

截至发稿,合景泰富集团跌6 67%,报0 98港元。

06-14 14:43:13

全球最新:“低碳减肥法”风靡全网 碳水化合物真是变胖主因吗

从生酮饮食,到“断碳”“碳循环”,再到最近爆火的“某明星减肥法”…

06-14 14:01:24

天天速讯:莆田市国资委:莆田市国资国企2023年1-5月项目投资完成情况

莆田市国资委:莆田市国资国企2023年1-5月项目投资完成情况,国投集团,

06-14 13:02:48

天津市河东区一小区发生爆炸 造成3人死亡多人受伤|焦点资讯

中新网6月14日电据天津市公安局河东分局官方微信消息,天津市公安局河

06-14 12:29:40

第二届全国技能大赛福建省选拔赛开赛

为全国技能大赛推荐优秀选手,由省人社厅主办的第二届全国技能大赛(国

06-14 12:04:21

天天精选!汽车normal模式是什么(汽车normal在什么时候用?)

相信大家对汽车normal模式是什么,汽车normal在什么时候用?的问题都很

06-14 11:25:19

世界快资讯:易维哲:黄金继续维持在震荡中,原油关注EIA数据。

黄金上个交易日走出小幅的冲高回落日线报收一根带上影线的寸头阴线,隔

06-14 10:45:33

环球报道:邓州市工商联:组织企业参加“高校毕业生民营企业招聘周”双选会活动

为进一步助力民营经济高质量发展上办实事办好事,帮助民营企业吸纳更多

06-14 10:22:58

环球热议:大家都是皇帝陵墓,为何明皇陵墓完好无损,而清朝皇陵无一幸免

大家都是皇帝陵墓,为何明皇陵墓完好无损,而清朝皇陵无一幸免,哈喽,

06-14 10:12:01

世界最资讯丨5月份天津市CPI环比下降0.4%

5月份天津市CPI环比下降0 4%

06-14 09:38:22

家门口的“公益夜市”精彩开市!文明积分“兑”出居民幸福感

近日,南桥镇阳光社区“益路向阳,我与阳光有约”公益夜市精彩开市。现

06-14 08:58:17

世界最资讯丨把就业服务送到劳动者身边(民生观)

建在社区里的站点,让劳动者感受到实实在在的便利和越来越多的温暖  

06-14 08:33:53

【播资讯】柴祯祯:护眼产品怎样“叫得响”

柴祯祯:护眼产品怎样“叫得响”---近年来,电子产品快速普及、使用频

06-14 08:05:53

江苏盱眙:火红龙虾节 万人龙虾宴

江苏盱眙:火红龙虾节万人龙虾宴

06-14 07:04:00

蚂蚁的蚁组词_蚂蚁的蚁组词有哪些

欢迎观看本篇文章,小升来为大家解答以上问题。蚂蚁的蚁组词,蚂蚁的蚁

06-14 05:56:03

焦点速看:女的来月经能洗澡吗_来月经能洗澡吗

1、来月经时,阴道因经血洗涤而酸度下降,宫颈微开,机体免疫力下降。2

06-14 04:56:34

全球头条:老子一气化三清哪三清(老子一气化三清)

老子一气化三清哪三清,老子一气化三清这个很多人还不知道,现在让我们

06-14 03:02:16

速讯:长沙理工大学获批第二批国家级一流本科课程13门

新湖南客户端6月13日讯(通讯员刘文川)近日,教育部发布了《教育部关

06-14 01:05:16

感人!德约科维奇儿子坐在台下仰头望向爸爸,满满都是崇拜和自豪|焦点讯息

北京时间6月13日,在国内最大的网球论坛,有网友晒出塞尔维亚名将德约

06-13 22:31:58

天天快播:psp游戏迅雷链接(psp游戏迅雷下载)

来为大家解答以上问题。psp游戏迅雷链接,psp游戏迅雷下载这个很多人还

06-13 22:09:16

丰台区委书记王少峰:以“五气”连枝助推丰台倍增发展

6月13日下午,北京市政府新闻办召开“北京市贯彻落实党的二十大精神”

06-13 21:28:01

天天滚动:如何做五彩饭团_五彩饭团的做法

1、材料:米饭2碗、酱油1汤匙、糖1 2汤匙、鱼松3汤匙、火腿肠30g、黄瓜

06-13 20:52:20

决定的近义词是什么词_决定的近义词

1、1,首先要分清你说的“决定”是名词,还是动词;所以他的近义词有:

06-13 19:43:05

母猫嚎春一般几天结束

来为大家解答以上问题。母猫嚎春一般几天结束这个很多人还不清楚,现在

06-13 19:17:11

国内第四大运营商 中国广电终于支持携号转网:但只入不出

国内第四大运营商中国广电终于支持携号转网:但只入不出

06-13 18:40:47

天天视讯!已删的朋友圈如何恢复正常_已删的朋友圈如何恢复

你们好,最近小活发现有诸多的小伙伴们对于已删的朋友圈如何恢复正常,

06-13 18:12:39

环球微速讯:苏州双一流大学有几所 具体名单有哪些(1所)

苏州双一流大学只有有1所,即苏州大学。苏州双一流大学名单及建设学科

06-13 17:45:00

​你可以不识人,但千万要懂人性,10条人性潜规则,看懂现实_今日热文

在人际交往中,了解人性潜规则是非常重要的一点。只有了解这些规则

06-13 17:02:18

容声和海尔冰箱拆机对比_容声和海尔冰箱哪个好

1、这俩个品牌都同样是生产冰箱历史悠久的企业,也都是质量很过关的,容

06-13 16:36:59

沃野万顷绘五彩画卷!全面推进乡村振兴,济南风景正好-每日热讯
财政部、工业和信息化部:打造一批数字化转型“小灯塔”企业
“两高一部”就依法惩治网暴征求意见 针对未成年人、组织“水军”实施网暴从重处罚 全球快消息
快看点丨芝加哥小麦期货周三跌超0.9%,原糖期货涨2.5%
惊喜连连!下月利州东路将变身“紫薇大道”
天天时讯:请收藏!武汉武昌区安装220台AED,点位在这些地方
ESPN发问:库里杜兰特詹姆斯VS东契奇字母哥约基奇 你选谁赢? 世界微头条
速讯:鲁迅经典大全集_关于鲁迅经典大全集简述
最新资讯:隐藏身份证号码中间几位公式函数_隐藏身份证号码中间几位公式
环球观焦点:视频 | 国家发展改革委:持续优化营商环境 完善“1+N+X”法规政策体系
横空出世观后感200字20篇 横空出世观后感|世界快资讯
【维•新闻】奥地利银行服务费也将上涨! 全球微动态
老百姓:控股股东医药集团所持有部分股份被质押
世界要闻:深圳多区学位爆仓、有学校要提前12年买房!家长直呼:入学太难了!
青海省药品监管局召开医疗器械抽检工作推进会-精选
全球快讯:大宗交易:会稽山成交1578万元,折价1.50%(06-14)
千万工程 一线探访|浙江省绍兴市越城区安桥头村:文旅融合促发展 每日热门
环球快报:口袋妖怪白金伊布进化什么好(口袋妖怪白金伊布)
全球时讯:贝壳找房是什么中介_贝壳找房是什么
三川智慧收关注函 被追问收购集盛科技8%股权估值的合理性和定价公允性 是否向关联方利益输送
今日热讯:港股内房股持续走低 合景泰富集团跌超6%
全球最新:“低碳减肥法”风靡全网 碳水化合物真是变胖主因吗
天天速讯:莆田市国资委:莆田市国资国企2023年1-5月项目投资完成情况
天津市河东区一小区发生爆炸 造成3人死亡多人受伤|焦点资讯
第二届全国技能大赛福建省选拔赛开赛
天天精选!汽车normal模式是什么(汽车normal在什么时候用?)
世界快资讯:易维哲:黄金继续维持在震荡中,原油关注EIA数据。
环球报道:邓州市工商联:组织企业参加“高校毕业生民营企业招聘周”双选会活动
环球热议:大家都是皇帝陵墓,为何明皇陵墓完好无损,而清朝皇陵无一幸免
世界最资讯丨5月份天津市CPI环比下降0.4%
家门口的“公益夜市”精彩开市!文明积分“兑”出居民幸福感
世界最资讯丨把就业服务送到劳动者身边(民生观)
【播资讯】柴祯祯:护眼产品怎样“叫得响”
江苏盱眙:火红龙虾节 万人龙虾宴
蚂蚁的蚁组词_蚂蚁的蚁组词有哪些
焦点速看:女的来月经能洗澡吗_来月经能洗澡吗
全球头条:老子一气化三清哪三清(老子一气化三清)
速讯:长沙理工大学获批第二批国家级一流本科课程13门
感人!德约科维奇儿子坐在台下仰头望向爸爸,满满都是崇拜和自豪|焦点讯息
天天快播:psp游戏迅雷链接(psp游戏迅雷下载)
丰台区委书记王少峰:以“五气”连枝助推丰台倍增发展
天天滚动:如何做五彩饭团_五彩饭团的做法
决定的近义词是什么词_决定的近义词
母猫嚎春一般几天结束
国内第四大运营商 中国广电终于支持携号转网:但只入不出
天天视讯!已删的朋友圈如何恢复正常_已删的朋友圈如何恢复
环球微速讯:苏州双一流大学有几所 具体名单有哪些(1所)
​你可以不识人,但千万要懂人性,10条人性潜规则,看懂现实_今日热文
容声和海尔冰箱拆机对比_容声和海尔冰箱哪个好
【全球速看料】车多久做一次动平衡(多长时间做一次动平衡)
X 广告
行业动态
X 广告

Copyright ©  2015-2022 南极植物网版权所有  备案号:粤ICP备2022077823号-13   联系邮箱: 317 493 128@qq.com