如何在golang webserver中使用prometheus监控请求的成本时间

时间:2017-08-28 12:04:04

标签: go webserver prometheus

我有几个网址可以访问,我想用prometheus监控每个请求的成本时间。

但我不知道使用什么样的指标来收集数据。有什么帮助?

这是演示代码:

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())
}

1 个答案:

答案 0 :(得分:3)

Prometheus建议您使用histogram来存储此类内容。它基本上根据时间"桶"来计算请求。它陷入了。有一个如何在godoc中使用它的示例。

我更喜欢直方图和"摘要"类型,因为当您有许多服务器在运行时更容易聚合。如果您保留的是每台服务器上的平均/第99百分位时间,则很难仅从该信息中了解全局平均值。

直方图保持每个服务器每个存储桶的运行计数,因此您可以跨服务器聚合数据,而不会在将来出现重大损失。

this page上提供了这些类型的完整概述。