PrometheusのためのGoアプリケーションへのメトリクス組み込み - Prometheusドキュメント

このページはPrometheus公式ドキュメント和訳+αの一部です。

INSTRUMENTING A GO APPLICATION FOR PROMETHEUS

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

How Go exposition works

GoアプリケーションでPrometheusメトリクスを出力するには、HTTPエンドポイント/metricsを提供する必要がある。 ハンドラー関数として、ライブラリprometheus/promhttpのHTTPハンドラーを利用できる。

例えば、この最小限のアプリケーションは、Goアプリケーションのデフォルトのメトリクスをhttp://localhost:2112/metricsで出力する。

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クライアントライブラリで利用可能なほんの一握りの機能に触れただけである。 ゲージやヒストグラムのような他の型のメトリクスを出力することもできるし、グローバルでないレジストリ、Pushgatewayにメトリクスをプッシュする関数、PrometheusとGraphiteの連携などもある。

まとめ

このガイドでは、Prometheusにメトリクスを出力する2つのGoアプリケーションのサンプル(デフォルトのGoメトリクスだけを出力するものと独自のPrometheusカウンターも出力するもの)を作成し、Prometheusインスタンスがそれらのアプリケーションからメトリクスを取得するように設定した。

参考リンク

おすすめ書籍

入門 Prometheus ―インフラとアプリケーションのパフォーマンスモニタリング

入門 Prometheus ―インフラとアプリケーションのパフォーマンスモニタリング

入門 監視 ―モダンなモニタリングのためのデザインパターン

入門 監視 ―モダンなモニタリングのためのデザインパターン

SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム

SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム

和訳活動の支援

Prometheusドキュメント和訳が役に立った方は、以下QRコードからPayPayで活動を支援して頂けるとありがたいです。

PayPayによる支援用QRコード
上のQRコードからPayPayによる支援