Prometheus 有一个官方的 Go 客户端库,您可以使用它来为 Go 应用程序添加仪表。在本指南中,我们将创建一个简单的 Go 应用程序,通过 HTTP 公开 Prometheus 指标。
您可以使用 go get
安装本指南所需的 prometheus
、promauto
和 promhttp
库。
go get github.com/prometheus/client_golang/prometheus
go get github.com/prometheus/client_golang/prometheus/promauto
go get github.com/prometheus/client_golang/prometheus/promhttp
要在 Go 应用程序中公开 Prometheus 指标,您需要提供一个 /metrics
HTTP 端点。您可以使用 prometheus/promhttp
库的 HTTP Handler
作为处理函数。
例如,这个最小的应用程序将通过 https://127.0.0.1:2112/metrics
公开 Go 应用程序的默认指标。
package main
import (
"net/http"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
func main() {
http.Handle("/metrics", promhttp.Handler())
http.ListenAndServe(":2112", nil)
}
要启动应用程序
go run main.go
要访问指标
curl https://127.0.0.1:2112/metrics
上面的应用程序 仅公开默认的 Go 指标。您还可以注册自己的自定义应用程序特定的指标。此示例应用程序公开一个 myapp_processed_ops_total
计数器,用于计算到目前为止已处理的操作数。每 2 秒,计数器加一。
package main
import (
"net/http"
"time"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
func recordMetrics() {
go func() {
for {
opsProcessed.Inc()
time.Sleep(2 * time.Second)
}
}()
}
var (
opsProcessed = promauto.NewCounter(prometheus.CounterOpts{
Name: "myapp_processed_ops_total",
Help: "The total number of processed events",
})
)
func main() {
recordMetrics()
http.Handle("/metrics", promhttp.Handler())
http.ListenAndServe(":2112", nil)
}
要运行应用程序
go run main.go
要访问指标
curl https://127.0.0.1:2112/metrics
在指标输出中,您将看到 myapp_processed_ops_total
计数器的帮助文本、类型信息和当前值。
# HELP myapp_processed_ops_total The total number of processed events
# TYPE myapp_processed_ops_total counter
myapp_processed_ops_total 5
您可以配置本地运行的 Prometheus 实例以从应用程序中抓取指标。这是一个示例 prometheus.yml
配置。
scrape_configs:
- job_name: myapp
scrape_interval: 10s
static_configs:
- targets:
- localhost:2112
在本指南中,我们仅介绍了 Prometheus Go 客户端库中可用的一小部分功能。您还可以公开其他指标类型,例如仪表盘和直方图,非全局注册表,用于将推送指标到 Prometheus PushGateways 的函数,桥接 Prometheus 和 Graphite,等等。
在本指南中,您创建了两个示例 Go 应用程序,它们向 Prometheus 公开指标---一个仅公开默认的 Go 指标,另一个还公开了自定义的 Prometheus 计数器---并配置了一个 Prometheus 实例以从这些应用程序中抓取指标。
此文档是开源的。请通过提交问题或拉取请求来帮助改进它。