2017-08-28 114 views
-1

我有几个访问URL,并且我想用prometheus监视每个请求的成本时间。如何使用golang web服务器中的prometheus监控请求成本时间

但我不知道使用什么样的度量来收集data.any帮助?

这是演示代码:

package main 

import (
    "github.com/prometheus/client_golang/prometheus" 
    "io/ioutil" 
    "net/http" 
    "fmt" 
    "time" 
) 
var (
    resTime = prometheus.NewSummaryVec(
     prometheus.SummaryOpts{ 
      Name: "response_time", 
      Help: "cost time per request", 
     }, 
     []string{"costTime"}, 
    ) 
) 


func main() { 
    urls := []string{"http://www.google.com","http://www.google.com"} 

    for _,url := range urls { 
     request(url) 
    } 
} 

func request(url string){ 
    startTime := time.Now() 
    response,_ := http.Get(url) 
    defer response.Body.Close() 
    _,err := ioutil.ReadAll(response.Body) 
    if err != nil { 
     fmt.Println(err) 
    } 
    costTime := time.Since(startTime) 
    resTime.WithLabelValues(fmt.Sprintf("%d", costTime)).Observe(costTime.Seconds()) 
} 

回答

2

普罗米修斯建议您使用histogram来存储这样的事情。它主要根据它所属的时间“桶”来计算请求。有一个示例说明如何在godoc中使用它。

我更喜欢使用直方图作为“摘要”类型,因为当您有很多服务器在场时,它更容易聚合。如果您保留的是每台服务器上的平均/百分之九十九的时间,则很难仅从该信息知道全局平均值。

柱状图保持每个服务器每桶的运行计数,因此您可以在服务器之间聚合数据,而不会在未来出现重大损失。

this page提供这些类型的良好破败。

相关问题