Prometheus源码系列:指标采集(scrapeManager)
优采云 发布时间: 2020-08-15 02:16从下篇文章:Prometheus源码系列:服务发觉 (serviceDiscover),我们早已晓得,为了从服务发觉(serviceDiscover)实时获取监控服务(targets),指标采集(scrapeManager)通过解释器把管线(chan)获取来的服务(targets)存进一个map类型:map[string][]*targetgroup.Group.其中,map的key是job_name,map的value是结构体targetgroup.Group,该结构体收录该job_name对应的Targets,Labels和Source.
指标采集(scrapeManager)获取服务(targets)的变动,可分为多种情况,以服务降低为例,若有新的job添加,指标采集(scrapeManager)会进行重载,为新的job创建一个scrapePool,并为job中的每位target创建一个scrapeLoop.若job没有变动,只降低了job下对应的targets,则只需创建新的targets对应的scrapeLoop.
为本文剖析的代码都基于版本v2.7.1,会通过dlv输出多个参数的示例,所用的配置文件:Prometheus.yml配置文件示例.
指标采集(scrapeManager)获取实时监控服务(targets)的入口函数:scrapeManager.Run(discoveryManagerScrape.SyncCh()):
<p>
prometheus/cmd/prometheus/main.go
// Scrape manager.
g.Add(
func() error {
// When the scrape manager receives a new targets list
// it needs to read a valid config for each job.
// It depends on the config being in sync with the discovery manager so
// we wait until the config is fully loaded.