1. hmachi

    Posted

    hmachi
Changes in title
+PCFのbosh-prometheus をWavefront Proxyにつなげる
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,132 @@
+# 始めに
+
+Pivotal Cloud Foundry(PCF)を管理する場合、一つの監視方法として、bosh-prometheusという手段があります。
+これは、Prometheus、Grafanaなどの管理コンポーネントをインストールするためのコンポーネントです。
+
+https://github.com/bosh-prometheus/prometheus-boshrelease
+
+これだけで、監視を完成させることができるかもしれないですが、Prometheusの以下の特性に悩まされるかもしれないです。
+
+* データのバックアップや可用性
+* 長期のRetention期間でメトリクスを保管
+* パフォーマンス要件
+
+これらの一つの解決方法として、Prometheusのストレージ連携先としてWavefrontを使う方法です。
+Prometheusをあくまで、テンポラリーストレージとして使い、長期データの保管先やメトリクスの分析先としてWavefront使います。
+
+
+# イメージ
+
+Prometheusの連携イメージは以下のとおりです。
+
+<img width="437" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666491/622c086b-2c23-5f12-1407-40c3f0aaa281.png">
+
+すでにPrometheusがある前提で追加のインストールが必要なのが以下です。
+
+* [Prometheus Storage Adaptor for Wavefront](https://github.com/wavefrontHQ/prometheus-storage-adapter)
+* Wavefront Proxy
+
+Wavefront Proxyに関しては、[Wavefront Nozzle](https://qiita.com/hmachi/items/fd2621d5aa7126e98c5e)をインストールすることで、追加されます。
+
+よってこの記事では、Prometheus Storage Adaptor for Wavefrontの接続方法を中心に紹介します。
+
+# 準備編
+
+PCF環境と[bosh-prometheus](https://github.com/bosh-prometheus/prometheus-boshrelease)のインストールを完了してください。
+
+さらに、以下の記事にあるとおり、Wavefront Nozzleをインストールしてください。
+https://qiita.com/hmachi/items/fd2621d5aa7126e98c5e
+
+# Prometheus Storage Adaptorのインストール
+
+インストール方法は、この[Github](https://github.com/wavefrontHQ/prometheus-storage-adapter)にあるとおりです。
+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/receive
+snappy: corrupt input
+```
+
+`snappy: corrupt input`とエラーは出力されますが、サービスは起動しているということなので、一旦は成功です。
+
+# bosh-prometheusの再構成
+
+今度はbosh-prometheusを再構成して、作成したアダプターにデータを送るようにします。
+
+[ここ](https://github.com/bosh-prometheus/prometheus-boshrelease)にあるマニフエストの以下の箇所を追記します。
+
+```diff
+diff --git a/manifests/prometheus.yml b/manifests/prometheus.yml
+index 978b446..538d488 100644
+--- a/manifests/prometheus.yml
+@@ -45,6 +45,8 @@ instance_groups:
+ static_configs:
+ - targets:
+ - localhost:9090
++ remote_write:
++ - url: http://wf-prom-proxy.apps.SYSTEM_DOMAIN/receive
+ - name: postgres_alerts
+ release: prometheus
+ - name: prometheus_alerts
+```
+
+完了後、`bosh deploy`で再度Prometheusをデプロイします。(これは、それぞれのbosh-promethesのデプロイされ方によって、異なるので割愛します)
+
+これで完了です。もし、ただし起動していない場合、以下のLogなどでデバッグしてください。
+
+```
+$ cf logs wf-prom-proxy
+```
+
+# Wavefrontでは、どうみえるか
+
+ここまで設定すると、WavefrontにPrometheusのメトリクスが見えてくるはずです。
+メトリクスは以下のロジックでみえるようになります。
+
+* `_`アンダースコアを`.`ドットに切り替える
+* 接頭語に`-prefix`を指定したものが付与される。
+
+例えば以下のように`bosh_deployment_instances`というPrometheusのメトリクスは
+
+<img width="1779" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666491/78426a66-e47f-ea44-7852-65cd22d9b578.png">
+
+Wavefrontからは`prom.bosh.deployment.instances`としてみえるようになります。
+
+
+
+<img width="1781" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666491/5d190525-29f6-f667-a4d9-31888747e084.png">
+
+# PPSはどうなるか?
+
+Wavefrontで注意しないといけないのが、課金方式が秒あたりのメトリクス転送量(Points Per Sec)が課金料に影響するという点です。
+実際実機でみたところ、接続直後にバーストしましたが、その後、Prometheus接続後私の環境では +100pps で落ち着きました。
+
+<img width="1770" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/666491/db6a02de-9e93-fb12-b62b-0572400fc988.png">
+
+
+ただ、注意が必要なのが、これはPrometheusのRemote WriteのTuningが関係しています。
+
+https://prometheus.io/docs/practices/remote_write/
+
+より大きな環境の場合、特にmax_samples_per_sendに注視しつつ、メトリクスが落ちていないかなどをモニターしながら適切な値のチューニングが必要と思われます。
+
+
+