セルフホスト型 Bencher の Docker クイックスタート
Bencherとは何ですか?
Bencherは、連続ベンチマーキングツールのスイートです。 パフォーマンスの後退があなたのユーザーに影響を与えたことはありますか? Bencherなら、それが起こるのを防げた可能性があります。 Bencherは、パフォーマンスの低下を_productionに到達する_前に検出し、防止することを可能にします。
- 実行: お気に入りのベンチマーキングツールを使用してベンチマークをローカルまたはCIで実行します。
bencher
CLIは単にあなたの既存のベンチマークハーネスをラップし、その結果を保存します。 - 追跡: ベンチマークの結果を時間と共に追跡します。ソースブランチ、テストベッド、測定基準に基づいてBencherのWebコンソールを使用して結果を監視、クエリ、グラフ化します。
- キャッチ: CIでパフォーマンスの後退をキャッチします。Bencherは最先端のカスタマイズ可能な分析を使用して、パフォーマンスの後退がProductionに到達する前にそれを検出します。
機能の後退を防ぐためにユニットテストがCIで実行されるのと同じ理由で、Bencherを使用してCIでベンチマークを実行してパフォーマンスの後退を防ぐべきです。パフォーマンスのバグはバグです!
Bencher セルフホスト
Bencher はオープンソースでセルフホスト可能です。 Bencher Cloud を使用することに興味があるなら、Bencher Cloud クイックスタートチュートリアルを確認してください。 このチュートリアルでは、Dockerを使用して Bencher セルフホストの設定を行います。
🐰 Bencher セルフホストの使用に慣れてきたら、次のリソースもチェックしてみてください:
Docker をインストールする
このチュートリアルのUIとAPIサーバーを実行するには、docker
がインストールされている必要があります。 docker
がインストールされているかどうかを確認してください。
実行: docker --version
すると、以下のような表示がなされます:
$ docker --versionDocker version 20.10.17, build 100c701
バージョン番号が異なっていても構いません。このコマンドが動作することが重要です。
もし動作しない場合は、docker
のインストール手順に従ってください。
bencher
CLIのインストール
Linux、Mac、およびUnix
Linux、Mac、その他のUnix系システムの場合、以下をターミナルで実行し、BENCHER_VERSION
を0.4.36
のような最近のバージョンに設定してください。
export BENCHER_VERSION=0.4.36; curl --proto '=https' --tlsv1.2 -sSfL https://bencher.dev/download/install-cli.sh | sh
Windows
Windowsシステムの場合、以下を_PowerShell_ターミナルで実行し、BENCHER_VERSION
を0.4.36
のような最近のバージョンに設定してください。
$env:BENCHER_VERSION="0.4.36"; irm https://bencher.dev/download/install-cli.ps1 | iex
🐰
running scripts is disabled on this system
というエラーが表示された場合:
管理者として実行
でPowershellを開く
- 次を実行:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Y
と入力- スクリプトを再実行
追加のインストールオプションについては、bencher
CLI のインストール方法を参照してください。
次に、bencher
CLI がインストールされているかテストしましょう。
次を実行:bencher --version
次のように表示されるはずです:
$ bencher --versionbencher 0.4.36
Bencher UI&APIサーバーを実行する
docker
がインストールされていれば、UIとAPIサーバーを実行できます。
実行コマンド:bencher up
以下のような表示がされます:
$ bencher upPulling `ghcr.io/bencherdev/bencher-api:latest` image...Creating `bencher_api` container...Starting `bencher_api` container...
Pulling `ghcr.io/bencherdev/bencher-console:latest` image...Creating `bencher_console` container...Starting `bencher_console` container...
🐰 Bencher Self-Hosted is up and running!Web Console: http://localhost:3000API Server: http://localhost:61016
Press Ctrl+C to stop Bencher Self-Hosted.
🐰 Bencher Self-Hosted logs...
Jan 08 16:49:07.727 INFO 🐰 Bencher API Server v0.4.36...
出力が少し違っていても大丈夫です。このコマンドが動作すればそれで問題ありません。
🐰
ghcr.io
から:"authentication required"
というエラーメッセージが表示される場合は、docker logout ghcr.io
を実行してみてください。
🐰 Windows上で:
image operating system "linux" cannot be used on this platform: operating system is not supported
というエラーが出る場合は、& 'C:\Program Files\Docker\Docker\DockerCli.exe' -SwitchLinuxEngine
を実行してみてください。
Bencher APIサーバーログ
まだAPIサーバーで電子メール/SMTPを設定していないため、チュートリアルの後半で受け取る認証コードは、上記のようにサーバーログに表示されます。
つまり、認証情報はbencher up
の出力に表示されます。
Bencher ホストの設定
bencher
CLIのデフォルトホストはBencher Cloud (つまり https://api.bencher.dev )です。
したがって、あなたのホスト名を設定する必要があります。これを行う最も簡単な方法は、BENCHER_HOST
環境変数を使用することです。
新しいターミナルウィンドウを開きます。
Linux、Mac、およびその他のUnix系システムで実行: export BENCHER_HOST=http://localhost:61016
Windowsで実行: $env:BENCHER_HOST = "http://localhost:61016"
その後、echo $BENCHER_HOST
または Write-Output $env:BENCHER_HOST
をそれぞれ実行します。
次のことが表示されます:
$ echo $BENCHER_HOSThttp://localhost:61016
ベンチャーセルフホストアカウントの作成
Bencher Self-Hostedに登録する
以下のURLに進んで、ローカルのBencher Self-Hostedインスタンスにアカウントを作成します:http://localhost:3000/auth/signup
アカウントを作成したら、bencher up
を実行したターミナルウィンドウに戻ります。
次のような表示がされるはずです:
To: Saul Goodman <saul@bettercallsaul.com>>Subject: Confirm Bencher SignupBody:Ahoy Saul Goodman,Please, click the button below or use the provided token to signup for Bencher.Confirm Email: http://localhost:3000/auth/confirm?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJhdXRoIiwiZXhwIjoxNzA0ODIwODIxLCJpYXQiOjE3MDQ4MTkwMjEsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC8iLCJzdWIiOiJzYXVsQGJldHRlcmNhbGxzYXVsLmNvbSIsIm9yZyI6bnVsbH0.CKW4-MyOqY0AnRbs9h8tBtyAB6ck51PytytTsZSBOiAConfirmation Token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJhdXRoIiwiZXhwIjoxNzA0ODIwODIxLCJpYXQiOjE3MDQ4MTkwMjEsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC8iLCJzdWIiOiJzYXVsQGJldHRlcmNhbGxzYXVsLmNvbSIsIm9yZyI6bnVsbH0.CKW4-MyOqY0AnRbs9h8tBtyAB6ck51PytytTsZSBOiA
See you soon,The Bencher TeamBencher - Continuous BenchmarkingManage email settings (http://localhost:3000/help)
ブラウザでConfirm Email
リンクに移動するか、Confirmation Token
をコピーして、以下のURLのConfirm Token
フィールドに貼り付けて下さい:http://localhost:3000/auth/confirm
それを行った後、Bencher Self-Hostedのアカウントにログインすることができるはずです!
APIトークンの生成
Bencher APIを使用するためには、APIトークンを生成する必要があります。
Bencherコンソールに移動します。
右上隅のあなたの名前の上にマウスを持って行きます。
ドロップダウンメニューが表示されるはずです。Tokens
を選択します。
APIトークンページに移動したら、➕ Add
ボタンをクリックします。
APIトークンの追加
新しいAPIトークンを生成したら、それをクリップボードにコピーする必要があります。 作業予定のターミナルで、APIトークンを環境変数としてエクスポートします。
Linux、Mac、その他のUnix系システムでは、次のように実行します: export BENCHER_API_TOKEN=YOUR_TOKEN
Windowsでは、次のように実行します: $env:BENCHER_API_TOKEN = "YOUR_TOKEN"
その後、echo $BENCHER_API_TOKEN
またはWrite-Output $env:BENCHER_API_TOKEN
を実行します。
以下のように表示されるはずです:
$ echo $BENCHER_API_TOKENYOUR_TOKEN
🐰 注意: 別のターミナルに移動する場合、APIトークンを再度エクスポートする必要があります。
プロジェクトを作成する
ユーザーアカウントとAPIトークンを取得したので、プロジェクトを作成することができます。 まず、新しいプロジェクトが所属する組織を知る必要があります。
実行:bencher org list
以下のような結果が表示されます:
$ bencher org list[ { "name": "Saul Goodman", "slug": "saul-goodman", "uuid": "4581feb0-6cac-40a9-bd8a-d7865183b01e" "created": "2022-07-06T11:24:36Z", "modified": "2022-07-06T11:24:36Z" }]
あなたの出力は上記と少し異なるはずです:
uuid
は疑似ランダムですname
とslug
はあなたのユーザー名に基づいていますcreated
とmodified
のタイムスタンプは、あなたが登録した時刻になります
では、その組織内に新しいプロジェクトを作成できます。
以下のコマンドのorganization
引数に、組織のslug
(つまり、YOUR_ORG_SLUG
)を代入します。
実行:bencher project create YOUR_ORG_SLUG --name "Save Walter White" --url http://www.savewalterwhite.com
以下のような結果を見るはずです:
$ bencher project create saul-goodman --name "Save Walter White" --url http://www.savewalterwhite.com{ "organization": "4581feb0-6cac-40a9-bd8a-d7865183b01e", "name": "Save Walter White", "slug": "save-walter-white-1234abcd", "uuid": "c6c2a8e8-685e-4413-9a19-5b79053a71b1" "url": "http://www.savewalterwhite.com", "public": true, "created": "2022-07-06T11:36:24Z", "modified": "2022-07-06T11:36:24Z"}
再度、あなたの出力は上記の結果と少し異なるはずです。
大切なのは、このコマンドが動作することです。
プロジェクトのslug
フィールド(つまり、save-walter-white-1234abcd
)を記録しておいてください。
レポートを実行する
ついにベンチマークのメトリックを収集する準備が整いました! このチュートリアルでは簡単のため、モックデータを使用します。
実行:bencher mock
以下のような結果が表示されます:
$ bencher mock{ "bencher::mock_0": { "latency": { "value": 3.7865423396154463, "lower_value": 3.4078881056539014, "upper_value": 4.165196573576991 } }, "bencher::mock_1": { "latency": { "value": 16.398332128878437, "lower_value": 14.758498915990593, "upper_value": 18.03816534176628 } }, "bencher::mock_2": { "latency": { "value": 20.88091359871672, "lower_value": 18.792822238845048, "upper_value": 22.969004958588393 } }, "bencher::mock_3": { "latency": { "value": 33.88103801203782, "lower_value": 30.492934210834036, "upper_value": 37.2691418132416 } }, "bencher::mock_4": { "latency": { "value": 40.90515638867921, "lower_value": 36.81464074981129, "upper_value": 44.99567202754713 } }}
あなたの出力は上記の結果と少し異なるはずです、なぜならデータは疑似ランダムだからです。 大切なのは、このコマンドが動作することです。
では、モックのベンチマークメトリックデータを使用してレポートを実行してみましょう。
下記のコマンドの--project
引数に、プロジェクトslug
(つまり、YOUR_PROJECT_SLUG
)を代入します。
実行:bencher run --project YOUR_PROJECT_SLUG "bencher mock"
以下のような結果が表示されます:
$ bencher run --project save-walter-white-1234abcd "bencher mock"{ "bencher::mock_0": { "latency": { "value": 0.15496641529475275, "lower_value": 0.13946977376527747, "upper_value": 0.17046305682422802 } }, "bencher::mock_1": { "latency": { "value": 18.648298578180437, "lower_value": 16.783468720362393, "upper_value": 20.513128435998482 } }, "bencher::mock_2": { "latency": { "value": 28.20328182167366, "lower_value": 25.382953639506294, "upper_value": 31.023610003841025 } }, "bencher::mock_3": { "latency": { "value": 34.45732560787596, "lower_value": 31.01159304708836, "upper_value": 37.903058168663556 } }, "bencher::mock_4": { "latency": { "value": 44.9237520767597, "lower_value": 40.43137686908373, "upper_value": 49.41612728443567 } }}
View results:- bencher::mock_0: https://bencher.dev/console/projects/save-walter-white-1234abcd/perf?measures=4358146b-b647-4869-9d24-bd22bb0c49b5&branches=95521eff-09fa-4c02-abe1-dd824108869d&testbeds=5b4a6f3e-a27d-4cc3-a2ce-851dc6421e6e&benchmarks=88375e7c-f1e0-4cbb-bde1-bdb7773022ae- bencher::mock_1: https://bencher.dev/console/projects/save-walter-white-1234abcd/perf?measures=4358146b-b647-4869-9d24-bd22bb0c49b5&branches=95521eff-09fa-4c02-abe1-dd824108869d&testbeds=5b4a6f3e-a27d-4cc3-a2ce-851dc6421e6e&benchmarks=e81c7863-cc4b-4e22-b507-c1e238871137- bencher::mock_2: https://bencher.dev/console/projects/save-walter-white-1234abcd/perf?measures=4358146b-b647-4869-9d24-bd22bb0c49b5&branches=95521eff-09fa-4c02-abe1-dd824108869d&testbeds=5b4a6f3e-a27d-4cc3-a2ce-851dc6421e6e&benchmarks=31dede44-d23a-4baf-b639-63f2ac742e42- bencher::mock_3: https://bencher.dev/console/projects/save-walter-white-1234abcd/perf?measures=4358146b-b647-4869-9d24-bd22bb0c49b5&branches=95521eff-09fa-4c02-abe1-dd824108869d&testbeds=5b4a6f3e-a27d-4cc3-a2ce-851dc6421e6e&benchmarks=c7e32369-f3dd-473d-99a3-6289ae32b38e- bencher::mock_4: https://bencher.dev/console/projects/save-walter-white-1234abcd/perf?measures=4358146b-b647-4869-9d24-bd22bb0c49b5&branches=95521eff-09fa-4c02-abe1-dd824108869d&testbeds=5b4a6f3e-a27d-4cc3-a2ce-851dc6421e6e&benchmarks=779bc477-4964-4bae-aa8c-4da3e388822c
ここでもブラウザで各ベンチマークの結果を見ることができます。
View results
からリンクをクリックするか、コピーしてペーストします。
各ベンチマークには一つだけのデータポイントがあるはずなので、データをもっと追加しましょう!
まず、プロジェクトのスラッグを環境変数として設定して、それぞれの実行で--project
を指定しなくても済むようにしましょう。
実行: export BENCHER_PROJECT=save-walter-white-1234abcd
その後、次のように実行してください: echo $BENCHER_PROJECT
以下のように表示されます:
$ echo $BENCHER_PROJECTsave-walter-white-1234abcd
同じコマンドをもう一度--project
なしで実行し、さらにデータを生成します。
実行: bencher run "bencher mock"
さらにデータを生成しますが、今度は結果をbencher run
にパイプします。
実行: bencher mock | bencher run
時々、結果をファイルに保存し、bencher run
でそれらを取得したいことがあります。
実行: bencher run --file results.json "bencher mock > results.json"
また、別のプロセスでベンチマークを実行し、結果をファイルに保存すると、bencher run
がそれらを取得します。
実行: bencher mock > results.json && bencher run --file results.json
最後に、bencher run
の--iter
引数を使用して多くのデータを生成します。
実行: bencher run --iter 16 "bencher mock"
🐰 ヒント:
bencher run
CLIサブコマンドのドキュメントをチェックして、bencher run
ができるすべてのことを完全に把握してください!
アラートを生成する
ベンチマークの履歴データが手元にあるので、アラートを生成しましょう! アラートは、ベンチマーク結果がパフォーマンスリグレッションと判断されたときに生成されます。 それでは、パフォーマンスリグレッションを模擬しましょう!
実行:bencher run "bencher mock --pow 8"
出力の最後に新しいセクションが追加され、View alerts
と表示されます:
View alerts:- bencher::mock_0: https://bencher.dev/console/projects/save-walter-white-1234abcd/alerts/b2329d5a-4471-48ab-bfbd-959d46ba1aa6- bencher::mock_1: https://bencher.dev/console/projects/save-walter-white-1234abcd/alerts/181b1cf5-d984-402a-b0f1-68f6f119fa66- bencher::mock_2: https://bencher.dev/console/projects/save-walter-white-1234abcd/alerts/b9b6c904-c657-4908-97db-dbeca40f8782- bencher::mock_3: https://bencher.dev/console/projects/save-walter-white-1234abcd/alerts/5567ff32-2829-4b6a-969a-af33ce3828db- bencher::mock_4: https://bencher.dev/console/projects/save-walter-white-1234abcd/alerts/49f2768f-ccda-4933-8e1d-08948f57a74d
ブラウザで各ベンチマークのアラートを見ることができます。
View alerts
からリンクをクリックするか、コピーしてペーストします。
🐰 ヒント: パフォーマンスリグレッションがどのように検出されるかの全体像を把握するため、閾値&アラートドキュメントをチェックしてください!
🐰 おめでとうございます!初めてのパフォーマンスリグレッションを捕まえました!🎉