VaultのメトリクスをPrometheusで可視化する

目次

  1. 初めに
  2. 環境情報
  3. Vaultでの設定
  4. Prometheusの設定
  5. 終わりに

1. 初めに

今回は小ネタとしてVaultのメトリクスをPrometheusで可視化するために設定した内容を記載していきたいと思います。 VaultとPrometheusの説明はここではしませんので気になる方は下記サイトを参考にしてくださいな。

knowledge.sakura.ad.jp

dev.classmethod.jp

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以外でもメトリクス監視をすることができます。下記のドキュメントに記載されていますので、気になる方は見てみてください。

www.vaultproject.io

では、ここから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 APIformat=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の画面で見てみましょう。

f:id:bakotako:20191229154229p:plain

項目にVaultのメトリクスが表示されていますね。 これで設定が完了となります。

5. 終わりに

PrometheusでVaultのメトリクスが見れるようになりました。正直ここから何を監視するのか決めおらず、ただただ「監視したい !!」っという思いで設定しました。 試しでやってみただけなので何を監視して、どうなったらアラートを飛ばすのかは全然決めていませんので、もし「こういうの監視したほうがいいのでは」っというご意見があればコメントしていただけると幸いです。

なんとなくですけとHA構成を組んだ時はそこら辺を見ておくのがいいかなぁっとは思っていますけど、、、そこらへんもおいおい設定していきたいと思います。

またVaultのメトリクス一覧がドキュメントに記載されていますので、気になる方は見てみてくださいな。

www.vaultproject.io