Gatling Commanderをすぐに利用するため、実行環境の作成と実行方法について最小限の情報を記載しています。
設定ファイル、権限・認証に関する詳しい説明はUser Guideを参照してください。
go install github.com/st-tech/gatling-commander@latest
- Gatling Operator
- Docker
- Go
- version: 1.20
- Google Sheets
- 負荷試験結果の書き込み先として事前にシートの作成が必要です
- Google Cloud Project
- Google Sheetsの認証に必要です
Gatling CommanderはGatling Operatorの利用を前提としています。
Gatling OperatorのQuick Start Guideを参考にGatling Operatorを利用可能な環境構築を行なってください。
コマンド実行を行うディレクトリ内にgatling
ディレクトリを作成し、Gatling Operator実行時に必要なファイルのコピーや作成を行なってください。
詳細はWhat is this gatling
directory?を参照してください。
負荷試験結果の記録先としてGoogle Sheetsを利用しています。
記録先のシートには、既存のシート・新規作成のシートの両方が利用可能です。
次の作業を実施して記録先のGoogle SheetsのIDの取得と編集者権限の付与をしてください。
- IDの取得
- 負荷試験結果の記録を行うGoogle Sheetsを開き、URLの{ID}に該当する文字列をコピーしてください
- コピーした文字列は
config.yaml
のservices[].spreadsheetID
に設定してください
- シートの権限付与
- Gatling Commanderを利用する際に、認証するアカウントへGoogle Sheetsの編集者権限を付与してください
- 記録先のシートのUIから共有ボタンをクリックし、対象のアカウントへ編集者権限を付与できます
- Gatling Commanderを利用する際に、認証するアカウントへGoogle Sheetsの編集者権限を付与してください
負荷試験の設定値はconfig/config.yaml
に記述します。
また、Gatlingリソースのマニフェスト作成で後述するbase_manifest.yaml
のうち、<config.yaml overrides this field>
と記載のあるフィールドはconfig.yaml
に記述したフィールドの値により上書きされます。
config.yaml
の各フィールドに設定する値の詳細はUser Guideを参照してください。
以下はconfig.yaml
のサンプルです。
gatlingContextName: gatling-cluster-context-name
imageRepository: gatling-image-stored-repository-url
imagePrefix: gatlinge-image-name-prefix
imageURL: "" # (Optional) specify image url when using pre build gatling container image
baseManifest: config/base_manifest.yaml
gatlingDockerfileDir: gatling
startupTimeoutSec: 1800 # 30min
execTimeoutSec: 10800 # 3h
slackConfig:
webhookURL: slack-webhook-url
mentionText: <@targetMemberID>
services:
- name: sample-service
spreadsheetID: sample-sheets-id
failFast: false
targetPercentile:
targetLatency:
targetPodConfig:
contextName: target-pod-context-name
namespace: sample-namespace
labelKey: run
labelValue: sample-api
containerName: sample-api
scenarioSpecs:
- name: case-1
subName: 10rps
testScenarioSpec:
simulationClass: SampleSimulation
parallelism: 1
env:
- name: ENV
value: "dev"
- name: CONCURRENCY
value: "10"
- name: DURATION
value: "180"
- name: case-2
subName: 20rps
testScenarioSpec:
simulationClass: SampleSimulation
parallelism: 1
env:
- name: ENV
value: "dev"
- name: CONCURRENCY
value: "20"
- name: DURATION
value: "180"
Gatling CommanderではGatling Operatorで利用するKubernetesのCustom ResourceであるGatlingリソースのオブジェクトを作成して負荷試験を行います。
base_manifest.yaml
はGatlingリソースのKubernetesマニフェストです。
base_manifest.yaml
にはGatlingリソースについて、負荷試験ごとに共通の値を記述します。
base_manifest.yaml
に<config.yaml overrides this field>
と記載があるフィールドは、負荷試験ごとにconfig.yaml
の値で上書きされます。そのため、base_manifest.yaml
の値を変更する事なく複数の負荷試験を連続して実行できます。
config/base_manifest.yaml
の記述については、Gatling Operatorのサンプルを参考に、利用する環境に合わせて作成してください。
詳細についてはUser Guideを参照してください。
以下はbase_manifest.yaml
のサンプルです。
apiVersion: gatling-operator.tech.zozo.com/v1alpha1
kind: Gatling
metadata:
name: <config.yaml overrides this field> # will be overrided by services[].name field value in config.yaml. ex: sample-service
namespace: gatling
spec:
generateReport: true
generateLocalReport: true
notifyReport: false
cleanupAfterJobDone: false
podSpec:
gatlingImage: <config.yaml overrides this field> # will be overrided by built Gatling Image URL or imageURL field value in config.yaml. ex: asia-docker.pkg.dev/project_id/foo/bar/gatlinge-image-name-prefix-YYYYMMDD
rcloneImage: rclone/rclone
resources:
requests:
cpu: "7000m"
memory: "4G"
limits:
cpu: "7000m"
memory: "4G"
serviceAccountName: "gatling-operator-worker-service-account"
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: cloud.google.com/gke-nodepool
operator: In
values:
- "gatling-operator-worker-pool"
tolerations:
- key: "dedicated"
operator: "Equal"
value: "gatling-operator-worker-pool"
effect: "NoSchedule"
cloudStorageSpec:
provider: "gcp"
bucket: "report-storage-bucket-name"
notificationServiceSpec:
provider: "slack"
secretName: "gatling-notification-slack-secrets"
testScenarioSpec:
parallelism: 1 # <config.yaml overrides this field> # will be overrided by services[].scenarioSpecs[].testScenarioSpec.parallelism field value. ex: 1
simulationClass: <config.yaml overrides this field> # will be overrided by services[].scenarioSpecs[].testScenarioSpec.simulationClass field value. ex: SampleSimulation
env: # will be overrided by services[].scenarioSpecs[].testScenarioSpec.env[] field value. ex: `env: [{name: ENV, value: "dev"}, {name: CONCURRENCY, value: "20"}]`
- name: <config.yaml overrides this field>
value: <config.yaml overrides this field>
負荷試験結果はGoogle Sheetsに記録されます。
記録にはシートの編集者権限が必要になるため、Google Cloud ProjectでGoogle Sheets APIを有効化し、利用するGoogleアカウント・サービスアカウントを認証してください。
gcloud auth application-default login --scopes=https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/spreadsheets
次のコマンドにより負荷試験が実行されます。
gatling-commander exec --config "config/config.yaml"
--skip-build
オプションを指定するとGatling Imageのbuildをスキップできます。
このオプションを使用するには、config.yaml
でimageURL
に予めbuildしたGatling ImageのURLを設定する必要があります。
--skip-build
オプションを指定しない場合は、常に新しいGatling Imageがbuildされます。
config.yaml
のservices
には各serviceごとの設定値を配列で記述します。
config.yaml
のservices[].scenarioSpecs
には負荷試験ごとの設定値を配列で記述します。
config.yaml
のservices
に記載した各serviceごとの負荷試験群は並行で実行されます。
service内のscenarioSpecs
に記載した負荷試験は記載順に順次実行されます。
負荷試験結果はconfig.yaml
で指定したGoogle Sheetsに記録されます。
記録用のシートはGatling Commanderにより作成され、config.yaml
のservices[].name
+ 実行日
の形式で作成されます。(例:sample-service-20231113
)
同一のservice名を持ち、同じ日付に実施された負荷試験の記録用シートは同名であるため、既存のシートに追記する形で記録されます。
追記される結果は一番下の行に追加されます。
ctrl + c
で実行中のGatling Commanderのプロセスを終了することで、負荷試験実行を中断することができます。
中断すると実行中のGatling Objectは直ちに削除されます。
config.yaml
のslackConfig.webhookURL
にSlackのWebhook URLを指定することで、負荷試験が終了した際にSlackに通知できます。
SlackのWebhook URLについてはSlack APIの公式ドキュメントを参考にコンソールから取得してください。
service内のscenarioSpecs
に指定した負荷試験は順次実行されます。
負荷試験実行後にGatling Reportの結果に応じて、同一serviceでの以降の負荷試験を中止できます。
Gatlingの負荷試験では、負荷試験シナリオで指定した以外のレスポンスが返された場合にfailとして扱われます。
config.yaml
のfailFast
をtrue
に設定すると負荷試験結果にfailedが含まれた場合に、同一serviceでの以降の負荷試験を実施しません。
Gatling Commanderではserviceごとに目標レイテンシの閾値を設定し、閾値を超えた場合に以降の負荷試験を中止できます。
レイテンシの閾値チェックを行うには、config.yaml
のtargetLatency
・targetPercentile
の両方を設定します。
- targetPercentile
- 閾値のパーセンタイル値を指定してください。値は[50, 75, 95, 99]の中から指定可能です
- targetLatency
- レイテンシの閾値をミリ秒で指定してください