💪

vault-benchmarkでHashiCorp Vaultのベンチマークを取る

2023/12/07に公開

想定読者

  • HashiCorp Vaultのベンチマークを取りたい方。

Vaultのベンチマークツール

どうやらいろんなベンチマークツールがあるようですが、ここでは最近新たにTutorialに加わった vault-benchmark を使ってベンチマークを取ってみます。

https://github.com/hashicorp/vault-benchmark

こちらは、HashiCorp Learnのサイトにもチュートリアルがあるとはいえ、コミュニティサポートな点にご注意ください。

vault-benchmark でベンチマークを取る

0. 事前準備

ベンチマーク実行に必要なものを揃えておきます。

vault server

Self-HostedでもHCP Vaultでも構いませんが、本番環境のVaultでいきなりベンチマークとるようなことは避けましょう。
ここでは、例によってdev serverを動かしておきます。

$ mkdir vault-benchmark-test
$ cd vault-benchmark-test
$ vault server -dev -dev-root-token-id root > vault-server.log 2>&1 &

# Vault周りの設定
$ export VAULT_ADDR='http://127.0.0.1:8200'
$ export VAULT_TOKEN=root

# ちゃんと動いているか一応確認
$ vault status

まだvaultのバイナリが手元にないと言う方は、こちらのガイドに沿ってインストールしてください。
この先のテストでは、Enterpriseバイナリを利用しており、一部Community版とは出力が異なる可能性があります。

vault-benchmark

こちらからダウンロードして適当に配置します。
ここでは、いったんログの吐き出し先として設定したディレクトリに置いておきます。

$ ls
vault-benchmark*  vault-server.log

$ ./vault-benchmark version
vault-benchmark v0.2.0

1. 設定ファイルの準備

vault-benchmark の設定は他のHashiCorp製品と同様にHCLで行います。
Usageを参考に、以下のようなファイルを準備します。

config.hcl
# Vaultサーバー設定
vault_addr = "http://127.0.0.1:8200"
vault_token = "root"
vault_namespace="root"

# ベンチマーク測定時間
duration = "30s"
# trueにしなかった場合、ベンチマークに使ったアーティファクトがvault内に残ってしまいます。
cleanup = true

# AppRole Auth Methodのテスト
test "approle_auth" "approle_logins" {
  weight = 50 # テスト全体の50%でapprole_authを実行
  config {
    role {
      role_name = "benchmark-role"
      token_ttl="2m"
    }
  }
}

# KV v2 Secret Engineのテスト
test "kvv2_write" "static_secret_writes" {
  weight = 50 # テスト全体の50%でkvv2_writeを実行n
  config {
    numkvs = 100 # k/vの数
    kvsize = 100 # 100bytes
  }
}

上記の例ではAppRoleとKVv2についてのベンチマークを測定します。
ベンチマーク測定前にAppRoleやKVv2を準備しておく必要はなく、ベンチマーク実行開始時に自動的に作成され、ベンチマーク終了とともに削除されるようになっています(cleanup=trueの場合)。

2. ベンチマーク実行

設定ファイルの準備ができたら、Runしてみます。

$ ./vault-benchmark run -config=config.hcl
2023-12-07T17:04:06.823+0900 [INFO]  vault-benchmark: setting up targets
2023-12-07T17:04:08.881+0900 [INFO]  vault-benchmark: starting benchmarks: duration=30s
2023-12-07T17:04:38.882+0900 [INFO]  vault-benchmark: cleaning up targets
2023-12-07T17:04:55.063+0900 [INFO]  vault-benchmark: benchmark complete
Target: http://127.0.0.1:8200
op                    count   rate         throughput   mean        95th%       99th%       successRatio
approle_logins        155550  5185.101815  5184.816465  1.432215ms  2.431935ms  5.580876ms  100.00%
static_secret_writes  155250  5174.983900  5174.899341  490.932µs   1.117813ms  1.979946ms  100.00%

3. 結果の確認

出力結果のメトリクスは以下のような意味です。

  • op: テスト名
  • count: 成功した回数
  • rate: 一秒間に成功した回数(count/duration)
  • throughput: rateのうち、成功したテストの数
  • mean: 一回あたりの平均テスト時間(ms)
  • 95th%/99th%: それぞれ95パーセンタイルと99パーセンタイル
  • successRatio: 成功したオペレーションの比率

まとめ

いかがでしたでしょうか?
簡易的ではありますが、簡単にどれくらいのリクエストが捌けそうかのあたりをつけられるところは便利かなと思います。
合わせて、基盤側の負荷(ネットワークや、セルフホストの場合のCPU/ストレージIOなど)も確認できると、新しいユースケースを展開するときなどに何が起きそうかを事前に想像できて良さそうです。

参考

Vault benchmark testing tool

https://www.hashicorp.com/blog/vault-benchmark-testing-tool

Benchmark Vault performance

(こちらの参考サイトでは、ブラウザ上で vault-benchmark を試してみることもできます。)
https://developer.hashicorp.com/vault/tutorials/operations/benchmark-vault

Vault Benchmark Document

https://github.com/hashicorp/vault-benchmark/blob/main/docs/index.md

Discussion