Skip to content

Latest commit

 

History

History
156 lines (120 loc) · 12.9 KB

user-guide.jp.md

File metadata and controls

156 lines (120 loc) · 12.9 KB

Gatling Commander ユーザーガイド

Gatling Commanderを利用する際の設定ファイルの書き方や認証について説明しています。
ツールのインストールやGatling Operatorのセットアップ、負荷試験シナリオの作成などの事前準備・実行方法についてはQuick Start Guideを参照してください。

設定ファイルの概要

Gatling Commanderでは、設定ファイルとして次の2種類のYAMLファイルを用意する必要があります。

  • config.yaml
  • base_manifest.yaml

負荷試験の設定値はconfig.yamlに記載します。

base_manifest.yamlにはGatlingリソースのKubernetesマニフェストのうち、負荷試験ごとに共通の値を記述します。

base_manifest.yaml<config.yaml overrides this field>と記載があるフィールドは、負荷試験ごとにconfig.yamlの値で上書きされます。そのため、base_manifest.yamlの値を変更する事なく複数の負荷試験を連続して実行できます。

config.yamlbase_manifest.yamlの保存場所、ファイル名は任意の値を指定可能です。
参照するconfig.yamlのパスについては、コマンド実行時に--configオプションの値を指定してください。
参照するbase_manifest.yamlのパスについては、config.yamlbaseManifestに設定してください。

負荷試験設定

config.yamlの各フィールドについて説明します。

config.yamlの階層

config.yamlは階層構造となっています。

Gatling Commanderでは、個々の負荷試験のグループとしてserviceを定義します。
serviceは同一の負荷試験対象に関する1つ以上の負荷試験シナリオを持ちます。
同一serviceの負荷試験の結果は、config.yamlservices[].spreadsheetIDで指定したGoogle Sheetsに記録されます。

個々の負荷試験シナリオ設定はconfig.yamltestScenarioSpecに定義します。これはGatling Operatorのみを利用して負荷試験を行う場合に設定するGatling ObjectのtestScenarioSpecの値と同じです。

config.yamlのトップレベルのフィールドでは負荷試験全体で共通の設定値を指定し、config.yamlservicesには各serviceごとの設定値を指定します。
またconfig.yamlservices[].testScenarioSpecには負荷試験ごとの設定値を指定します。

このようにconfig.yamlでは、負荷試験全体に共通の設定値 -> serviceごとの設定値 -> 負荷試験ごとのシナリオと設定値がネストされた階層構造で構成されています。

負荷試験全体の設定値

config.yamlのうち、負荷試験全体で共通の設定値について説明します。

Field Description
gatlingContextName string (Required) Context name of Kubernetes cluster which Gatling Pod running in.
imageRepository string (Required) Container image repository url in which Gatling image is stored.
imagePrefix string (Required) String which is used to add built Gatling image name prefix.
imageURL string (Optional) Container image URL. When you run exec subcommand with --skip-build arguments, you must fill this field to specify Gatling image.
baseManifest string (Required) Path of Gatling Kubernetes manifest.
gatlingDockerfileDir string (Required) Path of directory in which Dockerfile for Gatling image is stored.
startupTimeoutSec integer (Required) Timeout seconds threshold about each Gatling Job startup.
execTimeoutSec integer (Required) Timeout seconds threshold about each Gatling Job running.
slackConfig.webhookURL string (Optional) Slack webhook url for notification. If set this value, finished CLI will be notified.
slackConfig.mentionText string (Optional) Slack mention target. If set member_id to this field, CLI notification mention user who has the member_id. The webhookURL field must be specified with this field value.
services []object (Required) This field has some services setting values.

serviceの設定値

config.yamlのうち、serviceごとの設定値について説明します。

Field Description
name string (Required) Service name. Please specify any value. Used in Gatling object metadata name and so on.
spreadsheetID string (Required) Google Sheets ID to which load test result will be written.
failFast boolean (Required) The flag determining whether start next load test or not when current load test result failed item value count exceeds 0.
targetPercentile integer (Optional) Threshold of latency percentile, specify this field value from [50, 75, 95, 99]. If this field value is set, CLI check current load test result specified percentile value and whether decide to start next load test or not. The targetLatency field must be specified with this field value.
targetLatency integer (Optional) Threshold of latency milliseconds, this field must be specified with targetPercentile.
targetPodConfig.contextName string (Required) Context name of Kubernetes cluster which loadtest target Pod running in.
targetPodConfig.namespace string (Required) Kubernetes namespace in which load test target Pod is running.
targetPodConfig.labelKey string (Required) Metadata Labels key of load test target Pod.
targetPodConfig.labelValue string (Required) Metadata Labels value of load test target Pod.
targetPodConfig.containerName string (Required) Name of load test target container name which is running in load test target Pod.
scenarioSpecs []object (Required) This field has some scenarioSpecs setting values.

負荷試験シナリオの設定値

config.yamlのうち、個々の負荷試験シナリオごとの設定値について説明します。

Field Description
name string (Required) Load test name which is used as Google Sheets name and so on.
subName string (Required) Load test sub name which is used in load test result row subName column.
testScenarioSpec object (Required) Gatling object testScenarioSpec field. Please refer gatling-operator document TestScenarioSpec.

Gatling リソースのマニフェスト

base_manifest.yamlにはGatlingリソースのKubernetesマニフェストのうち、負荷試験ごとに共通する値を設定するフィールドを記述します。
GatlingリソースのKubernetesマニフェストのフィールドについては、Gatling OperatorのAPI Referenceを参照してください。

base_manifest.yaml<config.yaml overrides this field>と記載があるフィールドは、負荷試験ごとにconfig.yamlの値で上書きされます。そのため、base_manifest.yamlでこれらのフィールドの値は変更不要です。

※ Gatling Commanderはbase_manifest.yamlの値をconfig.yamlの値で置き換える前に、一度GoのGatling構造体のオブジェクトにその値を読み込みます。そのため、base_manifest.yamlの各フィールドの値の型はGatling構造体の各フィールドの値の型と一致する必要があります。型が一致しない場合次のようなエラーが発生します。

json: cannot unmarshal string into Go struct field TestScenarioSpec.spec.testScenarioSpec.parallelism of type int32

base_manifest.yamlのうち、config.yamlの値で置き換えられるフィールドについて説明します。

Field Description
metadata.name string Overwritten by service name loaded from services[].name field value in config.yaml
spec.podSpec.gatlingImage string Overwritten by built Gatling image URL or image URL loaded from imageURL field value in config.yaml
spec.testScenarioSpec.parallelism interger Overwritten by services[].scenarioSpecs[].testScenarioSpec.parallelism field value in config.yaml
spec.testScenarioSpec.simulationClass string Overwritten by services[].scenarioSpecs[].testScenarioSpec.simulationClass field value in config.yaml
spec.testScenarioSpec.env[] []dict Overwritten by services[].scenarioSpecs[].testScenarioSpec.env[] field value in config.yaml

権限と認証

Gatling Commanderの実行には次の権限が必要です。

  • docker imageをpull・pushできる権限
  • Kubernetesクラスタでオブジェクトの取得・作成・削除ができる権限
  • Cloud Storageからの読み取り権限
  • Google Sheetsへの読み取り・書き込み権限

docker imageをpull・pushできる権限

config.yamlimageURLを指定しない場合、新しくGatling Imageをbuildし指定したImage Repositoryにpushします。
Gatling Commanderでは現状Google Cloudのみでの利用をサポートしており、Google Artifact RegistryGoogle Container Registryが利用可能です。

Gatling Imageのbuild・pushを行う場合は、Gatling Commanderの実行環境で認証されるアカウントにImageをpushするために必要な権限を付与してください。

Kubernetesクラスタでオブジェクトを読み取り・書き込み・削除できる権限

Gatling Commanderでは指定したクラスタでGatling Objectの作成・取得・削除や負荷試験対象のPodのメトリクスの取得を行います。

Kubernetesの認証情報は$HOME/.kube/configを参照して取得しています。
Gatling Commanderの実行環境で認証されるアカウントにKubernetesオブジェクトの取得・作成・削除ができる権限を付与してください。

Cloud Storageからの読み取り権限

Gatling Operatorの仕様として、負荷試験実行後にGatling ReportがcloudStorageSpecで設定したproviderbucketに出力されます。
Gatling Commanderでは設定したbucketにアップロードされたGatling Reportを取得し、対象の項目を読み取ってGoogle Sheetsに記録します。

Gatling Commanderでは現状Google Cloudのみでの利用をサポートしており、Google Cloud StorageにアップロードされたGatling Reportから負荷試験結果の読み取りを行います。

Gatling Commanderの実行環境で認証されるアカウントにファイルを取得するために必要な権限付与してください。

Google Sheetsへの読み取り・書き込み権限

Gatling Commanderでは負荷試験結果を指定されたGoogle Sheetsに記録します。
Gatling Commanderの実行環境で認証されるアカウントに、対象のGoogle Sheetsの編集者権限を付与してください。

Google Sheets APIの認証

Gatling CommanderでGoogle Sheetsを操作する際にはGoogle Sheets APIを利用します。Google Cloud Projectがない場合はProjectを作成し、Google Sheets APIを有効化してください。
Google Sheetsのシートを作成後、認証するアカウントへシートの編集権限を付与してください。

次のコマンドを実行し、Google Sheetsの認証を行なってください。

gcloud auth application-default login --scopes=https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/spreadsheets