Skip to content

MS_JMeterReporting

nishi_74322014 edited this page Aug 21, 2026 · 1 revision

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_formatms のままが無難): 既定の 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 列に統合した。
各形式の詳細は下記を参照。

補足(elapsedlatencyconnect の違い): この 3 つの関係は
ボトルネックの切り分けに直結するため、正確に理解しておきたい。

送信開始 ──[connect]── 接続確立 ── 要求送信 ── 最初の1バイト受信 ── 最後の1バイト受信
         └─────────── latency ──────────────────┘
         └─────────── elapsed ─────────────────────────────────────┘
項目 意味 大きいときに疑うもの
connect TCP(+ TLS)の接続確立まで ネットワーク、TLS ハンドシェイク、コネクション枯渇
latency 最初の 1 バイトが返るまで(TTFB) サーバ側の処理時間(アプリ・DB)
elapsed 応答を受け切るまで 上記+転送量/帯域

つまり、

という切り分けができる。
Save Connect TimeSave 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 レポートを生成する機能。

生成方法

レポート種類

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: 移行, テスト, ツール類

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally