1. hmachi

    No comment

    hmachi
Changes in body
Source | HTML | Preview
@@ -1,123 +1,123 @@
# 始めに
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 Adapter 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
+% curl http://wf-prom-proxy.apps.SYSTEM_DOMAIN/health
+{"Message":"OK"}
```
-`snappy: corrupt input`とエラーは出力されますが、サービスは起動しているということなので、一旦は成功です。
+`{"Message":"OK"}`と表示されれば、サービスは起動しているということなので、一旦は成功です。
# bosh-prometheusの再構成
今度はbosh-prometheusを再構成して、作成したアダプターにデータを送るようにします。
以下のYamlファイルを作ります。
```yaml
- type: replace
path: /instance_groups/name=prometheus2/jobs/name=prometheus2/properties/prometheus/remote_write?/-
value:
url: http://wf-prom-proxy.apps.jppez.hack.maki.lol/receive
```
完了後、`bosh deploy`に`-o <yaml_file>`で再度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に注視しつつ、メトリクスが落ちていないかなどをモニターしながら適切な値のチューニングが必要と思われます。