【云原生 • Prometheus】Prometheus 注册中心Eureka服务发现原理|环球快看
腾讯云 2023-04-22 08:11:40

Prometheus 注册中心Eureka服务发现原理

概述

Eureka服务发现协议允许使用Eureka Rest API检索出Prometheus需要监控的targets,Prometheus会定时周期性的从Eureka调用Eureka Rest API,并将每个应用实例创建出一个target。


(资料图片)

Eureka服务发现协议支持对如下元标签进行relabeling

__meta_eureka_app_name: the name of the app__meta_eureka_app_instance_id: the ID of the app instance__meta_eureka_app_instance_hostname: the hostname of the instance__meta_eureka_app_instance_homepage_url: the homepage url of the app instance__meta_eureka_app_instance_statuspage_url: the status page url of the app instance__meta_eureka_app_instance_healthcheck_url: the health check url of the app instance__meta_eureka_app_instance_ip_addr: the IP address of the app instance__meta_eureka_app_instance_vip_address: the VIP address of the app instance__meta_eureka_app_instance_secure_vip_address: the secure VIP address of the app instance__meta_eureka_app_instance_status: the status of the app instance__meta_eureka_app_instance_port: the port of the app instance__meta_eureka_app_instance_port_enabled: the port enabled of the app instance__meta_eureka_app_instance_secure_port: the secure port address of the app instance__meta_eureka_app_instance_secure_port_enabled: the secure port of the app instance__meta_eureka_app_instance_country_id: the country ID of the app instance__meta_eureka_app_instance_metadata_: app instance metadata__meta_eureka_app_instance_datacenterinfo_name: the datacenter name of the app instance__meta_eureka_app_instance_datacenterinfo_: the datacenter metadata

eureka_sd_configs常见配置如下:

- job_name: "eureka"  eureka_sd_configs:    - server: http://localhost:8761/eureka #eureka server地址      refresh_interval: 1m #刷新间隔,默认30s

eureka_sd_configs官网支持主要配置如下:

server: basic_auth:  [ username:  ]  [ password:  ]  [ password_file:  ]# Configures the scrape request"s TLS settings.tls_config:  [  ]# Optional proxy URL.[ proxy_url:  ]# Configure whether HTTP requests follow HTTP 3xx redirects.[ follow_redirects:  | default = true ]# Refresh interval to re-read the app instance list.[ refresh_interval:  | default = 30s ]

Eureka协议实现

基于Eureka服务发现协议核心逻辑都封装在discovery/eureka.gofunc (d *Discovery) refresh(ctx context.Context) ([]*targetgroup.Group, error)方法中:

func (d *Discovery) refresh(ctx context.Context) ([]*targetgroup.Group, error) { // 通过Eureka REST API接口从eureka拉取元数据:http://ip:port/eureka/apps apps, err := fetchApps(ctx, d.server, d.client) if err != nil {  return nil, err } tg := &targetgroup.Group{  Source: "eureka", } for _, app := range apps.Applications {//遍历app        // targetsForApp()方法将app下每个instance部分转成target  targets := targetsForApp(&app)        //解析的采集点合入一起  tg.Targets = append(tg.Targets, targets...) } return []*targetgroup.Group{tg}, nil}

refresh方法主要有两个流程:

1、fetchApps():从eureka-server/eureka/apps接口拉取注册服务信息;

2、targetsForApp():遍历appinstance,将每个instance解析出一个target,并添加一堆元标签数据。

如下示例从eureka-server/eureka/apps接口拉取的注册服务信息:

    1    UP_1_            SERVICE-PROVIDER-01                    localhost:service-provider-01:8001            192.168.3.121            SERVICE-PROVIDER-01            192.168.3.121            UP            UNKNOWN            8001            443            1                            MyOwn                                        30                90                1629385562130                1629385682050                0                1629385562132                                        8001                true                8080                        http://192.168.3.121:8001/            http://192.168.3.121:8001/actuator/info            http://192.168.3.121:8001/actuator/health            service-provider-01            service-provider-01            false            1629385562132            1629385562039            ADDED            

instance信息会被解析成采集点target

func targetsForApp(app *Application) []model.LabelSet { targets := make([]model.LabelSet, 0, len(app.Instances)) // Gather info about the app"s "instances". Each instance is considered a task. for _, t := range app.Instances {  var targetAddress string        // __address__取值方式:instance.hostname和port,没有port则默认port=80  if t.Port != nil {   targetAddress = net.JoinHostPort(t.HostName, strconv.Itoa(t.Port.Port))  } else {   targetAddress = net.JoinHostPort(t.HostName, "80")  }  target := model.LabelSet{   model.AddressLabel:  lv(targetAddress),   model.InstanceLabel: lv(t.InstanceID),   appNameLabel:                     lv(app.Name),   appInstanceHostNameLabel:         lv(t.HostName),   appInstanceHomePageURLLabel:      lv(t.HomePageURL),   appInstanceStatusPageURLLabel:    lv(t.StatusPageURL),   appInstanceHealthCheckURLLabel:   lv(t.HealthCheckURL),   appInstanceIPAddrLabel:           lv(t.IPAddr),   appInstanceVipAddressLabel:       lv(t.VipAddress),   appInstanceSecureVipAddressLabel: lv(t.SecureVipAddress),   appInstanceStatusLabel:           lv(t.Status),   appInstanceCountryIDLabel:        lv(strconv.Itoa(t.CountryID)),   appInstanceIDLabel:               lv(t.InstanceID),  }  if t.Port != nil {   target[appInstancePortLabel] = lv(strconv.Itoa(t.Port.Port))   target[appInstancePortEnabledLabel] = lv(strconv.FormatBool(t.Port.Enabled))  }  if t.SecurePort != nil {   target[appInstanceSecurePortLabel] = lv(strconv.Itoa(t.SecurePort.Port))   target[appInstanceSecurePortEnabledLabel] = lv(strconv.FormatBool(t.SecurePort.Enabled))  }  if t.DataCenterInfo != nil {   target[appInstanceDataCenterInfoNameLabel] = lv(t.DataCenterInfo.Name)   if t.DataCenterInfo.Metadata != nil {    for _, m := range t.DataCenterInfo.Metadata.Items {     ln := strutil.SanitizeLabelName(m.XMLName.Local)     target[model.LabelName(appInstanceDataCenterInfoMetadataPrefix+ln)] = lv(m.Content)    }   }  }  if t.Metadata != nil {   for _, m := range t.Metadata.Items {                // prometheus label只支持[^a-zA-Z0-9_]字符,其它非法字符都会被替换成下划线_    ln := strutil.SanitizeLabelName(m.XMLName.Local)    target[model.LabelName(appInstanceMetadataPrefix+ln)] = lv(m.Content)   }  }  targets = append(targets, target) } return targets}

解析比较简单,就不再分析,解析后的标签数据如下图:

标签中有两个特别说明下:

1、__address__:这个取值instance.hostnameport(默认80),所以要注意注册到eureka上的hostname准确性,不然可能无法抓取;

2、metadata-map数据会被转成__meta_eureka_app_instance_metadata_格式标签,prometheus进行relabeling一般操作metadata-map,可以自定义metric_path、抓取端口等;

3、prometheuslabel只支持[a-zA-Z0-9_],其它非法字符都会被转换成下划线,具体参加:strutil.SanitizeLabelName(m.XMLName.Local);但是eurekametadata-map标签含有下划线时,注册到eureka-server上变成双下划线,如下配置:

eureka:  instance:    metadata-map:      scrape_enable: true      scrape.port: 8080

通过/eureka/apps获取如下:

总结

基于Eureka服务发现原理如下图:

基于eureka_sd_configs服务发现协议配置创建Discoverer,并通过协程运行Discoverer.Run方法,Eureka服务发现核心逻辑封装discovery/eureka.gofunc (d *Discovery) refresh(ctx context.Context) ([]*targetgroup.Group, error)方法中。

refresh方法中主要调用两个方法:

1、fetchApps:定时周期从Eureka Server/eureka/apps接口拉取注册上来的服务元数据信息;

2、targetsForApp:解析上步骤拉取的元数据信息,遍历app下的instance,将每个instance解析成target,并将其它元数据信息转换成target元标签可以用于relabel_configs操作

【云原生 • Prometheus】Prometheus 注册中心Eureka服务发现原理|环球快看

2023-04-22 08:11:40

佳裕达美国IPO发行价定为每股4美元

2023-04-22 07:58:16

快资讯丨“无底线营销”数量最多 市场监管部门去年查办民生领域违法案件20.6万件

2023-04-22 07:25:19

今日要闻!成都大运会举办时间地点赛程一览

2023-04-22 06:51:14

东方滤袋2022年净利2345.36万同比减少32.92% 市场竞争激烈

2023-04-22 06:30:56

2023上海车展大嘴余承东去了哪里?-快消息

2023-04-22 06:18:19

今日职业能力及适应能力_职业能力及适应性_信息

2023-04-22 05:31:25

房产过户费用计算_房产过户费用_当前热门

2023-04-22 05:07:13

每日时讯!佳缘科技(301117):4月21日北向资金减持4.15万股

2023-04-22 05:05:49

千万投入构筑国民脑营养科研基金,六个核桃推动脑科研跨越式发展

2023-04-22 05:05:13

洪山区妇联组织读书活动|每日快报

2023-04-22 04:20:39

全球快消息!cini级伴hpv感染怎么治疗_hpv感染怎么治疗

2023-04-22 03:57:31

寿仙谷:寿仙谷第三代去壁灵芝孢子粉在浙江已具有较强的品牌知名度 市场空间也较大

2023-04-22 03:40:53

044期胡金大乐透预测奖号:号码个数统计 观察

2023-04-22 03:32:03

环球快讯:有回音|网友反映机动车不礼让行人 内蒙古赤峰市:第一时间现场调研核查处理

2023-04-22 03:07:22

央行:截至3月末已有83个城市下调首套房贷利率下限-环球微头条

2023-04-22 02:52:04

局地降幅近30℃,为何山西成此次强降温和暴雪重心?

2023-04-22 02:10:40

特斯拉暗示还会有进一步降价行动 马斯克称追求销量是正确选择|全球今亮点

2023-04-22 02:10:36

怎样用次氯酸给冰箱消毒?

2023-04-22 01:22:22

kp是指什么_kp的介绍-环球热讯

2023-04-22 00:56:04

印象最深第一件事英语作文(实用48篇)

2023-04-22 00:28:30

当前快播:高油酸花生油的好处(高油酸)

2023-04-22 00:31:43

热点聚焦:今日沧月镜系列人物介绍(沧月镜系列的顺序是什么)

2023-04-21 23:51:32

环球新资讯:苹果手机通话怎么录音(苹果手机通话怎么录音不了)

2023-04-21 23:18:59

支票填写样本日期_中国银行现金支票填写样本

2023-04-21 23:12:22

今起适龄幼儿网上入园信息登记,建议家长错峰登录,插班转园不在登记范围内 全球聚看点

2023-04-21 22:34:47

对话年轻消费圈层,这个520科龙空调用音乐节推动品牌年轻化发展

2023-04-21 22:00:45

环球快播:无法连接到rockstar服务器怎么办_无法访问rockstar服务器激活需连接网络

2023-04-21 22:03:48

本轮中超天津泰达与大连人第二回合比赛前泰达因为2-0领先|微资讯

2023-04-21 21:50:06

快消息!国际投行密集上调中国GDP增速预测值 海外投资者对华投资信心持续提升

2023-04-21 21:26:52

长盈通2022年净利润超8000万 积极布局相变材料业务

2023-04-21 21:01:00

欧普照明于杭州参股成立科技公司,注册资本660万元

2023-04-21 20:45:23

赚钱儿真的可以赚钱 赚钱儿

2023-04-21 20:09:12

[日期][省份]本溪疫情最新通报表及本溪疫情最新消息实时数据

2023-04-21 19:42:58

小学四年级课外书推荐读本(小学四年级课外书推荐)

2023-04-21 19:15:29

新概念英语第四册词汇重点总结(8)-环球快资讯

2023-04-21 18:54:57

世界新动态:阵风7~9级,降温14~16℃!新乡发布重要天气报告

2023-04-21 18:34:22

巴恩斯:勇士不会轻易放弃 我们要始终保持高强度才行

2023-04-21 18:11:04

平稳运行 动能积蓄 ——透视首季工业经济数据

2023-04-21 17:21:23

国内经济向好迹象明显 北海楼市信心也在恢复 天天观焦点

2023-04-21 17:06:28

西安航天城投资集团16.5亿元私募债券项目更新至“已反馈”

2023-04-21 17:10:04

俄外长访华视频背景音乐弯弯的月亮 动态焦点

2023-04-21 16:53:23

预防癌症三步走_热点在线

2023-04-21 16:05:10

罗依依这个名字好吗 罗依依_观察

2023-04-21 16:15:41

【热闻】广东省佛山市发布冰雹橙色预警

2023-04-21 15:56:16

“星舰”发射将意味着什么?

2023-04-21 15:57:49

环球头条:90后返乡小伙 8年“孵”出鸵鸟农场

2023-04-21 14:36:13

基石资本张维:新能车等新兴产业谨防产能过剩

2023-04-21 14:34:06

西宁市城西区将发放8600张电子消费券! 微动态

2023-04-21 14:12:30

速读:新增 21 种新专业、撤销 925 个专业点,热在哪冷在哪?

2023-04-21 14:09:56

速讯:建设国家知识产权强市示范城市,长沙这样做

2023-04-21 13:19:39

1499元起!荣耀X50i手机发布:标配256GB超大存储-报资讯

2023-04-21 12:42:45

焦点报道:描写季节的诗句李白_描写季节的诗句

2023-04-21 12:18:55

直播预告|走,继续“寻宝”!下午4点,探寻磷矿山中的“绿宝石”_世界头条

2023-04-21 11:56:29

航天南湖今日启动科创板招股 聚焦防空预警雷达领域

2023-04-21 11:51:26

快资讯丨「节气之美」谷雨看花局一新 快抓住春天最后的身影

2023-04-21 11:39:58

喝什么可以清热解毒_清热解毒茶饮介绍

2023-04-21 11:22:03

强!意媒:遭遇车祸后仅4天,因莫比莱手缠绷带重返训练 环球讯息

2023-04-21 10:52:18

外卖送餐这件“小事” 杭州专门立法 今年5月1日起施行

2023-04-21 10:15:38

每日热议!萧华帮哈登詹皇出气!但格林禁赛不是坏事,库里将迎来3大翻盘点

2023-04-21 10:29:38

全面注册制下 优化了哪些申购配售机制与约束安排?

2023-04-21 10:15:34

每日播报!卡恩谈离任传闻:不会考虑自己的合同,将努力让拜仁回到顶峰

2023-04-21 09:26:24

研判组_研判 天天看点

2023-04-21 09:04:13

教育部公布本科新增专业,包括孤独症儿童教育、未来机器人等-世界资讯

2023-04-21 08:51:57

《长月烬明》海外评分9.1,国内评分仅6.2,太真实了|世界独家

2023-04-21 08:36:53

htc 潮牌_HTC ChaCha

2023-04-21 07:55:18

霍去病有妻子吗_霍去病的妻子

2023-04-21 07:45:36

烧机油是什么原理_烧机油是什么意思

2023-04-21 06:59:09

恒为科技(603496.SH):公司是国内较早从事网络可视化行业的厂商

2023-04-21 06:49:18

每日热议!康永军

2023-04-21 06:36:17

天天观热点:4-0!罗德里戈杀人诛心,皇马客场再灭神灯,切尔西四大皆空

2023-04-21 06:28:46

“红内裤”后再现“橙蕉”,上海首轮土拍预期白热化,万科、华润、中海携重金强势回归-新动态

2023-04-21 05:38:05

天天热议:壹邦科普:哪类人容易得糖尿病?

2023-04-21 05:36:56

以法律约束倒逼外卖行业考核机制人性化

2023-04-21 04:58:10

环球新动态:电动化时代,读懂奔驰的豪华

2023-04-21 04:39:26

微动态丨技术降本先行 海辰发布320Ah新一代电力储能专用电池

2023-04-21 04:12:03

天天头条:反腐败取得新进展!足协闫占河被举报,透露西南顾2人入宫,6人被查

2023-04-21 04:14:55

蒋梦婕发文回应自己被偷拍勒索 现已报警处理此事

2023-04-21 04:00:35

丹麦与荷兰将向乌克兰提供14辆“豹2”坦克 天天报道

2023-04-21 03:09:09

CMOS传感器遭遇7年来首次下滑!三星/SK海力士收入暴雷

2023-04-21 02:38:00

刚刚!高科紫麟景院火力全开;南京房贷利率动态曝光 世界热门

2023-04-21 02:26:28

【天天聚看点】在黄浦江开启奇幻之旅,上海首个水上沉浸式移动剧场亮相

2023-04-21 02:37:36

滴滴自动驾驶卡车KargoBot亮相上海车展,累计运货超120万吨 环球热门

2023-04-21 01:24:52

世界报道:《死亡岛2》畅快杀丧尸 RTX 4070冰龙助你畅玩

2023-04-21 00:55:27

樽前作戏君莫笑陆游_樽

2023-04-21 00:59:29

准备就绪!2023中国网络媒体论坛即将开启 今日聚焦

2023-04-21 00:39:45

陕西省铜川市发布寒潮蓝色预警

2023-04-20 23:58:40

李稻葵建议给国民发5000亿消费券,中央财政拿2000亿的钱,却可以办拉动1万亿消费的大事 独家焦点

2023-04-20 23:29:22

每日速读!一季度财政收入增速实现由负转正——重点支出得到有力保障

2023-04-20 23:24:27

全球微速讯:C视频丨逛成都大运特许商品北京首店 把“蓉宝”领回家

2023-04-20 22:47:27

23044期双色球晒票,你可以走慢点,但千万别后退 环球微资讯

2023-04-20 22:16:39

华擎Z77Extreme4Z77Pro3Z75Pro3大获全胜荣获三种组装类别「最佳推荐」主机板-当前热讯

2023-04-20 22:05:35

有失水准!戴维斯命中率29%,创至少10出手季后赛生涯新低 天天即时看

2023-04-20 21:29:27

要闻:金百泽:公司将于2023年4月27日披露2022年年度报告及2023年第一季度报告

2023-04-20 21:30:00

Stellantis任命新CFO|当前滚动

2023-04-20 21:28:59

环球看热讯:50家房企抢19宗地、万科华润中海回归,上海今年首批供地火热开拍

2023-04-20 21:09:23

环球速递!ST中潜光伏支架收入难以判断 深交所追问:信息披露是否准确

2023-04-20 20:09:38

天天要闻:【全环境立德树人】戏曲进校园 经典永流传——2023年戏曲进校园走进桓台县田庄中学

2023-04-20 19:49:25

港股异动 | IGG(00799)涨超10%创逾1年新高 月内累涨逾1.1倍 旗下塔防手游跃居3月出海手游下载榜第2名-全球资讯

2023-04-20 19:28:55

野生动物“肇事” 政府投保买单

2023-04-20 19:24:01