このページはPrometheus公式ドキュメント和訳+αの一部です。
INSTRUMENTING A GO APPLICATION FOR PROMETHEUS
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
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 ―インフラとアプリケーションのパフォーマンスモニタリング
- 作者: Brian Brazil,須田一輝,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2019/05/18
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る

- 作者: Mike Julian,松浦隼人
- 出版社/メーカー: オライリージャパン
- 発売日: 2019/01/17
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る

SRE サイトリライアビリティエンジニアリング ―Googleの信頼性を支えるエンジニアリングチーム
- 作者: 澤田武男,関根達夫,細川一茂,矢吹大輔,Betsy Beyer,Chris Jones,Jennifer Petoff,Niall Richard Murphy,Sky株式会社玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2017/08/12
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
和訳活動の支援
Prometheusドキュメント和訳が役に立った方は、以下QRコードからPayPayで活動を支援して頂けるとありがたいです。
