Skip to content

Latest commit

 

History

History
235 lines (203 loc) · 12.5 KB

quickstart-guide.jp.md

File metadata and controls

235 lines (203 loc) · 12.5 KB

Gatling Commander クイックスタートガイド

Gatling Commanderをすぐに利用するため、実行環境の作成と実行方法について最小限の情報を記載しています。
設定ファイル、権限・認証に関する詳しい説明はUser Guideを参照してください。

事前準備

モジュールのインストール

go install github.com/st-tech/gatling-commander@latest

ツールのインストール

Gatling Operatorの環境構築

Gatling CommanderはGatling Operatorの利用を前提としています。
Gatling OperatorのQuick Start Guideを参考にGatling Operatorを利用可能な環境構築を行なってください。

コマンド実行を行うディレクトリ内にgatlingディレクトリを作成し、Gatling Operator実行時に必要なファイルのコピーや作成を行なってください。
詳細はWhat is this gatling directory?を参照してください。

Google Sheetsの作成

負荷試験結果の記録先としてGoogle Sheetsを利用しています。
記録先のシートには、既存のシート・新規作成のシートの両方が利用可能です。

次の作業を実施して記録先のGoogle SheetsのIDの取得と編集者権限の付与をしてください。

  • IDの取得
    • 負荷試験結果の記録を行うGoogle Sheetsを開き、URLの{ID}に該当する文字列をコピーしてください
    • コピーした文字列はconfig.yamlservices[].spreadsheetIDに設定してください
  • シートの権限付与
    • Gatling Commanderを利用する際に、認証するアカウントへGoogle Sheetsの編集者権限を付与してください
      • 記録先のシートのUIから共有ボタンをクリックし、対象のアカウントへ編集者権限を付与できます

負荷試験設定ファイルの作成

負荷試験の設定値は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リソースのマニフェスト作成

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>

Sheets APIへの認証

負荷試験結果は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.yamlimageURLに予めbuildしたGatling ImageのURLを設定する必要があります。
--skip-buildオプションを指定しない場合は、常に新しいGatling Imageがbuildされます。

config.yamlservicesには各serviceごとの設定値を配列で記述します。
config.yamlservices[].scenarioSpecsには負荷試験ごとの設定値を配列で記述します。

config.yamlservicesに記載した各serviceごとの負荷試験群は並行で実行されます。
service内のscenarioSpecsに記載した負荷試験は記載順に順次実行されます。

負荷試験結果の出力

負荷試験結果はconfig.yamlで指定したGoogle Sheetsに記録されます。
記録用のシートはGatling Commanderにより作成され、config.yamlservices[].name + 実行日の形式で作成されます。(例:sample-service-20231113

同一のservice名を持ち、同じ日付に実施された負荷試験の記録用シートは同名であるため、既存のシートに追記する形で記録されます。
追記される結果は一番下の行に追加されます。

負荷試験実行の中止

ctrl + cで実行中のGatling Commanderのプロセスを終了することで、負荷試験実行を中断することができます。
中断すると実行中のGatling Objectは直ちに削除されます。

負荷試験終了の通知

config.yamlslackConfig.webhookURLにSlackのWebhook URLを指定することで、負荷試験が終了した際にSlackに通知できます。
SlackのWebhook URLについてはSlack APIの公式ドキュメントを参考にコンソールから取得してください。

閾値による負荷試験実行の中止

service内のscenarioSpecsに指定した負荷試験は順次実行されます。
負荷試験実行後にGatling Reportの結果に応じて、同一serviceでの以降の負荷試験を中止できます。

Failした際の中止

Gatlingの負荷試験では、負荷試験シナリオで指定した以外のレスポンスが返された場合にfailとして扱われます。
config.yamlfailFasttrueに設定すると負荷試験結果にfailedが含まれた場合に、同一serviceでの以降の負荷試験を実施しません。

目標レイテンシを上回った際の中止

Gatling Commanderではserviceごとに目標レイテンシの閾値を設定し、閾値を超えた場合に以降の負荷試験を中止できます。
レイテンシの閾値チェックを行うには、config.yamltargetLatencytargetPercentileの両方を設定します。

  • targetPercentile
    • 閾値のパーセンタイル値を指定してください。値は[50, 75, 95, 99]の中から指定可能です
  • targetLatency
    • レイテンシの閾値をミリ秒で指定してください