Prometheus 用 Go アプリケーションの計測

Prometheus には、Go アプリケーションを計測するために使用できる公式の Go クライアント ライブラリ があります。このガイドでは、HTTP 経由で Prometheus メトリックを公開するシンプルな Go アプリケーションを作成します。

注記包括的な API ドキュメントについては、Prometheus の様々な Go ライブラリの GoDoc を参照してください。

インストール

このガイドに必要な prometheuspromauto、および promhttp ライブラリは、go get を使用してインストールできます。

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秒ごとに、カウンターが1ずつ増加します。

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 にメトリクスを公開する2つのサンプル Go アプリケーションを作成しました。1つはデフォルトの Go メトリクスのみを公開し、もう1つはカスタムの Prometheus カウンターも公開しています。また、それらのアプリケーションからメトリクスをスクレイピングするように Prometheus インスタンスを設定しました。

このページの内容