はじめに
locustはお手軽で良い。サクサクっと性能測定して、自分でグラフを作るまでもなくWebUIで動作が確認できる。
でも、WebUIだと95%タイルと中央値しか表示されなくて物足りないんじゃー!平均とかも確認させろ!な人向け。
やること
起動時のマスターノードのオプションを以下のようにすること。以上。簡単!
locust --master --csv=log/test --csv-full-history
これで、(起動ディレクトリ)/log 配下に以下のようにファイルが出力されるようになる。
/locust$ ls log
test_failures.csv test_stats.csv test_stats_history.csv
コンテナ起動している場合、素のままだとログファイルがコンテナに閉じ込められてしまうので、docker-compose等で
docker-compose.yml
services:
locust-master:
volumes:
- ./log:/locust/log
とか定義しておこう。
これで
test_stats_history.csv
Timestamp,User Count,Type,Name,Requests/s,Failures/s,50%,66%,75%,80%,90%,95%,98%,99%,99.9%,99.99%,100%,Total Request Count,Total Failure Count,Total Median Response Time,Total Average Response Time,Total Min Response Time,Total Max Response Time,Total Average Content Size
1603540111,17,GET,/xxxxx/,0.000000,0.000000,2,2,3,3,4,28,28,28,28,28,28,11,0,2,4.694659181702511,1.4053259992579115,28.377445999467454,14265.0
1603540111,17,GET,/yyyyy/,0.000000,0.000000,3,3,3,4,9,9,9,9,9,9,9,10,0,3,3.410866200010787,2.1423650005090167,8.981184999356628,93670.0
1603540111,17,GET,/zzzzz/,0.000000,0.000000,2,2,3,3,4,6,19,24,24,24,24,76,0,2,2.9205118157374512,1.2653539997700136,24.40452499922685,4668.0
1603540111,17,,Aggregated,0.000000,0.000000,2,3,3,3,4,8,24,28,28,28,28,97,0,2,3.1722557834523895,1.2653539997700136,28.377445999467454,14931.783505154639
(以下略)
な感じで、リソース単位の集計を取ることができるようになる!
補足
ログに出力するパーセンタイルも調整可能っぽい。
公式ドキュメントによると、
import locust.stats
locust.stats.CONSOLE_STATS_INTERVAL_SEC = 15
みたいな感じで PERCENTILES_TO_REPORT
を変更することができるようだ。
ドキュメントが不親切でどう変更したら良いかわからないので、ソースを見てみると
grep PERCENTILES_TO_REPORT /usr/local/lib/python3.9/site-packages/locust/stats.py
PERCENTILES_TO_REPORT = [0.50, 0.66, 0.75, 0.80, 0.90, 0.95, 0.98, 0.99, 0.999, 0.9999, 1.0]
な感じで書かれているので、locustfile.py に
import locust.stats
locust.stats.PERCENTILES_TO_REPORT = [0.95]
を書き加えてオーバーライドすると
Timestamp,User Count,Type,Name,Requests/s,Failures/s,95%,Total Request Count,Total Failure Count,Total Median Response Time,Total Average Response Time,Total Min Response Time,Total Max Response Time,Total Average Content Size
1603542253,4,GET,/xxxxx/,0.000000,0.000000,22,2,0,2.2806119995948393,12.121530499825894,2.2806119995948393,21.96244900005695,14265.0
1603542253,4,GET,/yyyyy/,0.000000,0.000000,3,2,0,2.666434999810008,2.6112880000255245,2.556141000241041,2.666434999810008,93670.0
1603542253,4,GET,/zzzzz/,0.000000,0.000000,28,4,0,2.067968999654113,8.805921999964994,2.067968999654113,27.854616000695387,4668.0
1603542253,4,,Aggregated,0.000000,0.000000,28,8,0,3,8.086165624945352,2.067968999654113,27.854616000695387,29317.75
お、なんかスッキリした出力になった!