📰

Google Compute EngineでPrometheus指標を簡単に収集する

2023/02/03に公開

こんにちは!Google Cloudでオブザーバビリティを担当しているものです!今日はメトリクスの収集に関して便利な機能がでたのでそのお知らせをしに来ました。

TL;DR

日本標準時間2023年2月3日でGoogle Compute Engine上でもOpsAgent経由でPrometheus形式(OpenMetrics形式)の指標を簡単に取得できるようになりました。

OpsAgentとは

OpsAgentというのはGoogle Compute Engine上でのログやメトリクスを収集するためのエージェントです。これは、過去Cloud LoggingエージェントとCloud Monitoringエージェントとして別々に配布され、管理する必要があったものを、統一的に管理できるようにしたエージェントです。

内部的にはログに関してはFluent Bit、メトリクスに関してはOpenTelemetry Collectorが使われています。

今回のアップデートは、このOpenTelemetry CollectorのPrometheus receiverが、OpsAgentからでも使えるようになりました、というお知らせとなります。

普通に試してみる

実際にどのようになるのか、Prometheusが公開しているサンプルコードを動かして見てみましょう。このGoアプリケーションをビルドしてGoogle Compute Engineで実行してみます。

まずGoプログラムを作成します。上のリンクにあるサンプルコードをちょっとだけ書き換えました。

package main

import (
 "log"
 "net/http"

 "github.com/prometheus/client_golang/prometheus"
 "github.com/prometheus/client_golang/prometheus/collectors"
 "github.com/prometheus/client_golang/prometheus/promhttp"
)

func main() {
 log.Println("start app")
 reg := prometheus.NewRegistry()
 reg.MustRegister(
  collectors.NewGoCollector(),
  collectors.NewProcessCollector(collectors.ProcessCollectorOpts{}),
 )

 http.Handle("/metrics", promhttp.HandlerFor(reg, promhttp.HandlerOpts{Registry: reg}))
 if err := http.ListenAndServe(":8080", nil); err != nil {
  log.Fatalf("failed to keep running HTTP server: %v", err)
 }
}

これをローカルの環境でビルドして実行バイナリを作成します。

GOOS=linux GOARCH=amd64 go build -o promgcetest

実行するためのGCEインスタンスを作って、OpsAgentをインストールします。詳細は次のドキュメントに譲りますが、今回は e2-small でDebian 11のインスタンスを作成して、OpsAgentをインストールしました。

無事にOpsAgentがインストールされました。

無事にOpsAgentがインストールされた

次にプログラムをこのインスタンスにコピーします。

gcloud compute scp ./promgcetest demo@prom-opsagent-test:~/

次にこのプログラムをインスタンス内で実行します。

nohup $HOME/promgcetest &

そしてOpsAgentの設定ファイルを変更します。設定方法についてはこちらのドキュメントを参考にしてください。

上のサンプルアプリでは localhost:8080/metrics で指標を公開しているので次のような設定になります。これで10秒ごとに指標を取得することになります。

metrics:
  receivers:
    prometheus:
        type: prometheus
        config:
          scrape_configs:
            - job_name: 'sample_go_app'
              scrape_interval: 10s
              metrics_path: /metrics
              static_configs:
                - targets: ['localhost:8080']
  service:
    pipelines:
      prometheus_pipeline:
        receivers:
          - prometheus

これでOpsAgentサービスを再起動します。

sudo service google-cloud-ops-agent restart

数分時間をおいてから、Cloud MonitoringのMetrics Explorerに行って、実際に値が取れているか確認してみます。取得したデータは prometheus.googleapis.com というMonitored Resourceとして記録されているので、それで検索してみましょう。

お、どうやら取得できてるようです!早速グラフを見てみましょう!

これは prometheus.googleapis.com/go_memstats_alloc_bytes/gauge という指標ですが、サンプルアプリのGoランタイムのメモリアロケーションの様子が見て取れます。

以上、OpsAgentでPrometheus指標が取得できていることが確認できました!

おわりに

今回は単純にデモを動かしてみるだけでしたので、素朴にインスタンスを立ててから、OpsAgentのインストール、起動後の設定ファイルの編集、エージェントの再起動をすべて手動で行いました。

もし本格的に活用される場合には、次のドキュメントにもありますように、ポリシーやプロビジョニングツール等を使った設定を推奨しています。ぜひ一度ご確認ください。

Google Cloud Japan

Discussion