VaultのメトリクスをPrometheusで可視化する
目次
- 初めに
- 環境情報
- Vaultでの設定
- Prometheusの設定
- 終わりに
1. 初めに
今回は小ネタとしてVaultのメトリクスをPrometheusで可視化するために設定した内容を記載していきたいと思います。 VaultとPrometheusの説明はここではしませんので気になる方は下記サイトを参考にしてくださいな。
2. 環境情報
- Vault : 1.3.0
- Golang: 1.13.5
- Prometheus: 2.15.1
3. Vaultでの設定
まずは対象となるVaultの設定をしていきます。Vaultではもともとメトリクスを取得するようなAPIが用意されており、HTTPリクエストで取得することができます。
$ curl --header "X-Vault-Token: s.F8NdXgXa4AJLLYcq9Mc19ez6" http://192.168.33.161:8200/v1/sys/metrics {"Timestamp":"2019-12-29 06:29:00 +0000 UTC","Gauges":[{"Name":"vault.expire.num_leases","Value":0,"Labels":{}}, ・・・
このように curl
で取得することが可能になります。今回Vaultは 192.168.33.161
のサーバで起動し 8200
のポートで待ち受けています。
ちなみに、VaultのHTTP APIへのリクエストにはTokenが必要になり、ヘッダーに追加しないといけません。
--header "X-Vault-Token: s.F8NdXgXa4AJLLYcq9Mc19ez6"
これがTokenの指定になります。
またVaultではPrometheusからメトリクスを取得するためPrometheus用のformatも用意されており、 format=prometheus
をパラメータとしてつけてあげるとPrometheus用のフォーマットで取得することができます。
試しに取得してみたいと思います。
$ curl --header "X-Vault-Token: s.F8NdXgXa4AJLLYcq9Mc19ez6" http://192.168.33.161:8200/v1/sys/metrics?format=prometheus # HELP go_gc_duration_seconds A summary of the GC invocation durations. # TYPE go_gc_duration_seconds summary go_gc_duration_seconds{quantile="0"} 6.678e-06 go_gc_duration_seconds{quantile="0.25"} 7.358e-06 go_gc_duration_seconds{quantile="0.5"} 8.21e-06 go_gc_duration_seconds{quantile="0.75"} 1.6864e-05 ・・・
またVaultではPrometheus以外でもメトリクス監視をすることができます。下記のドキュメントに記載されていますので、気になる方は見てみてください。
では、ここからVaultの設定をしていきたいと思います。
設定としてはconfigに telemetry
を追加し、Prometheus用の設定を入れてあげます。
listener "tcp" { address = "192.168.33.161:8200" tls_disable = 1 } telemetry { prometheus_retention_time = "30s", disable_hostname = true }
listener
には外部からリクエストを受け付けられるよう設定を入れておきましょう。
prometheus_retention_time
を入れてあげれば設定完了です。非常に簡単ですね。
先ほどの HTTP APIで format=prometheus
のパラメータはprometheus_retention_time
を入れてあげることで使えるようになります。
prometheus_retention_time
が設定されてない場合は、 format=prometheus
は使うことができません。
4. Prometheusの設定
では次にPrometheusの設定をしていきます。Prometheus側では監視対象としてVaultの設定を入れてあげれば完了となります。下記が設定内容になります。
scrape_configs: ・・・ - job_name: 'vault' metrics_path: /v1/sys/metrics params: format: ['prometheus'] bearer_token: s.F8NdXgXa4AJLLYcq9Mc19ez6 static_configs: - targets: ['192.168.33.161:8200'] ・・・
こちらも非常にシンプルですね。
targets
の部分に監視対象のVaultのIPとポートを指定してあげます。
metrics_path
にはパスを指定してあげ、params
にPrometheusのフォーマットでリクエストするよう設定を入れてあげます。
bearer_token
にはメトリクスを取得するリクエストを許可しているTokenを設定します。
これで一通り準備が完了しました。
実際にPrometheusの画面で見てみましょう。
項目にVaultのメトリクスが表示されていますね。 これで設定が完了となります。
5. 終わりに
PrometheusでVaultのメトリクスが見れるようになりました。正直ここから何を監視するのか決めおらず、ただただ「監視したい !!」っという思いで設定しました。 試しでやってみただけなので何を監視して、どうなったらアラートを飛ばすのかは全然決めていませんので、もし「こういうの監視したほうがいいのでは」っというご意見があればコメントしていただけると幸いです。
なんとなくですけとHA構成を組んだ時はそこら辺を見ておくのがいいかなぁっとは思っていますけど、、、そこらへんもおいおい設定していきたいと思います。
またVaultのメトリクス一覧がドキュメントに記載されていますので、気になる方は見てみてくださいな。