我在“重置”仪表的值时遇到问题,因为一旦启动 http servervice 或者当我开始循环我的“runJob”时“生命停止”,那么服务器没有启动..
我试图建立这一点的方式:
我从 YAML 数组加载所有 Job-s。我从中生成仪表,然后我运行循环以获取它们的一些值。然后我注册它们。
之后我为 prometheus 启动 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 响应代码并将它们广告到 prometheus 仪表值。- 一切都很好,它在启动时效果很好,但是在我尝试启动它之后(如 main go 所示)它只是卡住了 -
服务器已启动且值未更改。
所以我有(我的选择)两种可能的修复方法:
我的“runJobs”是不定式循环,每分钟运行一次
- 这就是为什么服务器没有启动。
- 但是,当我在第一次运行(循环)时添加一个 if 语句时应该启动服务器,那么当服务器启动时它仍然会卡住(下一个循环循环只是不会启动)
而另一部分,当我首先启动服务器时,它永远不会到达它启动 runJobs() 的部分
首选的结果应该是:
服务器以第一个值启动,每分钟后它再次运行“runJobs”。