PrometheusのGoアプリケーションのインストルメンテーション

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

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

インストール

このガイドに必要なprometheuspromautopromhttpライブラリは、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ライブラリのHTTPHandlerをハンドラ関数として使用できます。

例えば、この最小限のアプリケーションは、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へのメトリックプッシュ用の関数(Prometheus PushGateway)、PrometheusとGraphiteのブリッジ、その他多くの機能を利用できます。

概要

このガイドでは、Prometheusにメトリックを公開する2つのサンプルGoアプリケーション(デフォルトのGoメトリックのみを公開するものと、カスタムPrometheusカウンターも公開するもの)を作成し、これらのアプリケーションからメトリックをスクレイプするようにPrometheusインスタンスを設定しました。

このページの内容