Prometheus 启动过程中,主要包含服务组件初始化,服务组件配置应用及启动各个服务组件三个部分,下面基于版本 v2.7.1,详细分析这三部分内容
1.服务组件初始化
(1) Storage组件初始化
Prometheus的Storage组件是时序数据库,包含两个:localStorage和remoteStorage.localStorage当前版本指TSDB,用于对metrics的本地存储存储,remoteStorage用于metrics的远程存储,其中fanoutStorage作为localStorage和remoteStorage的读写代理服务器.初始化流程如下
prometheus/cmd/prometheus/main.go
localStorage = &tsdb.ReadyStorage{} //本地存储
remoteStorage = remote.NewStorage(log.With(logger, "component", "remote"), //远端存储 localStorage.StartTime, time.Duration(cfg.RemoteFlushDeadline))
fanoutStorage = storage.NewFanout(logger, localStorage, remoteStorage) //读写代理服务器
(2) notifier 组件初始化
notifier组件用于发送告警信息给AlertManager,通过方法notifier.NewManager完成初始化
prometheus/cmd/prometheus/main.go
notifierManager = notifier.NewManager(&cfg.notifier, log.With(logger, "component", "notifier"))
(3) discoveryManagerScrape组件初始化
discoveryManagerScrape组件用于服务发现,当前版本支持多种服务发现系统,比如kuberneters等,通过方法discovery.NewManager完成初始化,
prometheus/cmd/prometheus/main.go
discoveryManagerScrape = discovery.NewManager(ctxScrape, log.With(logger, "component", "discovery manager scrape"), discovery.Name("scrape"))
(4) discoveryManagerNotify组件初始化
discoveryManagerNotify组件用于告警通知服务发现,比如AlertManager服务.也是通过方法discovery.NewManager完成初始化,不同的是,discoveryManagerNotify服务于notify,而discoveryManagerScrape服务与scrape
prometheus/cmd/prometheus/main.go
discoveryManagerNotify = discovery.NewManager(ctxNotify, log.With(logger, "component", "discovery manager notify"), discovery.Name("notify")
(5) scrapeManager组件初始化
scrapeManager组件利用discoveryManagerScrape组件发现的targets,抓取对应targets的所有metrics,并将抓取的metrics存储到fanoutStorage中,通过方法scrape.NewManager完成初始化
prometheus/cmd/prometheus/main.go
scrapeManager = scrape.NewManager(log.With(logger, "component", "scrape manager"), fanoutStorage)
(6) queryEngine组件
queryEngine组件用于rules查询和计算,通过方法promql.NewEngine完成初始化
prometheus/cmd/prometheus/main.go
opts =