首页 >资讯 > > 正文

每日报道:【prometheus】-08 图解云原生服务发现机制

来源:腾讯云 2023-03-24 23:14:09

Prometheus服务发现机制之Kubernetes

概述

分析过云原生监控接入方案,下面开始看下云原生服务发现机制。Prometheus本身就是作为云原生监控出现的,所以对云原生服务发现支持具有天然优势。Kubernetes服务发现协议允许使用Kubernetes Rest API检索出Prometheus需要监控的targets,并且跟着集群状态进行同步变更。


(资料图片)

kubernetes_sd_configs表示基于Kubernetes进行服务发现,服务发现目标类型使用role表示,比如:role=service,表示针对Kubernetes中的service资源对象,进行具体的服务发现操作。kubernetes_sd_configs支持的role包括:node、service、pod、endpoints、ingress

原理

基于Kubernetes进行服务发现,主要针对Kubernetes中的service、pod、node等资源对象进行服务发现,Prometheus使用client-gorole中指定的资源对象进行监听。一般Prometheus部署在Kubernetes集群中的话,Prometheus可以直接利用指定的Service AccountKubernetes API进行访问。若PrometheusKubernetes集群之外,则kubernetes_sd_configs还需指定监控集群的API ServerURL以及相关的认证信息,从而能够创建对应集群的Client

“client-go是kubernetes官方提供的go语言的客户端库,go应用使用该库可以访问kubernetes的API Server,这样我们就能通过编程来对kubernetes资源进行增删改查操作。

配置示例:

- job_name: kubernetes-pod    metrics_path: /metrics    kubernetes_sd_configs:    - role: pod      namespaces:        names:        - "test01"      api_server: https://apiserver.simon:6443      bearer_token_file: d:/token.k8s       tls_config:        insecure_skip_verify: true    bearer_token_file: d:/token.k8s    tls_config:      insecure_skip_verify: true

协议分析

Kubernetes服务发现大致原理如下图:

1、通过clientset访问API Server,根据role配置获取不同的集群资源对象;

2、通过List & Watch机制,注册监听事件:

p.informer.AddEventHandler(cache.ResourceEventHandlerFuncs{ AddFunc: func(o interface{}) {  podAddCount.Inc()  p.enqueue(o) }, DeleteFunc: func(o interface{}) {  podDeleteCount.Inc()  p.enqueue(o) }, UpdateFunc: func(_, o interface{}) {  podUpdateCount.Inc()  p.enqueue(o) },})

通过informer.AddEventHandler函数可以为集群资源添加资源事件回调方法,支持3种资源事件回调方法:AddFunc、DeleteFunc、UpdateFunc,分别对应新增资源、修改资源和删除资源时事件触发。

3、资源变更注册回调方法中,将目标资源对象转成key放入到队列queue中,如下pod资源:

func (p *Pod) enqueue(obj interface{}) {    //obj是pod资源对象,通过DeletionHandlingMetaNamespaceKeyFunc将其转换成key    //比如key=test01/nginx-deployment-5ffc5bf56c-n2pl8,即namespace/pod_name格式 key, err := cache.DeletionHandlingMetaNamespaceKeyFunc(obj) if err != nil {  return } p.queue.Add(key)}

4、后台goroutines无限循环执行process逻辑,process逻辑中就是不停从queue中提取数据进行处理,比如pod.go对应逻辑如下:

func (p *Pod) process(ctx context.Context, ch chan<- []*targetgroup.Group) bool { keyObj, quit := p.queue.Get() if quit {  return false } defer p.queue.Done(keyObj) key := keyObj.(string) //与 MetaNamespaceKeyFunc() 功能相反的是 SplitMetaNamespaceKey() 函数,它将传入的 Key 分解,返回对象所在的命名空间和对象名称。 namespace, name, err := cache.SplitMetaNamespaceKey(key) if err != nil {  return true }    //根据key获取资源对象obj o, exists, err := p.store.GetByKey(key) if err != nil {  return true } if !exists {  //pod被删除时,exists=false  // 然后发送targets为空的tg,即移除  send(ctx, ch, &targetgroup.Group{Source: podSourceFromNamespaceAndName(namespace, name)})  return true } pod, err := convertToPod(o) if err != nil {  level.Error(p.logger).Log("msg", "converting to Pod object failed", "err", err)  return true }    //p.buildPod(pod):将资源对象信息转成target groups send(ctx, ch, p.buildPod(pod)) return true}

大致逻辑:

a、根据从queue中提取的key,使用p.store.GetByKey(key)获取对应的资源对象,比如pod、service等对象;

b、如果对象不存在,则表示资源对象被删除,则创建一个targets集合为空的target groups,这样Scrape Manager就会移除targets

c、使用buildXXX(obj)将资源对象解析成target groups,如buildNode()、buildPod()等;

d、最后使用send()方法将解析的target groups通过通道channel传递出去,最终传递给Scrape Manager,这样target groupstargets将被Prometheus抓取监控数据。

pod资源的target groups结构如下示例,每个pod对象都会被解析成target groups,其中包含targets集合、labels标签集合:

Discovery创建

1、假如我们定义如下抓取作业:

- job_name: kubernetes-nodes-cadvisor    metrics_path: /metrics    scheme: https    kubernetes_sd_configs:    - role: node      api_server: https://apiserver.simon:6443      bearer_token_file: d:/token.k8s       tls_config:        insecure_skip_verify: true    bearer_token_file: d:/token.k8s    tls_config:      insecure_skip_verify: true    relabel_configs:    # 将标签(.*)作为新标签名,原有值不变    - action: labelmap      regex: __meta_kubernetes_node_label_(.*)    # 修改NodeIP:10250为APIServerIP:6443    - action: replace      regex: (.*)      source_labels: ["__address__"]      target_label: __address__      replacement: 192.168.52.151:6443    - action: replace      source_labels: [__meta_kubernetes_node_name]      target_label: __metrics_path__      regex: (.*)      replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor  

会被解析成kubernetes.SDConfig如下:

kubernetes.SDConfig定义如下:

type SDConfig struct { APIServer          config.URL              `yaml:"api_server,omitempty"` Role               Role                    `yaml:"role"` HTTPClientConfig   config.HTTPClientConfig `yaml:",inline"` NamespaceDiscovery NamespaceDiscovery      `yaml:"namespaces,omitempty"` Selectors          []SelectorConfig        `yaml:"selectors,omitempty"`}

2、Discovery创建

//创建Clientset,可看成操作Kubernetes API的客户端c, err := kubernetes.NewForConfig(kcfg) if err != nil {  return nil, err }return &Discovery{  client:             c,  logger:             l,  role:               conf.Role,  namespaceDiscovery: &conf.NamespaceDiscovery,  discoverers:        make([]discovery.Discoverer, 0),  selectors:          mapSelector(conf.Selectors),}, nil

3、Discovery创建完成,最后会调用Discovery.Run()启动服务发现:

func (d *Discovery) Run(ctx context.Context, ch chan<- []*targetgroup.Group) { d.Lock() namespaces := d.getNamespaces() switch d.role { case RoleEndpointSlice:  role=endpointslice逻辑 case RoleEndpoint:  role=endpoints逻辑 case RolePod:  role=pod逻辑 case RoleService:  role=service逻辑 case RoleIngress:  role=ingress逻辑 case RoleNode:  role=node逻辑 default:  level.Error(d.logger).Log("msg", "unknown Kubernetes discovery kind", "role", d.role) } var wg sync.WaitGroup for _, dd := range d.discoverers {  wg.Add(1)  go func(d discovery.Discoverer) {   defer wg.Done()   d.Run(ctx, ch)  }(dd) } d.Unlock() wg.Wait() <-ctx.Done()}

4、注册集群资源对象监听事件回调逻辑:

for _, namespace := range namespaces { p := d.client.CoreV1().Pods(namespace) plw := &cache.ListWatch{  ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {   options.FieldSelector = d.selectors.pod.field   options.LabelSelector = d.selectors.pod.label   return p.List(ctx, options)  },  WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {   options.FieldSelector = d.selectors.pod.field   options.LabelSelector = d.selectors.pod.label   return p.Watch(ctx, options)  }, } pod := NewPod(  log.With(d.logger, "role", "pod"),  cache.NewSharedInformer(plw, &apiv1.Pod{}, resyncPeriod), ) d.discoverers = append(d.discoverers, pod) go pod.informer.Run(ctx.Done())}
上一篇: 下一篇:
x
推荐阅读

每日报道:【prometheus】-08 图解云原生服务发现机制

2023-03-24

2021年生肖运程 流年运势分析-全球观焦点

2023-03-24

ステム by nano.RIPE|当前快看

2023-03-24

每日讯息!“等了九个月终于得到了公道” 老人故意推倒摩托车案当庭宣判

2023-03-24

广元市朝天区强化源头监管集中约谈学校食材供应商 环球讯息

2023-03-24

有什么打桥牌的软件_在线打桥牌

2023-03-24

我校学生夜闯女生宿舍被行拘

2023-03-24

唐人街探案2结局什么意思 关注

2023-03-24

环球热消息:现场直击!广州多区出现冰雹,接下来的天气……

2023-03-24

南阳社保证明怎么查询打印? 每日焦点

2023-03-24

前港姐张名雅拍MV秀“汤碗胸”,疑走光露神秘三角 全球快播报

2023-03-24

菲律宾群岛地区发生5.2级地震 震源深度10千米

2023-03-24

资讯:两位知情人士表示,瑞士当局和瑞银集团正在力争在一个月内完成对瑞信的收购,以试图留住该银行的客户和员工

2023-03-24

皮肤黑的女生穿什么颜色

2023-03-24

资本增殖需要技术和见识增长

2023-03-24

大爆冷!张本智和0-3惨败,19岁黑马小将崛起,曾多次突破中国队|天天百事通

2023-03-23

张志军会见贝克休斯全球副总裁兼中国区总裁曹阳 热门

2023-03-23

【新视野】湖南将首次全面实施义务教育优质均衡发展诊断监测

2023-03-23

每日热议!海贼王萨博怎么死的

2023-03-23

最资讯丨2023“一刻钟品质生活节”正式启动 打造社区居民生活“幸福圈”

2023-03-23

国羽男单3人往返,张艺曼逆转王祉怡!特鲁姆普杜越淘汰头号种子_每日简讯

2023-03-23

管理小婴儿的夜间母乳喂养

2023-03-23

主播也是劳动者,直播时代下新型劳动关系如何认定? 头条焦点

2023-03-23

工信部:1-2月通信业电信业务收入累计完成2803亿元 同比增长7.9%_全球观察

2023-03-23

环球关注:中泰证券给予景业智能增持评级,乘核工业智能化春风,智能装备龙头冉冉升起

2023-03-23

第一个参加奥运会的中国运动员是_实时

2023-03-23

每日时讯!绘就“智富”画卷!省乡村振兴局、省农科院向88个脱贫县选派技术服务团

2023-03-23

华夏稳福六个月持有混合A基金经理变动:增聘张海静为基金经理 当前快看

2023-03-23

漂亮580网_关于漂亮580网介绍

2023-03-23

支付宝里面的余利宝和余额宝有什么区别_支付宝余利宝和余额宝的区别_世界新消息

2023-03-23

世界快看:新特能源(01799):提请股东大会延长授权董事会全权办理建议发行A股相关事宜有效期

2023-03-22

天天新动态:有道众包是什么

2023-03-22

全球热文:爸妈不在家姐日_爸妈不在家姐勾引我

2023-03-22

总裁的新鲜小妻子正版 总裁的新鲜小妻子 环球速看

2023-03-22

2月4日几点打春

2023-03-22

当前时讯:南充嘉陵:撂荒地变花海 游客踏青纷至沓来

2023-03-22

青岛四方长途汽车站电话号码是多少啊(青岛四方长途汽车站电话号码是多少)_全球热议

2023-03-22

当前看点!新车 | 涨价1.3万元,吉利帝豪EV纯电动轿车售价调整,售15.98万起

2023-03-22

焦点观察:广东省特检院珠海检测院完成百余台叉车检验 助力大型企业设备安全运行

2023-03-22

肌肤在济南的冬天的意思_济南的冬天肌肤的意思

2023-03-22

焦点精选!前有硅谷银行,后有瑞士信贷,全球银行业危机现传导效应?

2023-03-22

联瑞新材(688300):3月21日北向资金增持10.19万股

2023-03-22

【环球新要闻】OPPOFindX6Pro、三星S23UItra、vivoX90Pro+拍照对比,差距真的大

2023-03-21

今日热搜:2039,车牌号2039谐音好吗?

2023-03-21

天天微速讯:600MW海上风电项目风机安装等施工中标公示

2023-03-21

34所自划线高校公布复试分数线 多校体育、体育学专业涨幅大

2023-03-21

新一批进口游戏版号公布!《妖怪手表4》NS国行版过审 天天热点

2023-03-21

宋明珠刘子苓_子苓 世界快讯

2023-03-21

煤炭大市鄂尔多斯全力打造零碳产业园

2023-03-21

北京车牌怎么区分地区_北京车牌号怎么区分-世界热文

2023-03-21

安心财产保险有限责任公司

2023-03-21

毕业即军官!国防科技大学等你来_焦点消息

2023-03-20

完成汛前测量清洗度量工具,广州水文分局做好汛前准备工作

2023-03-20

移植一次大概多少钱_换了心脏的人能活多久|环球快消息

2023-03-20

百奥泰:股东拟合计减持不超过3%公司股份|天天资讯

2023-03-20

60GWh!宁德时代“灯塔工厂”落地贵州贵安 建成后自动化率将达95%

2023-03-20

环球微动态丨又丧又好听的网名微信 好听微丧干净的微信昵称

2023-03-20

天天速读:爱上特种兵:卓然监听女主气出病,米谷黑化,暗害梁牧泽被抓现行

2023-03-20

今日热搜:小儿疝气挂什么科室_小儿疝气

2023-03-20

当前速看:午夜香吻灵魂无_午夜香吻电影在线

2023-03-20

最新消息:最近好看的小说有哪些_最近好看的小说

2023-03-19

价格前线|3月19日内蒙古森泰天然气异动提示

2023-03-19

山人运动

2023-03-19

说真的,最好不要现场演示智能语音|当前短讯

2023-03-19

挪威一处能整天欣赏山间美景的现代度假屋 每日信息

2023-03-19

今年新增床位超3200张-环球聚看点

2023-03-19

excel使用技巧大全_excel筛选怎么用

2023-03-18

价格前线|3月18日内蒙古森泰天然气异动提示

2023-03-18

卡尔·伊坎称:美国的经济正在崩溃 因为通货膨胀和糟糕的企业领导

2023-03-18

环球速看:突传噩耗!美国演员兰斯莱迪克去世,享年60岁,曾演《疾速追杀》

2023-03-18

3·15晚会曝光,这5个游乐设施,少带娃去玩 焦点热门

2023-03-18

注资是什么意思新闻_注资是什么意思 世界速读

2023-03-18

大数据思维包括哪些方面_大数据思维包括哪些 世界简讯

2023-03-17

看热讯:大鹏党工委深化“五好”单位建设为高质量发展蓄势赋能

2023-03-17

每日短讯:给排水yf是什么意思_yf是什么意思

2023-03-17

从112个空间到112座城市 浦东首创最美公共文化空间大赛走向全国 微头条

2023-03-17

【世界播资讯】稳定2023年大豆生产一揽子支持政策出炉

2023-03-17

3-0晋级!36岁苏神建功:抢断+过人+打死角,11场造13球-环球热资讯

2023-03-17

利群红利香烟价格表图_利群红利多少钱一包_世界快资讯

2023-03-17

天天播报:多囊卵巢综合症有什么表现症状_多囊卵巢综合症有哪些表现

2023-03-17

树立文化自信_当代青年应该如何树立文化自信

2023-03-17

环球时讯:张家界文化旅游推介恳谈会在泰国曼谷举行

2023-03-16

厦门大嶝小镇老爷车博物馆游玩攻略(开放时间+地点+门票)_世界热讯

2023-03-16

【速看料】文心一言调用预约1小时涌入3万企业客户,申请页被挤爆!

2023-03-16

2023浙江兰溪第八届乡村马拉松赛路线

2023-03-16

突发绝症!46岁“天才学者”:我即将告别这个世界了_即时

2023-03-16

美亚裔人士纪念亚特兰大枪击案两周年,反对种族歧视和暴力

2023-03-16

我省2022年受理消费投诉75.1万件 为消费者挽回损失1.36亿元-天天速看料

2023-03-16

护星卡片|世界快报

2023-03-16

天天热头条丨投资提速 稳经济政策显效

2023-03-16

提振信心放心消费 省市区联合举办“3·15”主题活动-世界观热点

2023-03-15

世界快报:今日外婆家属于什么菜系_外婆家是什么菜系

2023-03-15

天天观热点:石家庄周生生黄金价格多少钱一克(2023年3月15日)

2023-03-15

上海女子殴打代驾叫嚣老公是民警详细内容

2023-03-15

男子守号十余年揽体彩1427万 生活不会因中奖改变

2023-03-15

2023中国郑州铁路局人才网招聘官网

2023-03-15

天天关注:椎静脉丛

2023-03-15

脉冲光治疗_脉冲光 今头条

2023-03-15

全场亏本甩卖,跳楼价?广汽本田大张旗鼓降8万,蹭流量嫌疑很大_环球信息

2023-03-14

日本央行:日本银行有足够缓冲来应对外部冲击-全球滚动

2023-03-14