1. hmachi

    No comment

    hmachi
Changes in body
Source | HTML | Preview
@@ -1,132 +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)
+* [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
```
`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
+++ b/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に注視しつつ、メトリクスが落ちていないかなどをモニターしながら適切な値のチューニングが必要と思われます。