Loops 普罗米修斯仪表,带定制收集器-go

Loops 普罗米修斯仪表,带定制收集器-go,loops,go,prometheus,Loops,Go,Prometheus,我在“重置”仪表的值时遇到问题,因为http servervice启动时“生命停止”,或者当我开始循环“runJob”时,服务器未启动 我试图证明这一点的方式: 我从YAML数组加载所有作业。 我从中生成仪表,然后运行循环来获取它们的一些值。 然后我注册它们 然后我为普罗米修斯启动http服务 所有的工作都很完美,直到下一个周期——下一个周期还没有开始 我试图在函数内部移动函数等 这就是我的主要功能: //gets poll time from yaml (60s) ti

我在“重置”仪表的值时遇到问题,因为http servervice启动时“生命停止”,或者当我开始循环“runJob”时,服务器未启动

我试图证明这一点的方式:

我从YAML数组加载所有作业。 我从中生成仪表,然后运行循环来获取它们的一些值。 然后我注册它们

然后我为普罗米修斯启动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语句,即在第一次运行(循环)时应该启动服务器,那个么当服务器启动时,它仍然会卡住(下一个循环循环就不会启动)
  • 另一部分,当我首先启动服务器时,它永远不会到达启动runJobs()的部分

  • 首选的结果应该是:


    服务器以第一个值启动,每分钟后它都会再次运行“runJobs”。

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

    go func() {
     //loop after given time
        for range timerCh {
            runJobs()
    
        }
    }()
    
    它在自己的goroutine中运行for循环,runJobs每隔一段时间执行一次