仪表化 Go 应用程序
Prometheus 提供了一个官方的 Go 客户端库,你可以使用它来仪表化(instrumenting) Go 应用程序。在本指南中,我们将创建一个简单的 Go 应用程序,通过 HTTP 露出 Prometheus 元数据。
**注意:**为了获取全面的 API 文档,请参阅 Prometheus 各个 Go 库的 GoDoc。
安装
你可以使用go get
(了解更多信息)安装用于本指南所需的prometheus
、promauto
和 promhttp
库:
go get github.com/prometheus/client_golang/prometheusgo get github.com/prometheus/client_golang/prometheus/promautogo get github.com/prometheus/client_golang/prometheus/promhttp
Go 指标暴露的原理
为了在 Go 应用程序中暴露 Prometheus 元指标,你需要提供一个/metrics
的 HTTP 端点。可以使用prometheus/promhttp
库中的 HTTP Handler
(查看文档)作为 handler 函数。
例如,这个简化后的应用程序会通过http://localhost: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 http://localhost:2112/metrics
添加自定义元指标
上面的示例仅展示了 Go 应用程序的默认元指标。你还可以注册自定义的元指标。此示例应用程序通过myapp_processed_ops_total
Counter 跟踪到目前为止处理的操作总数。每2秒,Counter 递增一次。
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 http://localhost:2112/metrics
在元指标输出中,你将看到帮助文本、类型信息和 myapp_processed_ops_total
Counter 的最新值:
# HELP myapp_processed_ops_total The total number of processed events# TYPE myapp_processed_ops_total countermyapp_processed_ops_total 5
可以配置本地运行的 Prometheus 实例以从应用程序收集元指标。以下是一个示例 prometheus.yml
配置:
scrape_configs:- job_name: myapp scrape_interval: 10s static_configs: - targets: - localhost:2112
其他 Go 客户端功能
在本指南中,我们仅覆盖了 Prometheus Go 客户端库提供的少数功能。你还可以暴露其他元指标类型(如 Gauge 和 Histogram、非全局 Registry)、向 Prometheus Pushgateway 推送元指标的函数、将 Prometheus 和 Graphite 桥接及其他功能。
总结
在本指南中,你创建了两个示例 Go 应用程序,它们都能够将元指标暴露给 Prometheus
- 一个仅露出了默认的 Go 元指标,
- 另一个还暴露了自定义的 Prometheus Counter
同时我们也配置了一个 Prometheus 实例以从这些应用程序中收集元指标。
该文档基于 Prometheus 官方文档翻译而成。