Pythonの負荷試験ツールLocustの検証です。
「イナゴ」という意味のLocustでシナリオ試験などをpythonコードで書いて試験することができます。
また、WebUIを使って試験を行うことができます。
アタックに必要なノードなどを増やしていきながらの試験も実施できます。
今回はCentOS8に導入していました。
Locustのインストール
以下の手順でインストールを行います。
pipを最新にアップデートしておきます。
1 2 3 4 5 6 7 |
# dnf -y install gcc python3-devel # pip3 install --upgrade pip # pip3 install -U locust # locust -V locust 1.6.0 |
今回は1.6.0のものがインストールされております。
Firewalldを利用していて、WebUIを使用する場合は以下で停止しておきます。
1 2 3 4 |
# firewall-cmd --add-port=8089/tcp --zone=public --permanent # firewall-cmd --reload |
Locustを使った負荷試験
まず利用方法としてドキュメントは以下にあります。
https://docs.locust.io/en/stable/
今回は非常に簡易なファイルとして以下を用意しました。
1 2 3 4 5 6 7 8 9 10 |
from locust import HttpUser, task, between class QuickstartUser(HttpUser): wait_time = between(1, 2.5) @task def on_start(self): self.client.get("/") |
「locustfile.py」というファイル名で保存しています。
こちらを実行するとWebUIが起動します。
1 2 3 4 5 |
# locust -f locustfile.py [2021-07-06 17:06:41,769] test-web01/INFO/locust.main: Starting web interface at http://0.0.0.0:8089 (accepting connections from all network interfaces) [2021-07-06 17:06:41,782] test-web01/INFO/locust.main: Starting Locust 1.6.0 |
ブラウザで「http://xxx.xxx.xxx.xxx:8089/」(設定機器のIPにしてください)にアクセスすると以下のような画面になります。
こちらのWebUIを利用してテストを行います。
設定する内容は以下となります。
Number of total users to simulate
同時接続ユーザー数の最大値
Hatch rate
1秒毎に増加していくユーザーの数
Host
接続をを行うサーバのURL(負荷試験の対象)
こちらに値を入れるとテストが開始します。
以下の画面のようにテストを行います。(上から3、3、接続ホストの値を入れました。)
こちらでテストの結果を確認することができます。
サーバ側のアクセスログでは以下のような形で出ておりました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
xxx.xxx.xxx.xxx - - [06/Jul/2021:17:11:11 +0900] "GET // HTTP/1.1" 301 - xxx.xxx.xxx.xxx - - [06/Jul/2021:17:11:12 +0900] "GET // HTTP/1.1" 301 - xxx.xxx.xxx.xxx - - [06/Jul/2021:17:11:11 +0900] "GET // HTTP/1.1" 301 - xxx.xxx.xxx.xxx - - [06/Jul/2021:17:11:16 +0900] "GET / HTTP/1.1" 200 54260 xxx.xxx.xxx.xxx - - [06/Jul/2021:17:11:16 +0900] "GET / HTTP/1.1" 200 54260 xxx.xxx.xxx.xxx - - [06/Jul/2021:17:11:16 +0900] "GET / HTTP/1.1" 200 54260 xxx.xxx.xxx.xxx - - [06/Jul/2021:17:11:29 +0900] "GET // HTTP/1.1" 301 - xxx.xxx.xxx.xxx - - [06/Jul/2021:17:11:29 +0900] "GET // HTTP/1.1" 301 - xxx.xxx.xxx.xxx - - [06/Jul/2021:17:11:32 +0900] "GET // HTTP/1.1" 301 - xxx.xxx.xxx.xxx - - [06/Jul/2021:17:11:34 +0900] "GET / HTTP/1.1" 200 54260 xxx.xxx.xxx.xxx - - [06/Jul/2021:17:11:34 +0900] "GET / HTTP/1.1" 200 54260 xxx.xxx.xxx.xxx - - [06/Jul/2021:17:11:39 +0900] "GET / HTTP/1.1" 200 54260 xxx.xxx.xxx.xxx - - [06/Jul/2021:17:11:46 +0900] "GET // HTTP/1.1" 301 - xxx.xxx.xxx.xxx - - [06/Jul/2021:17:11:48 +0900] "GET // HTTP/1.1" 301 - xxx.xxx.xxx.xxx - - [06/Jul/2021:17:11:51 +0900] "GET / HTTP/1.1" 200 54260 xxx.xxx.xxx.xxx - - [06/Jul/2021:17:11:53 +0900] "GET // HTTP/1.1" 301 - xxx.xxx.xxx.xxx - - [06/Jul/2021:17:11:53 +0900] "GET / HTTP/1.1" 200 54260 xxx.xxx.xxx.xxx - - [06/Jul/2021:17:11:59 +0900] "GET / HTTP/1.1" 200 54260 xxx.xxx.xxx.xxx - - [06/Jul/2021:17:12:08 +0900] "GET // HTTP/1.1" 301 - xxx.xxx.xxx.xxx - - [06/Jul/2021:17:12:08 +0900] "GET // HTTP/1.1" 301 - xxx.xxx.xxx.xxx - - [06/Jul/2021:17:12:12 +0900] "GET // HTTP/1.1" 301 - |
非常に簡単なテストでしたがログインをしての試験や、item_idを複数用意してのシナリオの試験が実施可能となります。
今回はこの辺で。
このブログは株式会社CoLabMixによる技術ブログです。
GCP、AWSなどでのインフラ構築・運用や、クローリング・分析・検索などを主体とした開発を行なっています。
Ruby on RailsやDjango、Pythonなどの開発依頼などお気軽にお声がけください。
開発パートナーを増やしたいという企業と積極的に繋がっていきたいです。
お問い合わせやご依頼・ご相談など