Go 中 Prometheus 的多个端点
Multiple Endpoints for Prometheus in Go
我目前正在开发一个由 Prometheus 监控的 Go (golang)
编写的程序。
现在程序应该服务于两个端点 /metrics
和 /service
。
当 Prometheus 在 /metrics
上抓取时,它应该公开它自己的指标(例如发出的请求、请求延迟等),当在 /service
上抓取时,它应该查询 API,得到来自那里的指标并将它们公开给普罗米修斯。
对于第一部分,我创建了例如通过
的计数器
requestCount := kitprometheus.NewCounterFrom(stdprometheus.CounterOpts{
Namespace: "SERVICE",
Subsystem: "service_metrics",
Name: "request_count",
Help: "Number of requests received.",
}, fieldKeys)
并通过以下方式提供这些东西:
http.Handle("/metrics", promhttp.Handler())
http.ListenAndServe(":8090", nil)
对于 /service
部分,我查询 API,提取一个值并通过 Gauge.Set(value)
更新不同的 Gauge
- 如何在不使用的情况下在不同端点上公开最后一个仪表
启动另一台服务器(不同的端口)?
- 我是否必须创建自己的收集器(我没有自定义指标,所以
不对吧?)?
您可以使用 prometheus.NewRegistry
创建自定义收集器,并使用 promhttp.HandlerFor
将其公开给您想要的某个端点。
var (
// custom collector
reg = prometheus.NewRegistry()
// some metrics
myGauge = prometheus.NewGaugeVec(
prometheus.GaugeOpts{
Name: "gauge_name",
Help: "guage_help",
},
[]string{"l"},
)
)
func init() {
// register metrics to my collector
reg.MustRegister(myGauge)
}
func main() {
// instrument
myGauge.WithLabelValues("l").Set(123)
// expose endpoint
http.Handle("/service", promhttp.HandlerFor(reg, promhttp.HandlerOpts{}))
}
我目前正在开发一个由 Prometheus 监控的 Go (golang)
编写的程序。
现在程序应该服务于两个端点 /metrics
和 /service
。
当 Prometheus 在 /metrics
上抓取时,它应该公开它自己的指标(例如发出的请求、请求延迟等),当在 /service
上抓取时,它应该查询 API,得到来自那里的指标并将它们公开给普罗米修斯。
对于第一部分,我创建了例如通过
的计数器requestCount := kitprometheus.NewCounterFrom(stdprometheus.CounterOpts{
Namespace: "SERVICE",
Subsystem: "service_metrics",
Name: "request_count",
Help: "Number of requests received.",
}, fieldKeys)
并通过以下方式提供这些东西:
http.Handle("/metrics", promhttp.Handler())
http.ListenAndServe(":8090", nil)
对于 /service
部分,我查询 API,提取一个值并通过 Gauge.Set(value)
- 如何在不使用的情况下在不同端点上公开最后一个仪表 启动另一台服务器(不同的端口)?
- 我是否必须创建自己的收集器(我没有自定义指标,所以 不对吧?)?
您可以使用 prometheus.NewRegistry
创建自定义收集器,并使用 promhttp.HandlerFor
将其公开给您想要的某个端点。
var (
// custom collector
reg = prometheus.NewRegistry()
// some metrics
myGauge = prometheus.NewGaugeVec(
prometheus.GaugeOpts{
Name: "gauge_name",
Help: "guage_help",
},
[]string{"l"},
)
)
func init() {
// register metrics to my collector
reg.MustRegister(myGauge)
}
func main() {
// instrument
myGauge.WithLabelValues("l").Set(123)
// expose endpoint
http.Handle("/service", promhttp.HandlerFor(reg, promhttp.HandlerOpts{}))
}