概要
- GCPのインスタンスにheyをインストールする方法です。
- heyとは
- heyは、Go言語で書かれたHTTP負荷テストツールです。
参考URL
- hey
-
Goの最新バージョン
- 2024年2月時点での最新バージョンは、go1.22.0です。
環境
- GCPのComputeEngineなどのVMインスタンス。
- OSはDebian系(Ubuntu, Debian, etc)を想定。
事前準備
- 事前にGCPのインスタンスを作成しておく。
- インスタンスにSSHでログインしておく。
- マネジメントコンソール > ComputeEngine > VMインスタンス > SSHをクリックすると、SSHでログインできます。
インストール手順
-
SSHで接続したターミナルで以下のコマンドを実行します。
-
Goのインストール
wget https://dl.google.com/go/go1.22.0.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz
-
環境変数の設定
export PATH=$PATH:/usr/local/go/bin source ~/.profile
echo 'export PATH=$PATH:$HOME/go/bin' >> ~/.bashrc source ~/.bashrc
-
Goのバージョン確認
-
go version go1.22.0 linux/amd64
などのように表示されればOKです。
go version
-
-
heyのインストール
go install github.com/rakyll/hey@latest
-
heyがインストールされたか確認
hey -h
- 以下のように表示されればOKです。
flag needs an argument: -h Usage: hey [options...] <url> Options: -n Number of requests to run. Default is 200. -c Number of workers to run concurrently. Total number of requests cannot be smaller than the concurrency level. Default is 50. -q Rate limit, in queries per second (QPS) per worker. Default is no rate limit. -z Duration of application to send requests. When duration is reached, application stops and exits. If duration is specified, n is ignored. Examples: -z 10s -z 3m. -o Output type. If none provided, a summary is printed. "csv" is the only supported alternative. Dumps the response metrics in comma-separated values format. -m HTTP method, one of GET, POST, PUT, DELETE, HEAD, OPTIONS. -H Custom HTTP header. You can specify as many as needed by repeating the flag. For example, -H "Accept: text/html" -H "Content-Type: application/xml" . -t Timeout for each request in seconds. Default is 20, use 0 for infinite. -A HTTP Accept header. -d HTTP request body. -D HTTP request body from file. For example, /home/user/file.txt or ./file.txt. -T Content-type, defaults to "text/html". -a Basic authentication, username:password. -x HTTP Proxy address as host:port. -h2 Enable HTTP/2. -host HTTP Host header. -disable-compression Disable compression. -disable-keepalive Disable keep-alive, prevents re-use of TCP connections between different HTTP requests. -disable-redirects Disable following of HTTP redirects -cpus Number of used cpu cores. (default for current machine is 2 cores)
オプション解説
-n: 実行するリクエストの総数を指定します。デフォルトは200です。
-c: 同時に実行するワーカー(スレッドまたはプロセス)の数を指定します。全リクエスト数はこの同時実行レベルよりも小さくできません。デフォルトは50です。
-q: ワーカーごとの秒間クエリ数(QPS)でレート制限を設定します。デフォルトではレート制限はありません。
-z: リクエストの送信を続ける期間を指定します。この期間が経過すると、アプリケーションは停止して終了します。期間が指定された場合、-nオプションは無視されます。例: -z 10s(10秒間)、-z 3m(3分間)。
-o: 出力タイプを指定します。指定がない場合はサマリーが印刷されます。"csv"はサポートされている唯一の代替フォーマットで、レスポンスメトリクスをCSVフォーマットでダンプします。
-m: HTTPメソッドを指定します。GET, POST, PUT, DELETE, HEAD, OPTIONSのいずれか。
-H: カスタムHTTPヘッダーを指定します。必要な数だけフラグを繰り返して指定できます。例: -H "Accept: text/html" -H "Content-Type: application/xml".
-t: 各リクエストのタイムアウトを秒単位で指定します。デフォルトは20秒です。無限にするには0を使用します。
-A: HTTP Acceptヘッダーを指定します。
-d: HTTPリクエストボディを指定します。
-D: ファイルからHTTPリクエストボディを指定します。例: /home/user/file.txtや./file.txt。
-T: Content-Typeを指定します。デフォルトは"text/html"です。
-a: ベーシック認証をusername:passwordの形式で指定します。
-x: host:port形式でHTTPプロキシアドレスを指定します。
-h2: HTTP/2を有効にします。
-host: HTTP Hostヘッダーを指定します。
-disable-compression: 圧縮を無効にします。
-disable-keepalive: Keep-Aliveを無効にし、異なるHTTPリクエスト間でTCP接続の再利用を防ぎます。
-disable-redirects: HTTPリダイレクトの追跡を無効にします。
-cpus: 使用するCPUコアの数を指定します。デフォルトは現在のマシンのコア数に基づいています。
heyのコマンド例
-
条件:1秒あたり10リクエストを50ワーカーで60秒間継続してリクエストを送信する場合
- ワーカー数c: 50
- 秒間クエリq: 10
- リクエスト継続時間z: 60秒
- リクエストメソッドm: POST
- コンテンツタイプT: application/json
- リクエストボディd: {"name": "john", "age": 30, "job": "engineer"}
- リクエストURL: https://example.com/api/v1/users
hey -c 50 -q 10 -z 60s -m POST -T application/json -d '{"name": "john", "age": 30, "job": "engineer"}' https://example.com/api/v1/users
-
このように、heyを使って、HTTPリクエストを送信することで、Webサーバーの負荷テストを行うことができます。
-
上記の例でのheyコマンドの実行結果は、以下のようになります。テキスト形式での結果が表示されます。
Summary: Total: 60.1276 secs Slowest: 0.5428 secs Fastest: 0.1239 secs Average: 0.1284 secs Requests/sec: 388.3577 Total data: 10110983 bytes Size/request: 433 bytes Response time histogram: 0.124 [1] | 0.166 [23300] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 0.208 [0] | 0.250 [0] | 0.291 [0] | 0.333 [0] | 0.375 [0] | 0.417 [0] | 0.459 [31] | 0.501 [13] | 0.543 [6] | Latency distribution: 10% in 0.1259 secs 25% in 0.1267 secs 50% in 0.1276 secs 75% in 0.1284 secs 90% in 0.1295 secs 95% in 0.1301 secs 99% in 0.1323 secs Details (average, fastest, slowest): DNS+dialup: 0.0007 secs, 0.1239 secs, 0.5428 secs DNS-lookup: 0.0000 secs, 0.0000 secs, 0.0040 secs req write: 0.0000 secs, 0.0000 secs, 0.0059 secs resp wait: 0.1276 secs, 0.1238 secs, 0.2294 secs resp read: 0.0000 secs, 0.0000 secs, 0.0009 secs Status code distribution: [404] 23351 responses
-
以上で、GCPインスタンスでのheyインストール方法の説明を終わります。