带有自定义收集器的普罗米修斯量规-go

问题描述 投票:0回答:1

我在“重置”量表的值时遇到问题,因为一旦启动http servervice或当我开始循环“ runJob”然后服务器就没有启动时,“生命就停止了”。

我尝试建立此方法的方式:

i从YAML数组加载所有Job-s。我从中生成量规,然后运行循环以获取一些值。然后我注册它们。

然后在那之后,我启动了普罗米修斯的http服务。

一切正常,直到下一个周期-下一个周期才刚刚开始。

我试图在函数等内部移动函数。

所以这就是我的主要功能:

        //gets poll time from yaml (60s)
    timerCh := time.Tick(time.Duration(appConf.PollTimeSec) * time.Second)

    //loop after given time
    for range timerCh {
        runJobs()

    }

    //start new muxServer
    server := http.NewServeMux()
    log.Println("DEBUG: Starting server")
    server.Handle(appConf.HostPath, promhttp.Handler())

    http.ListenAndServe(":"+appConf.ListenerPort, server)

和我的runJobs函数基本上获取Http响应代码并将它们投放到普罗米修斯量表值。-一切正常,并且在启动时效果很好,但是在我尝试启动它之后,就进入睡眠状态(如主菜单中所示),它只是卡住了-

服务器已启动,并且值不变。

所以我有(可能的)解决问题的两种方法:

  1. 我的“ runJobs”是每分钟运行一次的不定式循环

    • 这就是为什么服务器无法启动。
    • 但是当我添加一个if语句时,应该在服务器的第一个run(cycle)上启动,然后在服务器启动时它仍然卡住(下一个循环周期就不会启动)
  2. 还有另一部分,当我首先启动服务器时,它再也不会到达启动它的那一部分runJobs()

首选结果应该是:

服务器从第一个值启动,并且每分钟之后它再次运行“ runJobs”。

loops go prometheus
1个回答
0
投票

编写方式,您的程序将不会超出for循环的范围。请尝试以下方法:

go func() {
 //loop after given time
    for range timerCh {
        runJobs()

    }
}()

这将在其自己的goroutine中运行for循环,并且runJobs经常执行。

© www.soinside.com 2019 - 2024. All rights reserved.