【问题标题】:Understanding of Prometheus对普罗米修斯的理解
【发布时间】:2018-09-06 11:34:31
【问题描述】:

我想试试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)
        })
    }
    

    问题:

    1. 我假设 Prometheus 是监控工具,我想分别监控端点 metrics/test/{id}。我是否通过创建多个处理程序并使用 promhttp.Handler() 作为中间件正确理解了这个想法?
    2. 除了请求的数量和延迟之外,还可以在例如带有数据库的简单网络应用程序?

【问题讨论】:

  • Prometheus 仅查询 /metrics,这是您运行 promhttp.Handler() 的唯一地方。

标签: go monitoring prometheus


【解决方案1】:

为了跟进@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 个黄金信号)也很有帮助:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    • 2022-10-17
    • 2022-12-02
    • 2022-12-17
    • 2020-01-10
    相关资源
    最近更新 更多