为 Prometheus 检测 Go 应用程序

Prometheus 有一个官方的 Go 客户端库,您可以使用它来检测 Go 应用程序。在本指南中,我们将创建一个简单的 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 实例来抓取这些应用程序的指标。

本页内容