我在“重置”量规的值时遇到问题,因为一旦启动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响应代码
并将它们广告化为普罗米修斯标准值。
-一切正常,并且在启动时效果很好,但是在我尝试启动它之后,就进入睡眠状态(如主视图中所示),只是卡住了-

服务器已启动,值不变。

因此,我(有选择地)有两种可能的解决方法:
  • 我的“runJobs”是不定式循环,每分钟运行一次
  • 那就是为什么服务器未启动。
  • 但是,当我在其中添加一条if语句时,应该在第一次运行(cycle)时启动服务器,然后在服务器启动时它仍然卡住(下一个循环周期就不会启动)
  • 和另一部分,当我首先启动服务器时,它再也不会到达它启动的部分runJobs()

  • 首选结果应该是:

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

    最佳答案

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

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

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

    关于loops - 带自定义收集器的普罗米修斯量规-Go,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57993878/

    10-15 20:58