成人伊人青草久久综合网_91在线视频免费观看_毛片免费视频网站_亚洲欧美日韩在线中文字幕

天天觀焦點:【云原生 ? Prometheus】Prometheus 注冊中心Eureka服務(wù)發(fā)現(xiàn)原理

來源:騰訊云

Prometheus 注冊中心Eureka服務(wù)發(fā)現(xiàn)原理

概述

Eureka服務(wù)發(fā)現(xiàn)協(xié)議允許使用Eureka Rest API檢索出Prometheus需要監(jiān)控的targets,Prometheus會定時周期性的從Eureka調(diào)用Eureka Rest API,并將每個應(yīng)用實例創(chuàng)建出一個target。


(相關(guān)資料圖)

Eureka服務(wù)發(fā)現(xiàn)協(xié)議支持對如下元標(biāo)簽進(jìn)行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 #刷新間隔,默認(rèn)30s

eureka_sd_configs官網(wǎng)支持主要配置如下:

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協(xié)議實現(xiàn)

基于Eureka服務(wù)發(fā)現(xiàn)協(xié)議核心邏輯都封裝在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拉取元數(shù)據(jù):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部分轉(zhuǎn)成target  targets := targetsForApp(&app)        //解析的采集點合入一起  tg.Targets = append(tg.Targets, targets...) } return []*targetgroup.Group{tg}, nil}

refresh方法主要有兩個流程:

1、fetchApps():從eureka-server/eureka/apps接口拉取注冊服務(wù)信息;

2、targetsForApp():遍歷appinstance,將每個instance解析出一個target,并添加一堆元標(biāo)簽數(shù)據(jù)。

如下示例從eureka-server/eureka/apps接口拉取的注冊服務(wù)信息:

    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則默認(rèn)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}

解析比較簡單,就不再分析,解析后的標(biāo)簽數(shù)據(jù)如下圖:

標(biāo)簽中有兩個特別說明下:

1、__address__:這個取值instance.hostnameport(默認(rèn)80),所以要注意注冊到eureka上的hostname準(zhǔn)確性,不然可能無法抓取;

2、metadata-map數(shù)據(jù)會被轉(zhuǎn)成__meta_eureka_app_instance_metadata_格式標(biāo)簽,prometheus進(jìn)行relabeling一般操作metadata-map,可以自定義metric_path、抓取端口等;

3、prometheuslabel只支持[a-zA-Z0-9_],其它非法字符都會被轉(zhuǎn)換成下劃線,具體參加:strutil.SanitizeLabelName(m.XMLName.Local);但是eurekametadata-map標(biāo)簽含有下劃線時,注冊到eureka-server上變成雙下劃線,如下配置:

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

通過/eureka/apps獲取如下:

總結(jié)

基于Eureka服務(wù)發(fā)現(xiàn)原理如下圖:

基于eureka_sd_configs服務(wù)發(fā)現(xiàn)協(xié)議配置創(chuàng)建Discoverer,并通過協(xié)程運行Discoverer.Run方法,Eureka服務(wù)發(fā)現(xiàn)核心邏輯封裝discovery/eureka.gofunc (d *Discovery) refresh(ctx context.Context) ([]*targetgroup.Group, error)方法中。

refresh方法中主要調(diào)用兩個方法:

1、fetchApps:定時周期從Eureka Server/eureka/apps接口拉取注冊上來的服務(wù)元數(shù)據(jù)信息;

2、targetsForApp:解析上步驟拉取的元數(shù)據(jù)信息,遍歷app下的instance,將每個instance解析成target,并將其它元數(shù)據(jù)信息轉(zhuǎn)換成target元標(biāo)簽可以用于relabel_configs操作

標(biāo)簽:

推薦

財富更多》

動態(tài)更多》

熱點

成人伊人青草久久综合网_91在线视频免费观看_毛片免费视频网站_亚洲欧美日韩在线中文字幕

        色综合久久中文综合久久97| 日韩欧美国产一二三区| 国产精品三级久久久久三级| 国产一区二区三区国产| 国产亚洲精久久久久久| a亚洲天堂av| 日本一区二区三区在线不卡| 99精品久久久久久| 精品88久久久久88久久久| 亚洲18女电影在线观看| 久久精品男人的天堂| 欧美一区二区三区啪啪| 一区二区三区四区中文字幕| 日韩久久久久久| 国产精品无码永久免费888| 五月激情丁香一区二区三区| 中文字幕在线观看不卡视频| 欧美一区二区女人| 亚洲视频一区二区免费在线观看| 日本大胆欧美人术艺术动态| 91麻豆国产福利在线观看| 色偷偷久久人人79超碰人人澡| 久久精品网站免费观看| 欧美aaa在线| 国产精品婷婷午夜在线观看| 欧美日韩亚洲不卡| 欧美韩日一区二区三区| 欧美aaaaaa午夜精品| 中日韩av电影| 7777精品久久久大香线蕉| 综合激情成人伊人| 成人va在线观看| 亚洲精品日产精品乱码不卡| 久久久久久一二三区| 国内外成人在线视频| 亚洲综合色区另类av| 亚洲国产成人一区二区三区| 国产高清不卡一区| 午夜精彩视频在线观看不卡| 欧美三级视频在线播放| 这里只有精品电影| 亚洲福中文字幕伊人影院| 91老司机福利 在线| 欧美三级日本三级少妇99| 欧美日韩国产一级片| 一区二区三区四区精品在线视频| 成人av网址在线| 欧美丝袜丝交足nylons| 亚洲18女电影在线观看| 2022国产精品视频| 欧美一级一区二区| 久久成人麻豆午夜电影| 玉足女爽爽91| 国产精品美女久久久久久久久 | 色视频欧美一区二区三区| 中文字幕日韩精品一区| 91最新地址在线播放| 欧美一级黄色录像| 精品无人码麻豆乱码1区2区| 亚洲国产美女搞黄色| 亚洲视频一区二区在线| 久久日一线二线三线suv| 日韩欧美第一区| 国产一区二区三区最好精华液| 一区二区成人在线观看| 亚洲私人影院在线观看| 久久丝袜美腿综合| 精品精品国产高清一毛片一天堂| 韩国精品一区二区| 欧美亚洲高清一区二区三区不卡| 午夜精品福利久久久| 国产精品久久二区二区| 久久青草欧美一区二区三区| 成人午夜在线免费| 在线一区二区三区四区| 亚洲国产精品人人做人人爽| 综合电影一区二区三区| 中文字幕一区三区| 国产亚洲欧美一区在线观看| 制服丝袜一区二区三区| 精品综合免费视频观看| 亚洲sss视频在线视频| 婷婷国产v国产偷v亚洲高清| 亚洲综合男人的天堂| 亚洲色图清纯唯美| 国产精品成人免费| 亚洲色图清纯唯美| 1024亚洲合集| 洋洋av久久久久久久一区| √…a在线天堂一区| 亚洲另类色综合网站| 国产亚洲精品精华液| 国产婷婷色一区二区三区| 久久免费午夜影院| 国产欧美久久久精品影院| 久久免费电影网| 久久网站热最新地址| 久久综合色一综合色88| 精品久久一区二区三区| 国产成人亚洲精品青草天美| 日韩一级高清毛片| 91小视频免费观看| 欧美国产精品久久| 国产精品久久久久久久浪潮网站 | 石原莉奈在线亚洲二区| 色综合视频一区二区三区高清| 日日夜夜一区二区| 91成人在线免费观看| 国产在线一区二区| 日韩欧美一区二区免费| 国产成人综合精品三级| 精品欧美乱码久久久久久| www国产精品av| 中文字幕一区二| 亚洲免费观看高清完整版在线观看熊| 亚洲香肠在线观看| 一本一道久久a久久精品| 久久99久国产精品黄毛片色诱| 欧美喷水一区二区| 99re这里只有精品视频首页| 国产欧美精品一区| 亚洲丝袜美腿综合| 婷婷国产在线综合| 777午夜精品视频在线播放| 国产美女精品在线| 精品久久国产老人久久综合| 国产欧美日产一区| 亚洲一区二区三区在线| 在线观看日韩高清av| 成人免费毛片片v| 中文字幕精品—区二区四季| 国产精品福利一区| 亚洲一区二区三区四区中文字幕| 在线精品国精品国产尤物884a| 福利电影一区二区| 国产精品乱人伦中文| 亚洲国产三级在线| 国产麻豆精品theporn| 国产午夜亚洲精品午夜鲁丝片| 中文字幕日本不卡| 免费观看在线色综合| 日韩欧美一区二区不卡| 欧美—级在线免费片| 午夜国产精品影院在线观看| 欧美精选在线播放| 国产婷婷色一区二区三区四区 | 成人午夜视频在线观看| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 亚洲高清免费视频| 欧美日韩中文字幕一区| 91麻豆精品在线观看| 亚洲猫色日本管| 欧美三级电影网站| jizzjizzjizz欧美| 一区二区三区四区在线播放| 欧美中文一区二区三区| 99精品国产视频| 一区二区三区日韩在线观看| 欧美日韩亚洲综合在线 | 国产日韩欧美亚洲| 亚洲一区二区欧美日韩| 国产黄色成人av| 综合久久久久久| 欧美日韩精品系列| 中文字幕成人在线观看| 日韩影院在线观看| 久久婷婷一区二区三区| 亚洲成人黄色影院| 国产成人精品亚洲日本在线桃色| 中文字幕在线一区| 欧美日韩精品三区| 亚洲欧洲av色图| 国产精品一区二区果冻传媒| 亚洲色图在线视频| 51久久夜色精品国产麻豆| 中文字幕一区二区三区在线观看| 精品一区二区三区影院在线午夜 | 亚洲国产日韩a在线播放性色| 波多野结衣精品在线| 亚洲成人一区二区| 久久在线观看免费| 亚洲桃色在线一区| 国产91露脸合集magnet| 亚洲一区二区三区中文字幕在线 | ●精品国产综合乱码久久久久| 日本福利一区二区| 亚洲国产精品成人综合| 国产一区二区在线影院| 亚洲男人天堂一区| 欧美videossexotv100| 亚洲国产欧美在线人成| 2017欧美狠狠色| 精品一区二区免费| 一区2区3区在线看| 久久一区二区视频| 色偷偷一区二区三区| 欧美高清在线视频| 懂色av一区二区三区蜜臀| 香蕉乱码成人久久天堂爱免费| 久久精品一区二区三区四区|