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

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

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

インストール

このガイドに必要な `prometheus`、`promauto`、`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` をハンドラー関数として使用できます。

たとえば、この最小限のアプリケーションは、`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` カウンター を公開します。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 http://localhost: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 アプリケーション(デフォルトの Go メトリクスのみを公開するものと、カスタム Prometheus カウンターも公開するもの)を作成し、それらのアプリケーションからメトリクスをスクレイプするように Prometheus インスタンスを設定しました。

このドキュメントは オープンソース です。問題を報告したり、プルリクエストを送信して改善にご協力ください。