1 回答
TA贡献1796条经验 获得超4个赞
默认处理程序promhttp.Handler
用于报告指标。(从所有注册的处理程序中收集并根据要求报告)。
不幸的是,它不是一个通用的 http 中间件,可以为您提供开箱即用的任何指标。
我已经看到许多 go 的 web 框架都有某种社区 prometheus 中间件 ( gin's ),它们提供开箱即用的指标(延迟、响应代码、请求计数等)。
go prometheus 客户端库包含如何向应用程序添加指标的示例。
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)
})
}
至于你的第二个问题很多 :) Google 提倡监控 4 个黄金信号:
这些都是
流量 - 吞吐量 - 计数/时间
延迟 - 分布/直方图
错误 - HTTP 响应代码/显式错误计数
饱和 - 资源队列,即如果有一个 goroutine 池,则在给定时间有多少 goroutines 处于活动状态
在我的经验中,了解应用程序和数据库之间的所有交互(即应用于数据库的 4 个黄金信号)也很有帮助:
从应用程序调用数据库的次数
通话延迟
为确定可用性(成功/总计)而进行的调用的结果(错误/成功)
数据库驱动程序可用的饱和度
- 1 回答
- 0 关注
- 73 浏览
添加回答
举报