每日消息!【云原生 • Prometheus】图解Prometheus数据抓取原理
【云原生 • Prometheus】图解Prometheus数据抓取原理
discovery模块
利用各种服务发现协议发现目标采集点,并通过channel管道
将最新发现的目标采集点信息实时同步给scrape模块
,scrape模块
负责使用http
协议从目标采集点上抓取监控指标数据。
如上图,discovery服务发现模块
经过Discoverer组件
--> updater组件
--> sender组件
,将服务发现采集点实时动态发送到syncCh通道
上,而该通道的另一端就是scrape模块
,这样discovery模块
和scrape模块
就构建起了关联。
scrape
模块updateTsets
组件通过协程方式运行实时监听syncCh
通道,并将更新写入到scrapeManager
结构体中targetSets
字段对应的map
中,同时触发triggerSend信号
给reloader组件
,告诉该组件采集点有更新,reloader组件
就从scrapeManager
中targetSets
中拉取最新采集点进行加载。
(资料图)
reloader组件
基于这些采集点信息生成一个个targetScraper组件
,targetScraper组件
组件主要负责按照job
中配置的interval
时间间隔不停轮训调用采集点的HTTP接口,这样就实现了采集点的指标数据采集。
scrape加载流程
下面来看下scrape
模块reloader
加载采集点具体流程,如下图:
「reloader采集点加载主要分为如下几个主要步骤:」
「1、scrapePool生成并初始化基础数据:」
scrapeManager
结构体中targetSets
字段对应的map中存放了当前服务发现的最新采集点信息,key
是job
名称,遍历该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
中主要初始化config
、client
等信息,并没有涉及到抓取采集点数据,然后对生成的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
:」
最后,执行scrapeLoop
的run
方法,启动scrapeLoop
组件:
for _, l := range uniqueLoops { if l != nil { go l.run(interval, timeout, nil) }}
组件关系
「scrape模块
加载流程关键是几个核心组件创建、初始化及启动运行的过程:」
标签:
推荐
- 每日消息!【云原生 • Prometheus】图解Prometheus数据抓取原理
- 焦点信息:“居家养老”变“社区享老” 烟台黄渤海新区日间养老中心托起幸福“夕阳红”
- 债市日报:4月21日
- 国茂股份:4月21日融券卖出2.18万股,融资融券余额4238.23万元|观焦点
- 环球热文:苏常柴A:柴油机局部应用场景可能会被新能源动力所替代
- 铁杵磨针文言文的意思(铁杵磨针文言文)
- 快看点丨那么梨树开花时节能吃到甜甜的雪花梨吗?
- 每日时讯!女子出轨第四者丈夫才知孩子非亲生,第三者为报复告密后被起诉
- 石阡国荣乡:“12345”工作法打通基层治理“六脉”提高社会治理现代化水平
- 广州市教育局:严肃查处校外培训机构、自媒体等参与违规招生行为
- 江苏金租2022年净利24.12亿同比增长16.36% 董事长熊先根薪酬308.7万
- 全球头条:中秋节幽默风趣的祝福语简短_中秋节幽默祝福短信
- 镇村公交司机兼职“邮政快递员”,快递进村打通最后一公里
- 光峰科技李屹:车载光机已完成智能座舱系统的集成和适配 环球新视野
- 击败樊振东的19岁法国小将:难以置信!我打了一场了不起的比赛
- 一季度上海市居民人均可支配收入23489元 同比增长3.6%-全球即时
- 陈若琳_关于陈若琳的介绍
- 长城基金韩林:全面注册制对于奠定A股市场的长牛具有基础性制度作用
- 每日动态!高考复习资料_高考复习用资料什么好
- 全球观点:4月21日基金净值:平安优势回报1年持有混合A最新净值0.7188,跌3.56%
- 天天资讯:这类贷款今年继续免息、本金可延期偿还
- 高德在深圳等地试点出租车司机车费垫付,已垫付超百万人次
- “五一”旅游热度持续高涨 预订火爆
- 睡前吃苹果会减肥吗 睡前吃苹果有减肥的功效吗-全球视点
- 大连公积金提取条件都有哪些?提取范围包括哪些?
- 【独家】天风证券给予倍杰特增持评级 计提减值致业绩承压 订单及技术储备有望助力业绩
- 日本加紧强化军事“桥头堡” 冲绳何时可获安宁?
- 小规模转为一般纳税人之前的进项可以抵扣吗(小规模转为一般纳税人之前的进项) 每日短讯
- 选择大城市逐梦还是小城市安稳
- 国创会会长郑必坚新书《全过程人民民主在中国》今日发布_世界消息
- 【天天热闻】城市基础设施配套费申请书_城市低保申请书怎么写
- 商务部:4月22日起对原产于美国和欧盟的进口非色散位移单模光纤继续征收反倾销税 全球视点
- 天天精选!曾毅左腿骨折怎么回事_曾毅在内蒙古录节目左腿骨折
- 瑞德智能跌9% 2022上市即巅峰超募2.3亿国元证券保荐_每日资讯
- 智能快速充电器设计与制作_对于智能快速充电器设计与制作简单介绍
- 卢尼:作为篮板手我也会进入无我状态 就像库里和克莱投三分那样
- 欧洲千里光
- 海南省屯昌县发布雷雨大风橙色预警|环球最资讯
- 4月21日万达概念板块跌幅达3%
- 大麦两个月成功拦截“黄牛”400万次-当前热门
- 机构策略:股指预计维持震荡格局 关注船舶制造、中药等行业 今日热文
- 当前速递!景谷傣族彝族自治县气象台发布大风蓝色预警【Ⅳ级/一般】
- 天天速递!沉默的证人电视剧剧情_该剧演绎了什么
- 每日简讯:数字经济概念股全线走低,数据要素方向领跌
- 世界快看:馄饨皮是用米粉做的吗?
- 内地新能源车4月售22万辆 增近90%
- 广西钦州市委书记林冠逝世,享年56岁
- win10一键卸载自带程序-(win10一键卸载自带程序在哪) 每日时讯
- 泰国将从9月起对外国游客征收入境费-天天短讯
- 搭钢架合同范本(汇总4篇)_环球资讯
- 守护绿水青山 武汉小军山社区开展巡湖护湖我先行活动
- 佘诗曼担任三草两木“白白星推官”,白晶瓶热度再次出圈-世界新视野
- 中汽股份:4月19日接受机构调研,天风证券、华泰汽车等多家机构参与
- 最新消息:上海电气:煤电一体化扩建市场 连获两个锅炉订单
- 【世界新视野】全国已春播粮食面积超1.6亿亩 进度近两成
- 赏精彩民俗,逛国潮集市!来佛山古镇体验全年不落幕的文化盛宴 环球关注
- 广州地铁10条(段)在建新线提升防洪防汛能力
- 昭通市社保卡余额怎么查询,你知道吗 天天时讯
- 新巨丰(301296)4月20日主力资金净买入515.94万元 环球关注
- 桂林必去的三个景点 这个秋天桂林最值得去的3个地方,快带上心爱的她一起来游玩吧_世界快报
- 知识付费赛道何以下沉农业领域?专家:前路并非坦途,多个问题仍需注意_视焦点讯
- 专家把脉生态环保产业高质量发展:产业从“建设时代”进入“运营时代” 重点聚焦
- 天天观焦点:日媒:岸田文雄遭袭事件嫌疑人使用的爆炸物装有多枚螺母
- scrolllock怎么关闭_scroll lock怎么关
- 当前头条:西凤酒文化研讨暨专家聘用仪式举行
- 当前热文:雷诺据悉已选择多家银行为其电动汽车业务Ampere进行IPO
- 敬才爱才礼才,“蓉漂号”主题列车上线! 焦点热文
- 【播资讯】福建省龙岩市2023-04-20 12:43发布雷电黄色预警
- 南昌大学举办潘际銮教育思想研讨会 每日消息
- 「四月热闻」天津哪家医院做试管婴儿效果好[健康指南] 天天快看点
- NBA官宣!追梦因踩踏萨博尼斯被禁赛一场! 即时焦点
- 最新战报!国乒女单五人进八强!孙颖莎超越刘诗雯创新纪录
- 当前消息!日语翻译罗马音转换器_罗马音翻译器
- 央行:预计2023年信贷投放以及社会融资规模增长将
- 樾丽云庭_樾|今日要闻
- 热门看点:2022年北京共监测发现侵权链接约534.7万条,发起维权约510.3万条
- 龙头被我一网打尽
- CBA季后赛8进4丨兄弟同心,浙江东阳光98-87力克广东东莞大益,系列赛大比分打平! 全球快消息
- “港圈美女”洪欣:被抛弃与背叛充斥的一生 焦点
- 梅安森(300275)2023年一季报简析:营收净利润双双增长,债务压力大
- 美联储开会前投资者观望 海指微跌
- 【世界新要闻】AI带来的版权噩梦何解?
- 新冠药赚到钱!默沙东辉瑞又在“买买买”了|全球简讯
- 求职简历模板表格word_求职简历模板|世界信息
- 藤县:桑葚丰收缀满枝 农旅融合采摘忙_焦点速讯
- 易炼红在杭州参观“味美浙江”餐饮消费欢乐季活动 让“浙江美如画 浙菜香天下” 世界热推荐
- 丁薛祥会见联合国气候变化迪拜大会候任主席苏尔坦(视频)
- 爱奇艺《来活了兄弟》今日官宣,来活兄弟团开工在即,开启全新“整活”之旅-全球报资讯
- 孟晚舟:2030年全球AI算力将增长500倍-天天观速讯
- 北京市长峰医院火灾事故初步调查结果公布:事故系医院住院部内部改造施工作业过程中产生的火花引燃现场可燃涂料的挥发物所致(央视新闻)
- 梯形面积的推导过程 梯形面积 环球热门
- 每日信息:春光里,有一抹冬的痕迹
- 【玩转服务器】lnmp 多版本PHP安装及指定PHP CLI版本
- 软岛科技2022年净利1353.80万 同比增加32.10% 平台业务利润增加
- 环球时讯:一批上市厦企年报出炉 新能源生物医药业绩抢眼
- 节气里的中国智慧丨今日,谷雨
- 世界速读:翔宇医疗(688626.SH):3名股东拟合计减持不超5.25%股份
- 全球焦点!深圳第二家Apple Store定于4月28日开幕 位于罗湖区
- 天天观热点:阿里P9下岗再就业
- 一季度A股交易额只下滑11% 证券交易印花税却大降53%|天天时讯
X 关闭
行业规章
X 关闭