prometheus源码阅读 - 配置初始化与重加载

首次加载

cmd/prometheus/main.go

reloadables := []Reloadable{
		remoteStorage,
		targetManager,
		ruleManager,
		webHandler,
		notifier,
	}
reloadConfig(cfg.configFile, logger, reloadables...)

其中,reloadConfig函数的核心代码如下,主要是调用实现Reloadable的所有类型的ApplyConfig方法进行config的加载:

conf, err := config.LoadFile(filename)
for _, rl := range rls {
	rl.ApplyConfig(conf);
}

更新

cmd/prometheus/main.go中有如下来监听更新的请求

  1. SIGHUP更新
  2. 调用api来更新
go func() {
		<-hupReady
		for {
			select {
			case <-hup:
				reloadConfig(cfg.configFile, logger, reloadables...);
			case rc := <-webHandler.Reload():
				reloadConfig(cfg.configFile, logger, reloadables...);
			}
		}
	}()

SIGHUP更新

通过向Prometheus进程发送SIGHUP信号进行配置重新加载。

hup := make(chan os.Signal)
signal.Notify(hup, syscall.SIGHUP)

api更新

如果有配置、target、alert等的变更,提供rest api:/-/reload进行配置重新加载。 api代码:

router.Post("/-/reload", h.reload)


func (h *Handler) reload(w http.ResponseWriter, r *http.Request) {
	rc := make(chan error)
	h.reloadCh <- rc
	if err := <-rc; err != nil {
		http.Error(w, fmt.Sprintf("failed to reload config: %s", err), http.StatusInternalServerError)
	}
}

上述api能调用的前提是启动命令中得加入:--web.enable-lifecycle

转载于:https://my.oschina.net/sannychan/blog/1596129

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值