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
をハンドラ関数として使用できます。
この最小限のアプリケーションは、たとえば 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 インスタンスを設定しました。