普罗米修斯自定义注册表不工作

我还在学习普罗米修斯,所以也许我不确定这个问题是否正确。


我只需要一个自定义注册表,我只能在其中收集我的指标。因为我正在学习 Prometheus,所以我真的对 Prometheus 提供的默认指标不感兴趣,即所有 go 指标,如go_gc_duration_seconds, go_gc_duration_seconds_count,go_threads等promhttp_metric_handler_requests_in_flight


package main


import (

    "fmt"

    "log"

    "math/rand"

    "net/http"

    "sync"

    "time"


    "github.com/prometheus/client_golang/prometheus"

    "github.com/prometheus/client_golang/prometheus/promhttp"

)


var Types = [2]string{"Random", "Simple"}


type Queue struct {

    mutex sync.Mutex

    jobs  []Job

}


func (q *Queue) Add(job Job) {

    q.mutex.Lock()

    q.jobs = append(q.jobs, job)

    q.mutex.Unlock()

}


func (q *Queue) Dequeue() Job {

    q.mutex.Lock()

    job := q.jobs[0]

    q.jobs = q.jobs[1:]

    q.mutex.Unlock()

    return job

}


type Job struct {

    message string

    Type    string

}


func (j *Job) Run() {

    fmt.Println(j.message)

}


var jobsInQueue = prometheus.NewGaugeVec(

    prometheus.GaugeOpts{

        Name: "jobs_in_queue",

        Help: "Current number of jobs in the queue",

    },

    []string{"job_type"},

)

var register = prometheus.NewRegistry()

var queue = &Queue{}


func init() {

    rand.Seed(2)

    // prometheus.MustRegister(jobsInQueue)

    // register the collector.. 

    register.MustRegister(jobsInQueue)

    queue.jobs = make([]Job, 0)

}


func main() {


    go func() {

        i := 0

        for {

            job := Job{}

            num := rand.Intn(2)

            type_d := Types[num]

            job.Type = type_d

            job.message = fmt.Sprintf("[%s] job %d", type_d, i)

            enqueueJob(job)

            fmt.Println(i)

            i++

            time.Sleep(1 * time.Second)

        }

    }()


    // sleep so that we do not read from a empty queue

    time.Sleep(2 * time.Millisecond)


    go func() {

        for {

            runNextJob()

            time.Sleep(2 * time.Second)

        }

    }()


    http.Handle("/metrics", promhttp.Handler())

    log.Fatal(http.ListenAndServe(":8080", nil))


}



但是当我运行以下代码时,我没有jobs_in_queue在./metrics8080


我应该如何完成这项工作。


DIEA
浏览 89回答 1
1回答

四季花海

promhttp.Handler() 为默认注册表创建一个处理程序。你需要使用 promhttp.HandlerFor(registry, HandlerOpts{})
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go