PCFのbosh-prometheus をWavefront Proxyにつなげる


始めに

Pivotal Cloud Foundry(PCF)を管理する場合、一つの監視方法として、bosh-prometheusという手段があります。
これは、Prometheus、Grafanaなどの管理コンポーネントをインストールするためのコンポーネントです。

これだけで、監視を完成させることができるかもしれないですが、Prometheusの以下の特性に悩まされるかもしれないです。

  • データのバックアップや可用性
  • 長期のRetention期間でメトリクスを保管
  • パフォーマンス要件

これらの一つの解決方法として、Prometheusのストレージ連携先としてWavefrontを使う方法です。
Prometheusをあくまで、テンポラリーストレージとして使い、長期データの保管先やメトリクスの分析先としてWavefront使います。

イメージ

Prometheusの連携イメージは以下のとおりです。

すでにPrometheusがある前提で追加のインストールが必要なのが以下です。

Wavefront Proxyに関しては、Wavefront Nozzleをインストールすることで、追加されます。

よってこの記事では、Prometheus Storage Adaptor for Wavefrontの接続方法を中心に紹介します。

準備編

PCF環境とbosh-prometheusのインストールを完了してください。

さらに、以下の記事にあるとおり、Wavefront Nozzleをインストールしてください。
https://qiita.com/hmachi/items/fd2621d5aa7126e98c5e

Prometheus Storage Adaptorのインストール

インストール方法は、このGithubにあるとおりです。
StandaloneとDockerイメージの方法が紹介されています。

今回は手早く始めるために、Dockerイメージをcf pushして使う方法でためします。
まず、cfでdiego_dockerを有効にします。

$ cf enable-feature-flag diego_docker

その後、cf pushでdockerイメージを起動します。
-cの引数の中の-proxyはそれぞれの環境のWavefront ProxyのIPアドレスを指定してください。
また-prefixは最終的にWavefrontのメトリクスの接頭語になるので、みわけがつくものにしてください。

$ cf push wf-prom-proxy --docker-image wavefronthq/prometheus-storage-adapter  -c '/bin/adapter -proxy 192.168.3.5 -proxy-port 2878 -listen 8080 -prefix prom'

完了したら、一応念のためCurlでサービスが稼働しているか確認します。

% curl http://wf-prom-proxy.apps.SYSTEM_DOMAIN/health
{"Message":"OK"}

{"Message":"OK"}と表示されれば、サービスは起動しているということなので、一旦は成功です。

bosh-prometheusの再構成

今度はbosh-prometheusを再構成して、作成したアダプターにデータを送るようにします。

以下のYamlファイルを作ります。

- type: replace
  path: /instance_groups/name=prometheus2/jobs/name=prometheus2/properties/prometheus/remote_write?/-
  value:
    url: http://wf-prom-proxy.apps.SYSTEM_DOMAIN/receive

完了後、bosh deploy-o <yaml_file>で再度Prometheusをデプロイします。(これは、それぞれのbosh-promethesのデプロイされ方によって、異なるので割愛します)

これで完了です。もし、ただし起動していない場合、以下のLogなどでデバッグしてください。

$ cf logs wf-prom-proxy

Wavefrontでは、どうみえるか

ここまで設定すると、WavefrontにPrometheusのメトリクスが見えてくるはずです。
メトリクスは以下のロジックでみえるようになります。

  • _アンダースコアを.ドットに切り替える
  • 接頭語に-prefixを指定したものが付与される。

例えば以下のようにbosh_deployment_instancesというPrometheusのメトリクスは

Wavefrontからはprom.bosh.deployment.instancesとしてみえるようになります。

PPSはどうなるか?

Wavefrontで注意しないといけないのが、課金方式が秒あたりのメトリクス転送量(Points Per Sec)が課金料に影響するという点です。
実際実機でみたところ、接続直後にバーストしましたが、その後、Prometheus接続後私の環境では +100pps で落ち着きました。

ただ、注意が必要なのが、これはPrometheusのRemote WriteのTuningが関係しています。

より大きな環境の場合、特にmax_samples_per_sendに注視しつつ、メトリクスが落ちていないかなどをモニターしながら適切な値のチューニングが必要と思われます。