【云原生 • Prometheus】图解Prometheus数据抓取原理

头条 >
腾讯云
分享
scrape加载流程组件关系

【云原生 • Prometheus】图解Prometheus数据抓取原理

discovery模块利用各种服务发现协议发现目标采集点,并通过channel管道将最新发现的目标采集点信息实时同步给scrape模块scrape模块负责使用http协议从目标采集点上抓取监控指标数据。

如上图,discovery服务发现模块经过Discoverer组件--> updater组件--> sender组件,将服务发现采集点实时动态发送到syncCh通道上,而该通道的另一端就是scrape模块,这样discovery模块scrape模块就构建起了关联。

scrape模块updateTsets组件通过协程方式运行实时监听syncCh通道,并将更新写入到scrapeManager结构体中targetSets字段对应的map中,同时触发triggerSend信号reloader组件,告诉该组件采集点有更新,reloader组件就从scrapeManagertargetSets中拉取最新采集点进行加载。


(资料图)

reloader组件基于这些采集点信息生成一个个targetScraper组件targetScraper组件组件主要负责按照job中配置的interval时间间隔不停轮训调用采集点的HTTP接口,这样就实现了采集点的指标数据采集。

scrape加载流程

下面来看下scrape模块reloader加载采集点具体流程,如下图:

「reloader采集点加载主要分为如下几个主要步骤:」

「1、scrapePool生成并初始化基础数据:」

scrapeManager结构体中targetSets字段对应的map中存放了当前服务发现的最新采集点信息,keyjob名称,遍历该targetSets中存放的采集点信息,为每个job对应生成一个scrapePool结构体的实例,即scrapePool是封装单个抓取job的工作单元:

ScrapePools 是单个的Job的抓取目标的工作单位:type scrapePool struct { //存储指标 appendable storage.Appendable //一个scrapePool对应一个job,config即为该job配置 config *config.ScrapeConfig // 基于job配置生成http请求客户端工具,比如封装认证信息等 client *http.Client //每个target都会生成一个loop loops          map[uint64]loop //target_limit检查 targetLimitHit bool //relabe后有效的采集点 activeTargets  map[uint64]*Target //relabel后无效采集点 droppedTargets []*Target //生成scrapeLoop工厂函数 newLoop func(scrapeLoopOptions) loop}

每个抓取job生成的scrapePool存放在scrapeManager结构体中scrapePools这个map中:

scrapePools   map[string]*scrapePool

「2、targetgroup.Group构建Target:」

上面生成的scrapePool中主要初始化configclient等信息,并没有涉及到抓取采集点数据,然后对生成的scrapePool执行Sync方法,入参就是该抓取job当前所有采集点信息,这个方法就是对job的采集点信息进行处理:

func (sp *scrapePool) Sync(tgs []*targetgroup.Group) 

遍历采集点,通过targetsFromGroup(tg, sp.config)解析采集点返回[]*Target

var all []*Targetsp.droppedTargets = []*Target{}for _, tg := range tgs { //基于targetgroup.Group构建target集合 targets, err := targetsFromGroup(tg, sp.config) if err != nil {  level.Error(sp.logger).Log("msg", "creating targets failed", "err", err)  continue } for _, t := range targets {  if t.Labels().Len() > 0 {//relabel后符合要求的采集点   all = append(all, t)  } else if t.DiscoveredLabels().Len() > 0 {//relabel后不符合要求的采集点:废弃   sp.droppedTargets = append(sp.droppedTargets, t)  } }}

Target结构体主要字段如下,即将服务发现的采集点信息解析成scrape模块的Target信息,解析过程中会涉及relabel操作,从服务发现的目标采集点中过滤出符合要求的真实采集点,一个Target即代表一个将要真实触发Http请求对象:

type Target struct { //服务发现标签,即未经过relabel处理的标签 discoveredLabels labels.Labels //经过relabel处理之后标签 labels labels.Labels //http请求参数 params url.Values    //采集点状态:up、down、unknown health             TargetHealth}

「3、有效Target生成scrapeLoop:」

「Target只是包含采集点信息,scrapeLoop实现loop接口,封装了发送http请求采集数据指标逻辑的Target执行单元:」

type loop interface { run(interval, timeout time.Duration, errc chan<- error) setForcedError(err error) stop() getCache() *scrapeCache disableEndOfRunStalenessMarkers()}

其中run方法就是启动http数据抓取,入参interval指定循环抓取指标间隔;stop方法则是停止http数据采集。

我们来看下Target如何生成scrapeLoop

if _, ok := sp.activeTargets[hash]; !ok {    //生成targetScraper,其中封装了Target和client //Target封装了采集点请求IP、端口、请求参数等信息,通过这些信息构建HTTP请求Request //client是封装了认证信息的http请求客户端工具,用于将http请求request发送出去 s := &targetScraper{Target: t, client: sp.client, timeout: timeout} l := sp.newLoop(scrapeLoopOptions{  target:          t,  scraper:         s,  limit:           limit,  honorLabels:     honorLabels,  honorTimestamps: honorTimestamps,  mrc:             mrc, })   ...}if _, ok := sp.activeTargets[hash]; !ok {    //sp.activeTargets不存在则表示新发现的采集点,则创建scrapeLoop     //生成targetScraper,其中封装了Target和client //Target封装了采集点请求IP、端口、请求参数等信息,通过这些信息构建HTTP请求Request //client是封装了认证信息的http请求客户端工具,用于将http请求request发送出去 s := &targetScraper{Target: t, client: sp.client, timeout: timeout} l := sp.newLoop(scrapeLoopOptions{  target:          t,  scraper:         s,  limit:           limit,  honorLabels:     honorLabels,  honorTimestamps: honorTimestamps,  mrc:             mrc, }) sp.activeTargets[hash] = t sp.loops[hash] = l uniqueLoops[hash] = l} else {    //sp.activeTargets存在则可能:    //1、重复的采集点:直接忽略即可    //2、之前发现并启动的采集点:设置uniqueLoops[hash] = nil,则后续启动loop时不用启动     //target在sp.activeTargets已存在,但是uniqueLoops不存在,说明该采集点之前就被发现过并被启动,当前发现的和之前一致未变 //uniqueLoops[hash] = nil表示当前还是存在,但是不需要启动,后面对于sp.activeTargets存在但是uniqueLoops中不存在的采集点,则为采集点消失,需要停止loop并移除掉 if _, ok := uniqueLoops[hash]; !ok {  uniqueLoops[hash] = nil } sp.activeTargets[hash].SetDiscoveredLabels(t.DiscoveredLabels())}

uniqueLoops存储当前抓取job所有有效采集点,不在该集合中的采集点需要停止并移除,如之前存在的采集点,但是当前又消失不见的采集点:

for hash := range sp.activeTargets { //uniqueLoops存储当前抓取job所有有效采集点,不在该集合中的采集点需要停止并移除,如之前存在的采集点,但是当前又消失不见的采集点 //uniqueLoops中value=nil的是不需要启动,之前服务发现过并被启动的;value不是nil则表示需要启动 if _, ok := uniqueLoops[hash]; !ok {  //移除  wg.Add(1)  go func(l loop) {   l.stop()   wg.Done()  }(sp.loops[hash])  delete(sp.loops, hash)  delete(sp.activeTargets, hash) }}

scrapeLoop中还有个关键的类型targetScraper,它才是真正执行http请求组件,其实现scraper接口(如下),其中scrape就是一次http请求逻辑封装:

type scraper interface { scrape(ctx context.Context, w io.Writer) (string, error) Report(start time.Time, dur time.Duration, err error) offset(interval time.Duration, jitterSeed uint64) time.Duration}

「4、启动scrapeLoop:」

最后,执行scrapeLooprun方法,启动scrapeLoop组件:

for _, l := range uniqueLoops { if l != nil {   go l.run(interval, timeout, nil) }}

组件关系

scrape模块加载流程关键是几个核心组件创建、初始化及启动运行的过程:」

标签:

THE END
广告、内容合作请点击这里 寻求合作
免责声明:本文系转载,版权归原作者所有;旨在传递信息,不代表中国财投网的观点和立场。

相关热点

资讯播报

环球热头条丨183club歌曲 183culb
日光爱人人物介绍 日光爱人
百事通!怎样才能瘦大腿和臀部 怎样才能瘦大腿
【云原生 • Prometheus】图解Prometheus数据抓取原理
【报资讯】煤省山西创单季度煤炭生产新高
环球即时看!ESR(01821.HK)4月21日耗资645.98万港元回购50万股
环球快资讯:4月22日财经早餐:强劲数据支持美联储5月加息,黄金创八周来最差周度表现
世界热资讯!正邦科技新增被执行3557万余元,累计被执行超1.8亿元
环球微资讯!仕佳光子(688313.SH):2022年净利润增长28.16%至6429.17万元 拟10派0.50元
即时:一汽富维(600742.SH)2022年度净利润5.44亿元、同比下降17.44%
今日快看!瞳距差2mm有影响吗_瞳距
天真_弦子歌词 歌曲天真歌词
环球新消息丨季前赛打排位有晋级赛吗_季前赛打排位有什么用
当前通讯!强信心 稳经济 促发展|山东民航客流量持续攀升 一季度多项指标向好
热资讯!“红齐”幸福食堂撬动老有颐养“大民生”
环球消息!“CXO二哥”增收不增利 大股东减持连累股价 坚定看好CGT CDMO业务|直击业绩会
“走文化廊道 进经济园区 看山东高质量发展”行进式主题采访活动直播特别节目4月22日播出《仙境海岸》篇
3的倍数的特征练习题_3的倍数有哪些
扬州这个平台试运营一年,已实现融资撮合授信1464亿元
今日快看!谷歌人工智能Bard学会写代码啦!距离竞品的差距还是有“亿点点”大
世界快消息!注意防范!未来一周广西多降雨和强对流天气
每日动态!凝聚党群合力,苏州太平街道推进“荻溪星火”数字党群联盟建设
热文:可以赶快买起来了!小米13 Ultra 5月19日起发布MIUI 14开发版
天天观天下!直击“潮好玩”武汉嘉年华,长江存储·致态全程高能闪耀全场
每日播报!上巳节来寺庙赏花祈福 玉佛禅寺这个展览开展了
【报资讯】促健康、增友谊!苏州望亭迎湖村举办了一场趣味健身运动会
搭载超聚光XMAGE影像系统,华为P60 Pro让手机摄影再创新高
【世界播资讯】三川智慧股东户数下降1.05%,户均持股18.73万元
每日快播:国网荆州供电公司:“三紧盯三强化”推进纪检干部教育整顿
全球简讯:河南新乡:绿色智能用电 服务文旅产业
新资讯:韩国将投资150亿美元用于生产固态电池
每日短讯:捷克工会要求将月最低工资从1月的17300克朗提高到19500克朗
报道:价格降低一半左右 多地开始下调种植牙价格
讯息:轻薄的商务神器vivo X Fold2,好看的拍摄神器vivo X Flip
【独家焦点】冀疆情深满天山!河北省第九批对口援疆工作综述
天天观察:总投资268亿元!雄安新区第二季度重点项目集中开工
天天速读:河北保定赴天津旅游推介:住“保定小院” 览“四色”风光
华泰证券:中国出口韧性更强 新兴行业弯道超车
每日视讯:千年苦旱,这次解决!环北部湾广东水资源配置工程全线开工建设
水银密度多少_水银密度
环球头条:长春高新:保持战略定力 完全聚焦医药核心主业发展
86岁谢贤罕见现身 靠枴杖支撑身体衰老明显
肇庆:国家级孵化器功能强大!
农业农村投资需求在未来5到10年接近15万亿元
全球焦点!制作业投资低于市场预期 一季度增速为7.0%
3.7%的低利率要消失?机构称超30城房贷利率或上调
世界热资讯!梦网科技:接受睿远基金管理有限公司等机构调研
环球头条:2022浙江丽水市遂昌县机关事业单位招聘编外用工驾驶员岗位递补入围体检人员公布(三)
好看电影电视剧的好网站 好看电影网52088
今日热搜:沧州审计局历任局长_吴向东 河北省沧州市审计局原局长
每日消息!长三角铁路“五一”小长假运输方案出台
当前速讯:芜湖老海关即将迎新生
前沿资讯!公共艺术作品集_公共艺术 2016年清华大学出版社出版的图书
当前速看:505玉米种到底好不好_505舰
世界快消息!芜湖市将开展学科类校外培训机构违规行为专项整治
我认为世界具有绝对标准,它来自“客观性”,我认为人类可以提出绝对标准
平声是第几声_平声
实时焦点:性兴奋有哪些症状_性兴奋有什么坏处
天天短讯!吉利app如何关联车辆?吉利gnetlink使用教程
全球消息!团市委联两家医院共同开展暖心义诊活动
全球时讯:双头螺柱连接方法图解_双头螺柱
今热点:娇艳欲滴什么意思_娇艳欲滴的意思|每日简讯
延吉市推进中小学校建立党组织领导的校长负责制
哈曼丹王子中国老婆叫什么_哈曼丹王子中国老婆
定了?领克08最快7月预售、8月上市!顶配价格比唐DM低太多
全球速递!2023上海车展:起亚赛图斯上市 售10.99-13.99万元
世界通讯!抗癌露露去越战越勇是什么时候(抗癌露露去《越战越勇》是2023年)
“名人堂成员”驾到 特斯拉将在Q3举行Cybertruck交付仪式
关注:股票行情快报:五洲交通(600368)4月21日主力资金净卖出3141.49万元
世界微速讯:短叶虾脊兰
焦点热议:股票行情快报:中国中车(601766)4月21日主力资金净卖出816.02万元
环球聚焦:excel表格图片导出(excel表格图片不显示)
请问天燃气的热值是多少啊(请问天燃气的热值是多少)
天天热资讯!股票行情快报:大豪科技(603025)4月21日主力资金净卖出114.84万元
全球聚焦:绝缘材料_关于绝缘材料介绍
天天观焦点:方框内打钩符号怎么输入(方框内打钩符号怎么输入)
葫芦丝综合课工作计划(汇总9篇)
世界速看:资产并购合同范本(共7篇)
当前快报:村保洁合同范本(合集19篇)
天天速讯:宜昌这些单位停车场,市民可“包月”停车|报资讯
全球快看:海洋捕捞合同范本(实用17篇)
新型泡沫:全天候淡水收集“小能手”
@高校毕业生,3部门关注的这件事与你有关
航天“黑科技”助运动员摘金夺银
来消博会 体验未来生活新方式
腾讯 QQ macOS 正式版 6.9.17 发布,支持收发红包、远程协助等
今日什么是感应加热淬火后的自行回火(什么是感应灯)
A股午评:沪指跌逾1%AI概念、券商股大跌宁德时代绩后涨3%两市下跌超4000股
当前关注:A股大跌!原因找到了!
必和必拓4月21日发布截至3月31日的第三财季营运报告
焦点快报!A股上市银行首份一季报出炉!常熟银行归母净利同比增长20.60% | 财报金选
世界今日报丨拨付给企业各内部单位的备用金 拨付
速读:大鹏一日同风起扶摇直上九千里的意思及造句_大鹏一日同风起扶摇直上九千里的意思
中邮证券给予谱尼测试增持评级,检测赛道长坡厚雪,内生外延持续拓展
观察:爱情电影《12 日》4 月 26 日上线 经典爱情电影《12 夜》新篇章
涂石灰画“虎”字求消肿……一位鼻咽癌病人走过许多歪路
园丁鸟科含有8 下面推断正确的是_园丁鸟
当前消息!证监会就《证券期货市场主机交易托管管理规定(征求意见稿)》公开征求意见
国风茶点餐来啦!东航“云上食·臻”焕新发布
环球动态:1158万人!今年高校毕业生数量再创历史新高!找工作更难了...

相关推荐

精彩推送

3