了解普罗米修斯

问题描述 投票:-2回答:1

我想尝试simple使用Prometheus的例子。

  1. 我已下载服务器二进制文件
  2. 我已经开始simple code,但几乎没有修改 var addr = flag.String("listen-address", ":8080", "The address to listen on for HTTP requests.") func main() { flag.Parse() http.Handle("/metrics", promhttp.Handler()) http.Handle("/test/{id}", myHandler(promhttp.Handler())) log.Fatal(http.ListenAndServe(*addr, nil)) } func myHandler(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "hello, you've hit %s\n", r.URL.Path) next.ServeHTTP(w, r) }) } 问题: 我认为Prometheus是监控工具,我想分别监控端点metrics/test/{id}。通过创建几个处理程序并使用promhttp.Handler()作为中间件,我是否正确地理解了这个想法? 在例如,可以监视请求的数量和延迟的其他部分。简单的web应用程序与数据库
go monitoring prometheus
1个回答
2
投票

要跟进@David Maze的答案,默认处理程序promhttp.Handler用于报告指标。 (收集所有注册的处理程序并根据要求报告)。

不幸的是,它不是一个通用的http中间件,可以为您提供开箱即用的任何指标。

我已经看到许多go的web框架都有某种社区prometheus中间件(gin's),可以提供开箱即用的指标(延迟,响应代码,请求数等)。

go prometheus client library提供了如何向应用程序添加指标的示例。

var (

    httpRequests = prometheus.NewCounter(
        prometheus.CounterOpts{
            Name: "http_requests_total",
            Help: "Number of http requests.",
        },
    )
)

func init() {
    // Metrics have to be registered to be exposed:
    prometheus.MustRegister(httpRequests)
}

func myHandler(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        httpRequests.Inc()
        fmt.Fprintf(w, "hello, you've hit %s\n", r.URL.Path)
        next.ServeHTTP(w, r)
    })
}

至于你的第二个问题很多:)谷歌主张监测4个黄金信号:

https://landing.google.com/sre/book/chapters/monitoring-distributed-systems.html#xref_monitoring_golden-signals

这些是

  • 流量 - 吞吐量 - 计数/时间
  • 延迟 - 分布/直方图
  • 错误 - HTTP响应代码/显式错误计数
  • 饱和度 - 资源队列,即如果存在goroutine池,则在给定时间有多少goroutine处于活动状态

在我的经验中,了解应用程序与数据库之间的所有交互(即应用于数据库的4个黄金信号)也很有帮助:

© www.soinside.com 2019 - 2024. All rights reserved.