为 Go 应用程序植入 Prometheus

Prometheus 有一个官方的 Go 客户端库 ,你可以用它来为 Go 应用程序植入(instrument)。在本指南中,我们将创建一个简单的 Go 应用程序,通过 HTTP 暴露 Prometheus 指标。

注意有关全面的 API 文档,请参阅 Prometheus 各个 Go 库的 GoDoc 

安装

你可以使用 go get 安装本指南所需的 prometheuspromautopromhttp 库。

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 实例从这些应用程序中抓取指标。

本页内容