为 Prometheus 检测 Go 应用程序
Prometheus 有一个官方的 Go 客户端库,您可以使用它来检测 Go 应用程序。在本指南中,我们将创建一个简单的 Go 应用程序,通过 HTTP 暴露 Prometheus 指标。
注意有关完整的 API 文档,请参阅 Prometheus 各种 Go 库的 GoDoc。
安装
您可以使用 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 指标暴露的工作原理
要在 Go 应用程序中暴露 Prometheus 指标,您需要提供一个 /metrics
HTTP 端点。您可以使用 prometheus/promhttp
库的 HTTP Handler
作为处理函数。
例如,这个最小的应用程序将通过 https://: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://: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://: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
其他 Go 客户端特性
在本指南中,我们只介绍了 Prometheus Go 客户端库中可用的一小部分功能。您还可以暴露其他指标类型,例如 计量器 和 直方图、非全局注册表、用于 将指标推送到 Prometheus PushGateways 的函数、连接 Prometheus 和 Graphite 的功能等等。
总结
在本指南中,您创建了两个向 Prometheus 暴露指标的 Go 示例应用程序——一个只暴露默认的 Go 指标,另一个还暴露了一个自定义的 Prometheus 计数器——并配置了一个 Prometheus 实例来抓取这些应用程序的指标。