我还在学习普罗米修斯,所以也许我不确定这个问题是否正确。我只需要一个自定义注册表,我只能在其中收集我的指标。因为我正在学习 Prometheus,所以我真的对 Prometheus 提供的默认指标不感兴趣,即所有 go 指标,如go_gc_duration_seconds, go_gc_duration_seconds_count,go_threads等promhttp_metric_handler_requests_in_flightpackage mainimport ( "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我应该如何完成这项工作。
1 回答
四季花海
TA贡献1811条经验 获得超5个赞
promhttp.Handler() 为默认注册表创建一个处理程序。你需要使用 promhttp.HandlerFor(registry, HandlerOpts{})
- 1 回答
- 0 关注
- 87 浏览
添加回答
举报
0/150
提交
取消