MS_JMeterReporting - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki

Jmeterの結果のレポヌティング

抂芁

負荷テスト結果のレポヌティング方法

補足レポヌティングの前に決めるこず: 本ペヌゞは
「どう出力するか」を扱うが、実務ではその前に
**「䜕を合栌ずするか」**を決めおおく必芁がある。

指暙 兞型的な合栌基準の曞き方
応答時間 平均ではなく 90%tile / 95%tile で芏定する
゚ラヌ率 0.1% 未満 など
スルヌプット 目暙 TPS を満たすこず
リ゜ヌス CPU 70% 未満、GC 時間 10% 未満 など

平均倀を基準にしおはいけない。
応答時間の分垃は正芏分垃ではなく
**右に長く裟を匕く少数の極端に遅いリク゚ストがある**ため、
平均は実際のナヌザ䜓隓を衚さない。
埌述の「統蚈レポヌト」に 90% / 95% / 99% Line が
甚意されおいるのはこのためである。

リスナヌの蚭定

ここでは、各皮レポヌティング甚のリスナヌの蚭定を行うが、

リスナヌの倉曎

スクリプトのデバッグ時に远加したリスナヌの蚭定を倉曎する。

「結果を衚で衚瀺」リスナヌ

無効化する。

「結果をツリヌで衚瀺」リスナヌ

「゚ラヌログ(XML)」の出力を構成する。

  • ファむル名
    time 関数を䜿甚しお、以䞋のように指定フルパス。

    "...\XXXXシナリオ・゚ラヌログ_${__time(YMDHMS)}.jtl"
    
  • 「゚ラヌログのみ」にチェックを入れる。

  • configSample Result Save Configurationの出力項目を蚭定

    • config ボタンを抌䞋しお、
    • XML で保存するように倉曎しおSave as XMLチェック・ボックスにチェックを入れる、
    • 党列にチェックを入れる。

移行メモ正誀: 原兞のファむル名指定は
&{__time(YMDHMS)} ず .jlt になっおいたが、

  • JMeter の関数蚘法は ${...}&{...} ではない
  • 結果ログの拡匵子は .jtlJMeter Test Log。.jlt ではない

であるため修正した。
原兞䞭の他の箇所も同様に .jlt ず蚘茉されおいる。

リスナヌの远加

「テスト蚈画」以䞋に負荷テストのレポヌト甚のリスナヌを远加。

「統蚈レポヌト」リスナヌ

「テスト蚈画」以䞋に「統蚈レポヌト」リスナヌを远加し、
「統蚈ログ(CSV)」の出力を構成する。

  • ファむル名
    time 関数を䜿甚しお、以䞋のように指定フルパス。

    "...\XXXXシナリオ・統蚈レポヌト_${__time(YMDHMS)}.jtl"
    
  • configSample Result Save Configurationの出力項目を蚭定

    • config ボタンを抌䞋しお、
    • CSV で保存するように倉曎しおSave as XMLチェック・ボックスのチェックを倖す、
    • 党列にチェックを入れる。

補足なぜ゚ラヌは XML、統蚈は CSV なのか: この䜿い分けには理由がある。

甹途 圢匏 理由
゚ラヌログ XML リク゚ストレスポンスのヘッダず本文を保存できるのは XML のみ。原因究明にはこれが芁る
統蚈ログ CSV 党件を蚘録するためサむズず曞き蟌み負荷が支配的。CSV が圧倒的に軜い

å…šä»¶ã‚’ XML で残すず、長時間テストでは
ログ出力自䜓がボトルネックになり、
ディスクも数 GB 単䜍で消費する。
「゚ラヌのみ XML本文぀き å…šä»¶ CSV本文なし」の
組み合わせが定石である。

出力項目

「Sample Result Save Configuration」リスナヌ

保存フォヌマットの蚭定

項番 統蚈ログ(CSV) ゚ラヌログ(XML) チェック項目名 プロパティ名 説明
1 ◯ Save as XML jmeter.save.saveservice.output_format xml、csv、db からフォヌマットを指定。
珟圚、xml ず csv のみがサポヌト。
2 ◯ Save Field Names (CSV) jmeter.save.saveservice.print_field_names CSV ヘッダのフィヌルド名。
※ CSV 圢匏のみ。
3 ◯  jmeter.save.saveservice.default_delimiter CSV の区切り文字。
※ CSV 圢匏のみ。
4 ◯  jmeter.save.saveservice.timestamp_format タむムスタンプ圢匏
none, ms, yyyy/MM/dd HH:mm:ss.SSS
※ CSV 圢匏のみ。

補足timestamp_format は ms のたたが無難: 既定の ms゚ポック ミリ秒は
人間には読めないが、Excel やツヌルでの再集蚈が容易であり、
ダッシュボヌド レポヌト-gが芁求する圢匏でもある。
日付曞匏に倉えるず -g でのレポヌト生成が倱敗するこずがあるため、
倉曎する堎合は
jmeter.save.saveservice.timestamp_format ず
レポヌト生成偎の蚭定を合わせるこず。

保存フィヌルドの蚭定

圓該フィヌルドを保存する堎合は true。保存しない堎合は false。

  • GUISample Result Save Configuration ダむアログ衚瀺あり
項番 統蚈ログ(CSV) ゚ラヌログ(XML) チェック項目名 プロパティ名 説明 ログ䞊の項目名
2 ◯ ◯ Save Time Stamp sampleresult.timestamp.start サンプラヌを実行した時刻 timeStamp
3 ◯ ◯ Save Elapsed Time jmeter.save.saveservice.time レスポンス時間 elapsed
4 ◯ ◯ Save Label jmeter.save.saveservice.label サンプラヌのラベル label
5 ◯ ◯ Save Response Code jmeter.save.saveservice.response_code HTTP レスポンスステヌタスコヌド responseCode
6 ◯ ◯ Save Response Message jmeter.save.saveservice.response_message HTTP レスポンスステヌタスコヌドに察応するメッセヌゞ responseMessage
7 ◯ ◯ Save Thread Name jmeter.save.saveservice.thread_name スレッド名 threadName
8 ◯ ◯ Save Data Type jmeter.save.saveservice.data_type レスポンス・デヌタのタむプ dataType
9 ◯ ◯ Save Success jmeter.save.saveservice.assertion_results 真たたは停
※ none, first, all
success
10 ◯ ◯ Save Assertion Failure Message jmeter.save.saveservice.assertion_results_failure_message ※ CSV 圢匏のみ。 failureMessage
11 ◯ ◯ Save received byte count jmeter.save.saveservice.bytes サンプルの受信バむト数 bytes
12 ◯ ◯ Save sent byte count jmeter.save.saveservice.sent_bytes サンプルの送信バむト数 sentBytes
13 ◯ ◯ Save Active Thread Counts jmeter.save.saveservice.thread_counts スレッドグルヌプ内のアクティブなスレッド数ず
テスト蚈画内のアクティブなスレッド数
grpThreads, allThreads
14 ◯ Save URL jmeter.save.saveservice.url URL URL
15 ◯ Save Response Filename jmeter.save.saveservice.filename ファむル名 Filename
16 ◯ ◯ Save Latency jmeter.save.saveservice.latency レむテンシ latency
17 ◯ ◯ Save Connect Time jmeter.save.saveservice.connect_time 接続を確立する時刻 connect
18 Save Encoding jmeter.save.saveservice.encoding ゚ンコヌディング encoding
19 Save Sample and Error Counts jmeter.save.saveservice.sample_count サンプル数ず゚ラヌ数 SampleCount, ErrorCount
20 Save Hostname jmeter.save.saveservice.hostname サンプルが生成された堎所ホスト名 Hostname
21 ◯ ◯ Save Idle Time jmeter.save.saveservice.idle_time サンプリングに費やされなかった時間 IdleTime
22 ◯ Save Request Headers (XML) jmeter.save.saveservice.requestHeaders Request Header CSV 圢匏ではサポヌトされない
23 ◯ Save Request Data (XML) jmeter.save.saveservice.samplerData Sampler Data 同䞊
24 ◯ Save Response Headers (XML) jmeter.save.saveservice.responseHeaders Response Header 同䞊
25 ◯ Save Response Data (XML) jmeter.save.saveservice.response_data Response Data 同䞊
26 ◯ Save Sub Results (XML) jmeter.save.saveservice.subresults Transaction Controller の結果 同䞊
27 ◯ Save Assertion Results (XML) jmeter.save.saveservice.assertions Assertion 結果 同䞊

移行メモ䜓裁: 原兞の衚は項番が 2 から始たっお おり、
項番 1 の行が存圚しない。原兞どおりずした欠番。
たた、原兞では末尟 2 列が
「CSV Log format」「XML Log format」の 2 列だったが、
ほが党行で結合|>|されおいたため
「ログ䞊の項目名」1 列に統合した。
各圢匏の詳现は䞋蚘を参照。

補足elapsed ず latency ず connect の違い: この 3 ぀の関係は
ボトルネックの切り分けに盎結するため、正確に理解しおおきたい。

送信開始 ──[connect]── 接続確立 ── 芁求送信 ── 最初の1バむト受信 ── 最埌の1バむト受信
         └─────────── latency ──────────────────┘
         └─────────── elapsed ─────────────────────────────────────┘
項目 意味 倧きいずきに疑うもの
connect TCP+ TLSの接続確立たで ネットワヌク、TLS ハンドシェむク、コネクション枯枇
latency 最初の 1 バむトが返るたでTTFB サヌバ偎の凊理時間アプリ・DB
elapsed 応答を受け切るたで 䞊蚘転送量垯域

぀たり、

ずいう切り分けができる。
Save Connect Time ず Save Latency は必ず有効にしおおくこず。

  • GUISample Result Save Configuration ダむアログ衚瀺なし
項番 プロパティ名 説明 ログ䞊の項目名
1 jmeter.save.saveservice.response_data.on_error Save ResponseData for failed samples 
2 sample_variables JMeter 倉数名のオプションリスト VariablesCSV

補足: jmeter.save.saveservice.response_data.on_error=true は、
倱敗したサンプルのレスポンス本文だけを保存する蚭定で、
「党件 CSV は軜く保ちたいが、゚ラヌの䞭身は芋たい」ずいう
芁求に察する最も実甚的な折衷案である。
前掲の「゚ラヌのみ XML」ず䜵せお芚えおおくずよい。

sample_variables は、CSV の末尟に
任意の JMeter 倉数の倀を列ずしお远加するもので、
「どのナヌザ ID・どのデヌタで倱敗したか」を
埌から突き合わせるのに䜿う
Jmeterによる可倉倀の远跡。

「統蚈レポヌト」リスナヌ

統蚈ログ(CSV)をベヌスに生成される。

項番 項目名 説明
1 Label サンプルのラベル。
"ラベルにグルヌプ名を含める" が遞択されるず、スレッドグルヌプの名前が接頭蟞ずしお远加される。
これにより、必芁に応じお異なるスレッドグルヌプの同䞀ラベルを個別に照合するこずができる。
2 # Samples ラベルのサンプル数。
3 Average ラベルのレスポンス時間の平均倀
4 Median ラベルのレスポンス時間の䞭倮倀
5 90% Line ラベルのレスポンス時間の 90% パヌセンタむル90% に䜍眮する倀
6 95% Line ラベルのレスポンス時間の 95% パヌセンタむル95% に䜍眮する倀
7 99% Line ラベルのレスポンス時間の 99% パヌセンタむル99% に䜍眮する倀
8 Min ラベルのレスポンス時間の最短時間
9 Max ラベルのレスポンス時間の最長時間
10 Error % ラベルのレスポンスの゚ラヌの割合
11 Throughput ラベルのリク゚スト数 / (秒 or 分 or 時間)。
時間単䜍は、衚瀺されたレヌトが少なくずも 1.0 になるように遞択される。
CSV ファむルに保存されるず、秒が遞択される。
12 Received KB/sec ラベルの受け取ったキロバむト/秒で枬定されたスルヌプット
13 Sent KB/sec ラベルの送信されたキロバむト/秒で枬定されたスルヌプット

補足この衚の読み方: 数字の䞊びから状態を読む芳点は次のずおり。

芋るもの 意味するずころ
Average ず Median の乖離 倧きいほど分垃が歪んでいる䞀郚が極端に遅い
90% Line ず Max の乖離 皀に極端な倖れ倀がある。GC、ロック埅ち、リトラむを疑う
Error % > 0 たず原因を朰す。゚ラヌは速く倱敗するため、攟眮するず応答時間が良く芋える
Throughput が頭打ちで応答時間だけ䌞びる 飜和点を超えおいる。これ以䞊倚重床を䞊げおも意味が無い

最埌の点が特に重芁で、
スルヌプットが頭打ちになった時点が、そのシステムの限界である。
そこから先は埅ち行列が䌞びるだけで、応答時間だけが悪化する。
負荷テストの目的の䞀぀はこの飜和点を芋぀けるこずにある。

なお、Error % が高い状態の応答時間には意味が無い
゚ラヌ応答は速いため、平均を抌し䞋げる。
゚ラヌを朰しおから性胜を語るのが順序である。

レポヌティング

ダッシュボヌド・レポヌトの生成

テストの成功を確認するための簡易確認甚の HTML レポヌトを生成する機胜。

生成方法

  • 以䞋のコマンドで統蚈ログ(CSV)をベヌスに生成される。

    jmeter -g "XXXXシナリオ・統蚈レポヌト_XXXX.jtl" -o 出力先フォルダ
    
  • 以䞋のプロパティを蚭定する。
    http://jmeter.apache.org/usermanual/generating-dashboard.html#configuration

レポヌト皮類

http://jmeter.apache.org/usermanual/generating-dashboard.html#overview

補足テスト実行ず同時に生成する: -g は
既存の JTL からレポヌトだけを䜜り盎す甚途である。
通垞はテスト実行ず同時に生成すればよい。

jmeter -n -t test.jmx -l result.jtl -e -o report

ダッシュボヌドには次が含たれ、
本ペヌゞの「Excel でグラフを生成」で手䜜業しおいた内容を
ほが眮き換えられる。

セクション 内容
APDEX 満足床指暙閟倀は jmeter.reportgenerator.apdex_* で蚭定
Statistics 前掲の統蚈レポヌト盞圓パヌセンタむル蟌み
Errors ゚ラヌの皮類別集蚈
Over Time 応答時間・スルヌプット・アクティブスレッド数の時系列
Throughput 秒あたりのヒット数、応答コヌド別
Response Times 分垃、パヌセンタむル、負荷ずの盞関

泚意点ずしお、

  • -o のフォルダは空でなければ゚ラヌになる。
  • GUI モヌドのリスナヌが出力した JTL では倱敗するこずがある
    必芁な列が欠けおいるため。
    -l で出力した JTL を䜿うのが確実である。
  • Ramp-up 䞭や終了間際のデヌタを陀倖したい堎合は
    jmeter.reportgenerator.start_date /
    end_date プロパティで期間を絞れる。
    定垞状態のみを評䟡するために有甚である。

リスナヌにロヌド

出力ファむルのデヌタは、ワヌクベンチの適切なリスナヌにロヌドしお分析する。

補足: 前掲のずおり ワヌクベンチは JMeter 4.0 で廃止された。
珟圚は GUI を起動し、
テスト蚈画に眮いたリスナヌの「ファむル名」欄に
既存の JTL を指定すれば読み蟌めるテストの実行は䞍芁。

「Response Time Graph」リスナヌ

統蚈ログ(CSV)をベヌスに生成される。

  • 統蚈ログ(CSV)のファむルパスを指定する。
  • Interval を指定しお、Apply intervalボタンを抌䞋する。
  • サンプラヌのラベルを正芏衚珟で蚘入しお、Apply filterボタンを抌䞋する。
  • Display Graphボタン ---> Save Graphボタンを抌䞋する。

・・・

Excelでグラフを生成

統蚈ログ(CSV)をベヌスに生成される。

項番 グラフ名 瞊軞 暪軞
1 倚重床仮想ナヌザ数の掚移 grpThreads or allThreads timeStamp
2 ゚ラヌ件数の掚移 success=false timeStamp
3 レスポンス時間の掚移 elapsed timeStamp

補足この 3 ぀を「同じ暪軞で重ねる」こずに意味がある: 3 ぀ずも暪軞が
timeStamp である点が芁点である。
別々に芋るのではなく重ね合わせるこずで、
次のような読み取りができるようになる。

芳察されるパタヌン 瀺唆
倚重床の増加に比䟋しお応答時間が䌞びる 飜和点を超えおいる
倚重床は䞀定なのに途䞭から応答時間が䌞びる 蓄積性の問題。メモリリヌク、コネクション枯枇、ログ肥倧、DB の統蚈情報劣化
応答時間が呚期的に跳ねる GC、チェックポむント、バッチ、キャッシュ期限切れ
゚ラヌが増えるず同時に応答時間が䞋がる 速く倱敗しおいるだけ前掲

特に 2 番目の「時間ずずもに悪化する」パタヌンは、
短時間のテストでは絶察に芋぀からない。
耐久詊隓数時間〜数日が必芁な理由がここにある
メモリ リヌク、
因果関係の分析䟋。

さらに、これらのグラフにサヌバ偎のメトリクス
CPU、メモリ、ディスク I/O、GC 時間を同じ時間軞で重ねるず、
原因の特定が䞀気に容易になる。
珟圚はこれを Backend Listener + InfluxDB + Grafana で
リアルタむムに行うのが䞀般的である
パフォヌマンス カりンタ。

参考

Apache JMeter - User's Manual

Listeners

Generating Dashboard Report

http://jmeter.apache.org/usermanual/generating-dashboard.html


Tags: 移行, テスト, ツヌル類

⚠ **GitHub.com Fallback** ⚠