vault-benchmarkでHashiCorp Vaultのベンチマークを取る
想定読者
- HashiCorp Vaultのベンチマークを取りたい方。
Vaultのベンチマークツール
どうやらいろんなベンチマークツールがあるようですが、ここでは最近新たにTutorialに加わった 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を参考に、以下のようなファイルを準備します。
# 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
Benchmark Vault performance
(こちらの参考サイトでは、ブラウザ上で vault-benchmark
を試してみることもできます。)
Vault Benchmark Document
Discussion