【环球报资讯】【prometheus】-04 轻松搞定Prometheus Eureka服务发现
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 metadataeureka_sd_configs
配置可选项如下:
# The URL to connect to the Eureka server.server: # Sets the `Authorization` header on every request with the# configured username and password.# password and password_file are mutually exclusive.basic_auth: [ username: ] [ password: ] [ password_file: ]# Optional `Authorization` header configuration.authorization: # Sets the authentication type. [ type: | default: Bearer ] # Sets the credentials. It is mutually exclusive with # `credentials_file`. [ credentials: ] # Sets the credentials to the credentials read from the configured file. # It is mutually exclusive with `credentials`. [ credentials_file: ]# Optional OAuth 2.0 configuration.# Cannot be used at the same time as basic_auth or authorization.oauth2: [ ]# 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 ]
协议分析
通过前面分析的Prometheus服务发现原理以及基于文件方式服务发现协议实现的分析,Eureka服务发现大致原理如下图:
通过解析配置中eureka_sd_configs
协议的job生成Config,然后NewDiscovery
方法创建出对应的Discoverer
,最后调用Discoverer.Run()
方法启动服务发现targets。
1、基于文件服务发现配置解析
假如我们定义如下job:
- job_name: "eureka" eureka_sd_configs: - server: http://localhost:8761/eureka
会被解析成eureka.SDConfig
如下:
eureka.SDConfig
定义如下:
type SDConfig struct { // eureka-server地址 Server string `yaml:"server,omitempty"` // http请求client配置,如:认证信息 HTTPClientConfig config.HTTPClientConfig `yaml:",inline"` // 周期刷新间隔,默认30s RefreshInterval model.Duration `yaml:"refresh_interval,omitempty"`}
2、Discovery
创建
func NewDiscovery(conf *SDConfig, logger log.Logger) (*Discovery, error) { rt, err := config.NewRoundTripperFromConfig(conf.HTTPClientConfig, "eureka_sd", config.WithHTTP2Disabled()) if err != nil { return nil, err } d := &Discovery{ client: &http.Client{Transport: rt}, server: conf.Server, } d.Discovery = refresh.NewDiscovery( logger, "eureka", time.Duration(conf.RefreshInterval), d.refresh, ) return d, nil}
3、Discovery
创建完成,最后会调用Discovery.Run()
启动服务发现:
和上一节分析的服务发现之File机制类似,执行Run方法时会执行tgs, err := d.refresh(ctx)
,然后创建定时周期触发器,不停执行tgs, err := d.refresh(ctx)
,将返回的targets
结果信息通过channel传递出去。
4、上面Run
方法核心是调用d.refresh(ctx)
逻辑获取targets
,基于Eureka
发现协议主要实现逻辑就在这里:
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()
:遍历app
下instance
,将每个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
5、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.hostname和port(默认80),所以要注意注册到eureka上的hostname准确性,不然可能无法抓取;
2、metadata-map
数据会被转成__meta_eureka_app_instance_metadata_
格式标签,prometheus
进行relabeling
一般操作metadata-map
,可以自定义metric_path
、抓取端口等;
3、prometheus
的label
只支持[a-zA-Z0-9_]
,其它非法字符都会被转换成下划线,具体参加:strutil.SanitizeLabelName(m.XMLName.Local)
;但是eureka的metadata-map标签含有下划线时,注册到eureka-server上变成双下划线,如下配置:
eureka: instance: metadata-map: scrape_enable: true scrape.port: 8080
通过/eureka/apps获取如下:
总结
基于Eureka方式的服务原理如下图:
大概说明:Discoverer
启动后定时周期触发从eureka server
的/eureka/apps
接口拉取注册服务元数据,然后通过targetsForApp
遍历app
下的instance
,将每个instance
解析成target
,并将其它元数据信息转换成target
原标签可以用于target
抓取前relabeling
操作。
标签:
推荐
- 【环球报资讯】【prometheus】-04 轻松搞定Prometheus Eureka服务发现
- 通讯!清明节吃什么
- 租商铺在哪个网站-租商铺去哪个网站 天天微头条
- 天天快看点丨2023年2月江铃驭胜S350销量怎么样? 在15-20万中排名怎么样?
- 河北景县“世界水日”开展形式多样节水宣传活动 环球讯息
- 恒大表态:无任何复牌条件得到满足
- 天天看热讯:第三方商家售假 购物平台被判担责
- 二手房房贷利率是多少
- 当前信息:大恒科技(600288):3月22日北向资金增持15.89万股
- 微头条丨多年前买的熊猫金币涨了800元:有人8斤黄金变现174万
- 京东云首次发布数智平台优加,重塑品牌增长新动力
- 环球速递!dota2菠菜吧,dota2菠菜网安全吗那位朋友给介绍点经验啊
- 体验服s31赛季
- 上海莱士董秘回复:感谢您对我公司的关心和支持!在收购GDS45%股权的过程中 环球报道
- 首破2.8万亿元!年度业绩公布…
- 全球球精选!计算机科学之父是谁_计算机之父是谁
- 语文标点符号练习题_二年级标点符号练习题|环球百事通
- 牛黄解毒片的功效与作用治什么病_牛黄解毒片的功效与作用
- 天天简讯:汽车“降价潮”冲击波持续演化 ,品牌溢价效应淡化,毛利率降低
- 盛宣怀年谱长编
- 信阳市新县泗店乡团委开展青少年心理健康服务进村(社区)活动
- 护航“开往春天的花海列车”,北京铁警加强京包铁路沿线巡防 每日速讯
- 天天热文:电商创业模式有哪些_电商创业
- “白色石油”碳酸锂价格跌破30万元,有人欢喜有人愁? 今日讯
- “婴童装”强小镇
- 全球视讯!陕西科技大学怎么样知乎_陕西科技大学怎么样
- 全球观点:经常吃辣不仅延寿,患癌概率还低!收好这份正确吃辣守则,离好处更近一步
- 2021搬办公室黄道吉日_办公室搬迁黄道吉日
- 世界微动态丨阳光美语和天童美语哪个好(阳光美语)
- 南京大学闻海虎团队重复实验再次推翻美国室温超导轰动性研究
- 当前短讯!如图在rt三角形abc中∠acb等于90度ac=6_如图 在Rt三角形ABC中 角C 90度
- 每日速看!OnePlus Buds Pro 2 vs Google Pixel Buds Pro:你应该买哪个旗舰无线耳塞
- 碗莲什么时候施肥适合_碗莲什么时间适合进行施肥 焦点
- 环球最资讯丨枣庄二调2023各科试题答案汇总
- 2023陕西金太阳高三3月联考各科答案及试卷汇总_更新中_速读
- 3月20日生意社玉米基准价为2791.43元/吨
- 奔驰吃到闭门羹了!E级看了不知所措,没到42万奔驰被狠狠打脸
- 如何鉴别虾油质量的好坏 鉴别虾油质量的方法
- 数码恶魔传说女神转生_关于数码恶魔传说女神转生简介
- 当前快报:回天新材:光伏有机硅密封胶生产线建成投产
- 今日精选:基督山伯爵电影1955版_基督山伯爵电影1998版
- 【雄安多举措吸引人才 新增各类创新创业人才2.5万名】 记者18日从雄安新区首届科技·人才·创新周新闻发布会上获悉,雄安新区着力打造有雄安特色的人才政策服务工作体系,形成引才聚才的强大合力,新增各类创新创业人才2.5万名。(中新网)
- 全怎么组词的读法 每日快报
- 寻根文学有哪些代表作品_寻根文学
- 氢氧化钙的化学方程式_氢氧化镁与盐酸反应的化学方程式
- 数控锯床_关于数控锯床简介 世界讯息
- 环球快资讯:海思科猛攻创新药,冲击超200亿市场
- 焦点要闻:“桃花雪”后打响“夏粮保卫战”农业农村部组派专家分赴主产区指导春季田管
- 罕见!中国发现首个同时感染两种奥密克戎亚型患者,到底怎么回事 今日热议
- 粉色的对比色是什么_粉色的对比色是什么颜色 环球今日讯
- 我爱你老山兰原唱_我爱你老山兰歌词
- 当前聚焦:洪泽干部任前公示_洪泽党建网
- 甲流康复期食养建议|全球热文
- 全球聚焦:国足热身赛4-0取胜 林良铭武磊锁定锋线主力 海外拉练将提升实力
- 普京:一派胡言!不接受美媒有关“北溪”爆炸案说法
- 天天热点!皇社主帅:今晚我们的表现更好,如果你不信可以去问问穆里尼奥
- 焦点播报:图片报:担心奥尔莫在国家队过劳受伤,莱比锡不愿放他去西班牙队
- 副业刚需的重要性_副业刚需是什么意思 环球热消息
- 观热点:折叠屏板块3月16日跌1.82%,凯盛科技领跌,主力资金净流出8.62亿元
- 中航重机:2022年归母净利润同比增长34.9%,约为12亿元 环球短讯
- 天天热点!生态环境部审议并原则通过《生态保护红线监管数据互联互通接口技术规范》
- 焦虑症有哪些表现特征_焦虑症有哪些表现 世界热讯
- 四爷党结局如何_四爷党小说
- 全球最新:什么是效率和公平?_什么是效率和公平
- 世界新动态:效仿中日!大马改组教练增聘外教,男单强强联手打造李宗伟第二
- 时讯:全国现代五项冠军赛广州站完赛
- 焦点热门:钉钉打卡怎么改定位(钉钉打卡怎么改位置)
- 美国国债市场流动性恶化 因硅谷银行危机影响美联储加息路径-环球讯息
- exo应援词kokobop-exo应援口号
- 即时:3·15晚会丨荒诞的“卖惨坑老”!苦情戏直播局中局:“儿子”们专门骗老人买神药
- 每日速递:三亚口岸迎来今年首艘进口煤炭船舶
- 锂电整线智能化方案及装备提供商“烽禾升”获过亿元B轮融资
- 荒岛小说系列_荒岛小说 天天速看料
- 当前报道:孩子参观消防站要收费?北京消防:免费向社会开放
- 让教育回归“爱”的本质 一所城郊小学的“实在”教育 天天速递
- 精选!宝钛股份:3月14日融券卖出4.1万股,融资融券余额6.6亿元
- 焦点短讯!法无禁止即可为 法无授权不可为 出处_法无禁止即可为法无授权不可为什么意思
- 焦点报道:曼晚预测曼城vs莱比锡首发:B席、哈兰德、格拉利什搭档锋线
- 今日精选:邪枝窃贼任务物品在哪(邪枝窃贼任务物品在)
- 全球新资讯:美媒:银行接连倒闭颠覆美联储对抗通胀之路 未来恐陷两难
- 广西一景区游客操作无人机失误 砸伤高空表演者 今日聚焦
- 喝了假酒能自己恢复吗-全球速递
- 3月14日独角兽板块跌幅达2%_世界观察
- 凤凰传媒(601928)3月13日主力资金净买入493.17万元
- 每年高考时间是几月几号_每年高考时间是什么时候-环球快讯
- 行不行就看它了!日产SERENA将国产,实用性超奥德赛,20万起步|天天快报
- 西安高新公租房管理系统(附操作步骤)_世界热资讯
- 北上广不相信眼泪完整版_北上广不相信眼泪主题曲
- 焦点速讯:联动价13.1万/㎡!徐汇滨江汇元玺约95-195㎡3-4房预计三季度入市
- 苹果手机充电口松动怎么解决_苹果手机充电口怎么清理|环球看热讯
- 云南迪庆:高原美景引游人 天天速读
- 16平方铜线能带动多少瓦_16平方铜线能承受多少千瓦 环球快播
- 观天下!脸上的疤痕怎么去除_脸上有疤痕怎么去除
- 新车报讯:2020进博会:起亚Telluride亮相定位8座中大型SUV 环球速读
- 奥迪终于又火了!改款比奔驰C还漂亮,网友:上市又是一爆款 全球新资讯
- 怎样恢复我的文档内容_怎样恢复我的文档|全球热讯
- 不要按按钮什么时候出 公测上线时间预告_世界速递
- 于帕梅卡诺:我们真的很喜欢防守,下场我们必须再次保持零封
- 出轨妻子陈露全文阅读_出轨妻子陈露全文_关注
- 红马歌词女_红马歌曲简介-全球观焦点
X 关闭
行业规章
X 关闭