Docker를 사용한 Bencher 셀프 호스팅 퀵 스타트


Bencher가 무엇인가요?

Bencher는 지속적인 벤치마킹 도구 모음입니다. 성능 회귀가 사용자에게 영향을 미친 경험이 있나요? Bencher가 그런 일이 일어나는 것을 막을 수 있었습니다. Bencher를 이용하면 성능 회귀를 상용 환경으로 이동하기 전에 탐지하고 예방할 수 있습니다.

  • 실행: 기존 벤치마킹 도구를 사용하여 로컬 또는 CI에서 벤치마크를 실행합니다. bencher CLI는 기존 벤치마킹 하네스를 감싸고 결과를 저장합니다.
  • 추적: 벤치마크 결과를 시간이 지남에 따라 추적합니다. 소스 브랜치, 테스트 베드, 측정 기반의 Bencher 웹 콘솔을 사용하여 결과를 모니터링, 쿼리, 그래프로 만듭니다.
  • 캐치: CI에서 성능 회귀를 잡아냅니다. Bencher는 최첨단, 사용자 정의 가능한 분석을 사용하여 상용 환경으로 가기 전에 성능 회귀를 탐지합니다.

단위 테스트가 CI에서 기능 회귀를 방지하기 위해 실행되는 것처럼, 벤치마크는 Bencher와 함께 CI에서 실행되어 성능 회귀를 방지해야 합니다. 성능 버그도 버그입니다!


Bencher 셀프 호스티드

Bencher는 오픈 소스이며 자체 호스팅이 가능합니다. Bencher Cloud 사용에 관심이 있다면 Bencher Cloud 빠른 시작 튜토리얼을 확인해 보세요. 이 튜토리얼은 Docker를 사용하여 Bencher 셀프 호스티드를 설정하는 방법을 안내합니다.

🐰 Bencher 셀프 호스티드를 사용하는 데 익숙해지면 다음 리소스를 확인해 보세요:


Docker 설치하기

이 튜토리얼에서 UI와 API 서버를 실행하려면 docker가 설치되어 있어야 합니다. docker가 설치되어 있는지 확인해 보세요.

다음을 실행: docker --version

다음과 같은 것을 볼 수 있어야 합니다:

$ docker --version
Docker version 20.10.17, build 100c701

버전 번호가 다르다 하더라도 괜찮습니다. 중요한 것은 이 명령어가 동작한다는 것입니다. 그렇지 않다면 docker 설치 지침을 따르세요.


bencher CLI 설치

Linux, Mac, 및 Unix

Linux, Mac 및 기타 유닉스 계열 시스템에서 터미널에서 다음을 실행하세요. BENCHER_VERSION0.4.30과 같은 최근 버전으로 설정합니다:

Terminal window
export BENCHER_VERSION=0.4.30; curl --proto '=https' --tlsv1.2 -sSfL https://bencher.dev/download/install-cli.sh | sh

Windows

Windows 시스템에서는 PowerShell 터미널에서 다음을 실행하세요. BENCHER_VERSION0.4.30과 같은 최근 버전으로 설정합니다:

Terminal window
$env:BENCHER_VERSION="0.4.30"; 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 --version
bencher 0.4.30

Bencher UI 및 API 서버 실행

docker가 설치되어 있다면 이제 UI 및 API 서버를 실행할 수 있습니다.

실행하세요: bencher up

아래와 같은 내용을 볼 수 있어야 합니다:

$ bencher up
Pulling `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:3000
API 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.30
...

출력 내용이 달라도 문제없습니다. 중요한 것은 이 명령어가 작동하는지 여부입니다.

🐰 만약 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 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_HOST
http://localhost:61016

Bencher Self-Hosted 계정 생성

Bencher Self-Hosted에 가입하기


다음 주소로 이동하여 로컬 Bencher Self-Hosted 인스턴스에 계정을 생성합니다: http://localhost:3000/auth/signup

계정을 생성한 후, bencher up을 실행한 터미널 창으로 돌아가십시오. 다음과 같은 내용을 볼 수 있어야 합니다:

To: Saul Goodman <saul@bettercallsaul.com>>
Subject: Confirm Bencher Signup
Body:
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-MyOqY0AnRbs9h8tBtyAB6ck51PytytTsZSBOiA
Confirmation Token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJhdXRoIiwiZXhwIjoxNzA0ODIwODIxLCJpYXQiOjE3MDQ4MTkwMjEsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC8iLCJzdWIiOiJzYXVsQGJldHRlcmNhbGxzYXVsLmNvbSIsIm9yZyI6bnVsbH0.CKW4-MyOqY0AnRbs9h8tBtyAB6ck51PytytTsZSBOiA
See you soon,
The Bencher Team
Bencher - Continuous Benchmarking
Manage email settings (http://localhost:3000/help)

브라우저에서 Confirm Email 링크로 이동하거나 Confirmation Token을 다음 주소의 Confirm Token 필드에 복사하십시오: http://localhost:3000/auth/confirm

그 후에, Bencher Self-Hosted 계정에 로그인 되어 있어야 합니다!


API 토큰 생성하기

Bencher API를 사용하려면 API 토큰을 생성해야 합니다. Bencher Console로 이동하세요. 오른쪽 상단에 있는 성함 부분에 마우스를 올려놓으세요. 드롭다운 메뉴가 나타날 것입니다. 토큰들을 선택하세요. API 토큰 페이지에 도착하면, ➕ 추가 버튼을 클릭하세요.

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_TOKEN
YOUR_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는 의사무작위입니다
  • nameslug는 이름에 기반합니다
  • createdmodified 타임스탬프는 당신이 방금 가입했을 때부터 시작됩니다

이제 조직 내에 새 프로젝트를 생성할 수 있습니다. 아래 명령에서 조직의 slugorganization 인수로 대체합니다 (예: 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
}
}
}

당신의 출력 결과는 위의 출력 결과와 약간 다르게 나올 것입니다, 데이터는 의사무작위입니다. 이 명령이 작동하는 것이 중요합니다.


이제 가짜 벤치마크 메트릭 데이터를 사용하여 보고서를 실행해 보겠습니다. 아래 명령에서 프로젝트의 slug--project 인수로 대체합니다 (예: 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_PROJECT
save-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 링크를 클릭하거나 복사해서 붙여넣기하세요.


🐰 팁: 성능 성하위가 어떻게 검출되는지에 대한 전체 개요를 보려면 임계값 & 알림 문서를 확인하세요!



🐰 축하합니다! 첫 번째 성능 성하위를 잡았습니다! 🎉


계속 진행: 벤치마킹 개요 ➡

🤖 이 문서는 OpenAI GPT-4에 의해 자동으로 생성되었습니다. 정확하지 않을 수도 있고 오류가 있을 수도 있습니다. 오류를 발견하면 GitHub에서 문제를 열어주세요.


Published: Fri, October 27, 2023 at 8:40:00 AM UTC | Last Updated: Fri, November 29, 2024 at 6:30:00 PM UTC