Tutorial: tatLogDiver-Usage

tatLogDiver-Usage

Insert title here

Ver. b19.06.30, Last update: 2019/06/30, (c)2017-2019 hirosejn

Index

Environment 動作環境

Items 画面の構成要素

Graph グラフの操作方法

Menu メニューの操作方法

  1. > File
  2. > Filter
  3. > Simulator
  4. > View
  5. > Download
  6. > Bottom detail graph
  7. > Help

Simulator シミュレーションシナリオの仕様

  1. Simulator-01 サンプル01(1 hour with table block.)の仕様
  2. Simulator-99 サンプル99(for test)の仕様

Environment

動作環境 

  • Chrome:Ver74以降にて動作検証(推奨)

  • Edge:基本動作検証済

  • ie8 :基本動作検証済、注:Chroneに比べ5倍程度遅い。


Items

画面の構成要素 

  • 右メニュー
    :機能をアコーディオンメニュー形式で表示
  • 右上メッセージエリア
    :ファイル読込処理結果等のメッセージを表示(ダイアログの操作で移動/リサイズ可)
  • 上段全体グラフ
    :指定ファイルを、フィルター条件でフィルターしたデータを表示
  • 下段詳細グラフ
    :上段表示データのうち「下段詳細グラフ表示条件」による指定期間のデータを表示
  • 下段データ表示エリア
    :下段詳細グラフで、マウスオーバにより選択されたプロットに該当する、ファイルのレコードを表示。(ダイアログの操作で移動/リサイズ可)
  • ダイアログ
    【閉じる】:ダイアログ右上のバツボタン。
    【移動】:上部にマウスオーバすると表示されるグレーのバーをドラッグする。
    【リサイズ】:四隅四辺にマウスオーバし、マウスがリサイズアイコンになった状態からドラッグする。

Graph

グラフの操作方法 

  • マウスオーバー :X軸の最も近い時刻のプロットが選択され強調表示される。

     下段グラフの場合は、選択プロットの時刻に同時処理(CONC)している処理の開始時刻―終了時刻を結ぶ線が表示される(同時処理が視認し易く表示されるので、容易に排他解放待ちの有無を特定できる)。下部データ表示エリアに、選択プロットの元ファイルのレコードが表示される(排他処理を容易に特定できる)。

  • マウスクリック/タッチ :選択されたプロットを基準に、下段詳細グラフが更新され、「下段詳細グラフ表示条件」アイコンが追加される。

  • マウスドラッグ(横/縦) :指定範囲を横幅/縦幅としてグラフを拡大表示する。

  • マウスダブルクリック :マウスドラッグによるグラフの拡大表示をリセットする。(左上の「reset zoom」ボタンも同一機能)


メニューの操作方法 

  • メッセージ表示エリア :処理結果メッセージを表示する。マウスによる移動(エリア上部選択)/リサイズに対応。
  • Place on/side ボタン:メニューをグラフに「重ねる/重ねない」を切り替える。
  • reset zoom ボタン:グラフの描画サイズを初期化する。(Androidでグラフのダブルクリックができないため設置)
  • バツ/ハンバーガー ボタン:メニューの「表示/非表示」を切り替える

メニュー/Fileの操作方法 

ボタン

  • Open csv data file ボタン:CSVファイルを選択。ファイルを選択するとグラフを表示する。

指定項目

  • Open file as :データ読込モード指定

    ◎newly :新規に読み込む(既存データを破棄) ○append :既存データに指定ファイルの内容を追加する

----- File format definition --------

  • [Line feed code] :CSVファイルの改行コードを指定

    ○固定長 "80"byte◎Windows:CR(13)+CF(10)○UNIX/Linux:LF(10)○zOS:NEL(15)○Max:CR(13)○other charcode (" ") 文字コード番地を10進で指定

  • [Charset] :CSVファイルの文字コードを指定(レコードデータ表示時に指定文字コードからUnicodeに変換して表示)

    ○Shift-JIS○EUC-JP◎UTF-8○Unicode

  • [CSV delimiter] :CSVファイルのデリミタを指定

    ○comma :カンマ区切り/ ◎tab :タブ区切り/ ○other "," 区切り文字を指定する

----- Data format definition --------

  •  CSVのカラムが保有するデータ構成を指定

    ○TAT & START time◎TAT & END time○START & END time

  • [Timestamp field] :終了時刻のフィールドの位置とフォーマットを指定

    "1"th column of CSV:CSVのカラム位置を指定(デフォルト1カラム目、固定長レコードの場合1を指定)

    Position(byte): from "1" length " " :レコード内の固定バイト位置指定 レコードのfromバイト目から、length指定バイト長

    Format :時刻のフォーマット

    ◎text "YYYY/MM/DD hh.mm.ss.000" :指定カラムのYYYY MM DD hh mm ss 000の位置から値を取得(エクセルの表示フォーマット: YYYY/MM/DD hh:mm:ss.000 に相当)

     / ◎(num)text○long :text:ユリウス日0:00との時差数値 テキスト数値/long(4バイト)数値(別途エンディアン指定)

    Units of numbers: ○msec◎sec :(num)textもしくはlong選択時に、数値の単位をmsec/secから選択

  • [TAT or START/END judgment field] :処理時間(TAT)フィールド もしくは、開始/終了レコード判定フィールド の位置とフォーマットを指定

    "2"th column of CSV:CSVのカラム位置を指定(デフォルト2カラム目、固定長レコードの場合1を指定)

    Position(byte): from "1" length " ":固定バイト位置指定 指定カラムのfromバイト目から、length指定バイト長

    for TAT(turnaround time) condition :処理時間(TAT)フィールド の条件

    Units of numbers: ○msec◎sec :処理時間の単位 msec/secから選択

    Format:◎(num)text○long :処理時間のフォーマット テキスト数値/long(4バイト)数値

    for long Endian: ◎little○big :long指定時のエンディアンを選択 リトルエンディアン/ビッグエンディアン

    for START/END judgment condition :開始/終了レコード判定フィールド の条件

    START record: Matches:/"START"/:指定正規表現(デフォルト/START/)に合致するレコードを開始レコードとする

    END record: Matches:/"END"/:指定正規表現(デフォルト/END/)に合致するレコードを終了レコードとする

  • [START-END pairing KEY field] :開始/終了レコードなど同一取引と判定するキーフィールドを指定

    "3"th column of CSV :CSVのカラム位置を指定(デフォルト2カラム目、固定長レコードの場合1を指定)

    Position(byte): from "1" length " " :固定バイト位置指定 指定カラムのfromバイト目から、length指定バイト長

    &Position(Matches reg. exp.): :かつ、以下の正規表現に合致する文字列に間(空欄のときは先頭~末尾)、

    between /" "/ and /" "/

    &Adopt as KEY: Matches /"[0-9A-Z]+"/ :かつ、指定の正規表現に合致する文字列

ボタン

  • save format (.json) ボタン :メニュー指定項目を、JSON形式のファイルでダウンロードする

  • load format (.json) ボタン : JSON形式のファイルから、メニュー指定項目を読み込む

メニュー/Filterの操作方法 

  • Sync ○Upper ○Detail ◎Async 指定:表示しているグラフの条件をフィルター条件に取り込む

     Upperを選択したタイミングで上段グラフを取り込む/Detailを選択したタイミングで下段グラフ/Asyncを選択した際には何も変更しない

  • [Date filter] 指定機能

    Include if end time is between "YYYY/MM/DD hh.mm.ss.000" and "YYYY/MM/DD hh.mm.ss.000"

     指定期間のデータのみを上段グラフの表示対象とする。時刻を手入力する作業は時間がかかるので Sync Upper/Detail で現在描画している情報を取り込んでから修正する操作を想定

  • [Turnaround time(TAT) filter] 指定機能:

    Include if TAT is between "0①" and "数値②"

     処理時間(TAT)が①~②のデータのみを上段グラフの表示対象とする

  • [Text filter] 指定機能:

    ◎Don't use. ○Include ○Exclude

    if "数値①" bytes from the "1②"th byte from head of the "3③"th column of CSV match the regular expression "④"

     テキストフィルターを使わない/正規表現に合致するデータを処理対象とする/正規表現に合致しないデータを処理対象とする

     CSVレコードの、③番目のカラムの、先頭②バイト目から、①バイトの文字列を、正規表現④に照らして評価

メニュー/Simulatorの操作方法 

TAT log diver を起動すると、サンプルシミュレーションシナリオ1を初期表示する。

  • Simulate ボタン:指定したシミュレーションシナリオを実行しグラフを表示する。
  • JSON Editor(Open/Close) ボタン:シミュレーションシナリオ編集画面を開く/編集画面が開いている場合は閉じる。
  • サンプルシナリオ選択機能 :サンプルシナリオを選択します。異なるシナリオを選択したタイミングでシミュレーション実行しグラフを再描画する。

メニュー/Viewの操作方法 

上4つのチェックボックス(一部機能)で、上段全体グラフ上の表示有無を指定

下7つのチェックボックス(全機能)で、下段詳細グラフ上の表示有無を指定

  • 多重度(詳細) :青 左Y軸 上段なし/下段☒

    同時処理数(多重度)をヒストグラム形式で表示

  • 多重度(区間最大)/sec :水色 左Y軸 上段☒/下段☒

    1秒間の区間の多重度の最大値

    上段グラフ:透過プロットで表示。同一多重度が連続するとプロットが重なり濃く見える

    下段グラフ:ヒストグラム形式で表示。多重度(詳細)と重ねて表示すると秒間最大値との関係を把握できる

  • average tps / min (end) [line] :緑 左Y軸 上段☒/下段☒

    1分間の平均tps。コンピュータの処理数は1分毎にとられることが多いため、突合しやすいように表示

  • response by start time [Y2軸:plot] :黄 右Y軸 上段なし/下段☒

    X軸:処理開始時刻、Y軸(点の高さ)は処理時間

  • response by end time [Y2軸:plot] :茶 右Y軸 上段なし/下段☒

    X軸:処理終了時刻、Y軸(点の高さ)は処理時間

  • max response / min (end) [Y2軸:line] :赤 右Y軸 上段☒/下段☒

    1分間の最大レスポンス(処理終了時刻ベース)、ヒストグラム風折れ線で表示

  • average response / min (end) [Y2軸:line] :ピンク 右Y軸 上段☒/下段☐

    1分間の平均レスポンス(処理終了時刻ベース)、ヒストグラム風折れ線で表示。コンピュータの処理数は1分毎にとられることが多いため、突合しやすいように表示機能を設けているがデフォルト非表示

メニュー/Downloadの操作方法 

  • Upper graph image(.png) ボタン:上段グラフの図をpng形式で、初期ファイル名 graph.png でダウンロード。
  • Upper graph data(.csv) ボタン:上段グラフに表示しているデータを、CSV形式で(改行コード、デリミタはFileメニューの指定値を適用)初期ファイル名 graph.csv でダウンロード。
  • Upper graph log records(.csv) ボタン:上段グラフに表示しているデータの元データを、処理終了時刻順に、入力ファイルのレコードフォーマット(改行コード、デリミタ等も元ファイルのまま加工せずに適用)で、初期ファイル名 tatlog.csv でダウンロード。
  • Detail graph image(.png) ボタン:下段グラフに対して上段と同じ処理。
  • Detail graph data(.csv) ボタン:下段グラフに対して上段と同じ処理。
  • Detail graph log records(.csv) ボタン:下段グラフに対して上段と同じ処理。
  • Detail conc log records(.csv) ボタン:下段グラフに表示用に選択したCONC(同時処理数)時に処理しているデータを、処理終了時刻順に、入力ファイルのレコードフォーマットで、初期ファイル名 conclog.csv でダウンロード。(CONC指定時以外の場合はCONC最大値を基準)。

メニュー/Bottom detail graphの操作方法 

下段詳細グラフの表示条件を指定する

  • Range: - "1①" + "2②" "10sec③" 指定機能:下段グラフの期間を指定する

    「下段詳細グラフ表示条件」の基準時刻を③単位で切り捨てた時刻を基準に、-①数値×③単位 ~ +②数値×③単位 を下段グラフの表示データ抽出期間とする。③単位はsec/10sec/min/hour/6hour/day/year から選択

    指定値を変更する都度、指定値を「下段詳細グラフ表示条件」に反映し下段グラフを再描画する。なお、グラフ上の範囲指定による表示期間変更は描画のみで「下段詳細グラフ表示条件」には反映されない。

  • 「下段詳細グラフ表示条件」 アイコン :下段グラフに表示する条件を選択する機能(初期表示:同時処理数が最大となるタイミングを1つ)

    上段/下段グラフの任意の点をクリックすると、「下段詳細グラフ表示条件」アイコン が追加される。アイコンは基準時刻順に縦に並ぶ。

    下段グラフに表示している「下段詳細グラフ表示条件」アイコンは背景グレー。他のアイコンは背景白

    アイコンにマウスをのせると、アイコンの左側にマイナス「-」アイコンが表示され、「-」をクリックすると該当「下段詳細グラフ表示条件」アイコンが削除される。

メニュー/Helpの操作方法 

  • Usage of TAT log diver ボタン:"TAT log diver"の使用方法をサブウィンドウで表示
  • about TAT log diver ボタン:"TAT log diver"のコピーライト、関連URLをダイアログで表示

Simulator

シミュレーションシナリオの仕様 

Simulator-01

サンプル01(1 hour with table block.)の仕様 

  • 概要

数秒のバッチが、通常0.5秒以下の更新系オンのレスポンス遅延を起こす。更新系集中時に滞留増により遅延長時間化

online[100-500ms 2-5tps]:レスポンス100~500ミリ秒のオンライン取引を2~5tpsで発行。16:30~16:36に更新系オン2割増

batch[2-5sec evry3min]:処理時間2~5秒のオン中バッチ取引(DB更新あり)を3分毎に起動

  • 詳細

{ "log" : 1,

エラーログのみ出力

 log(任意、デフォルト3):詳細ログ出力指定(0:なし, 1:エラー時のみ, 2:+ETAT, 3:+push/pop, 4:+HOLD/FREE)

"start" : "2017/01/02 00:00:00.000", "end" : "17.0*h",

2017/01/02 00:00:00.000 を基準、最大17時間後までシミュレーション実行

シミュレーション開始時刻/終了時刻",

"resources" : [

システム構成定義: "type:リソース名、thread:最大同時hold数、timeout:holdタイムアウト時間"、q:最大hold待ち数、qWait:最大hold待ち時間"

{"type" :"WEB", "thread":1024,"timeout":"300*sec", "q":1280, "qWait":0},

WEBサーバ:1024スレッド、タイムアウトエラー:300秒、スレッド溢れ時:即時エラー

{"type" :"AP", "thread":20, "timeout":"300*sec", "q":1280, "qWait":0},

APサーバ:20スレッド、タイムアウトエラー:300秒、スレッド溢れ時:即時エラー

{"type" :"DB", "thread":10, "timeout": "10sec", "q":10, "qWait":"10sec"}

DBサーバ:10スレッド、SQL処理タイムアウトエラー:10秒、コネクションプール:10個、コネクション取得待ち:10秒でエラー

],

"models" : [

"models:clientsで指定するモデル名(model)の定義、以下modelsで指定できる項目",

"baseModel:複数リソースのsequenceをまとめて宣言できる、sequenceに展開した後処理される、任意指定",

"sequence:指定された順にリソースを取得する、配列内に複数指定可、sequenceも複数指定可",

"hold:リソース名、holds(baseModelのみ指定可):リソース一覧、各々にtat/tatMinが適用される",

"tat/tatMin:リソースの取得に要する平均/最小時間、tatMinのデフォルトはtat",

"      ★注:tatはリソースの使用時間ではない、リソース使用時間を指定す場合はfreeで指定",

"数値はミリ秒単位、ms,sec,min,h,*day 指定可",

"times:繰返し回数",

"thinkTime/thinkTimeMin:繰返し時の間隔の平均/最小時間、thinkTimeMinのデフォルトはthinkTime",

"free:[リソース名の配列]、指定リソースを開放する、free指定の無いリソースはシーケンスの最後にfreeされる",

{ "ON-1" : { "times": 60, "thinkTimeMin":"3sec", "thinkTime": "10sec", "baseModel": {"holds": ["WEB","AP","DB"], "tatMin": "2ms", "tat":"5ms"}, "sequence": [ {"tatMin":30, "tat":50, "note":"select A"}, {"tatMin":50, "tat":50, "note":"updateB", "hold":"TBL_B"}, {"tatMin":80, "tat":100,"note":"updateC", "hold":"TBL_C"} ]}},

オンライン取引1(ON-1):1ユーザあたり3~10秒の取引を60回発行、Web-AP-DBの3層AP、各レイヤ呼出し時に2~5msの通信遅延あり、  処理内容 30~50ms 参照排他なしSQL > 50ms TBL_B排他SQL > 80~100ms TBL_C排他SQL(更新処理を想定)

{ "ON-2" : { "times": 60, "thinkTimeMin":"500ms", "thinkTime": "1sec", "baseModel": {"holds": ["WEB","AP","DB"], "tatMin": "2ms", "tat":"5ms"}, "sequence": [ {"tatMin":"100ms", "tat":"500ms", "hold":""} ]}},

オンライン取引2(ON-2):1ユーザあたり500ミリ秒~1秒の取引を60回発行、Web-AP-DBの3層AP、各レイヤ呼出し時に2~5msの通信遅延あり、  処理内容 100~500ms 排他なし(一覧参照処理を想定)

{ "BATCH-1" : { "baseModel": {"holds": ["DB"], "tatMin": "2ms", "tat":"5ms"}, "sequence": [ {"tatMin":"2sec","tat":"5sec","note":"updateB","hold":"TBL_B"} ]}}

バッチ取引2(BATCH-1):1ユーザあたり1ジョブ実行、DB更新のみ、各レイヤ呼出し時に2~5msの通信遅延あり、 処理内容 2~5秒 TBL_Bを排他(長時間トランザクションのオン中バッチを想定)

],

"clients" : [

"clients:仮想アプリケーションの起動クライアントの定義", "num:作成クライアント数、start~endの間で、ランダム(指数分布)に指定回数起動する", "start/end:仮想クライアント作成/終了時刻、先頭で宣言したstartからの相対時刻", "model:modelsで宣言したモデル名", "user:user+通番 のユーザ名で仮想クライアントが作成される",

{"num":100,"start":"16.0h", "end":"17.0h", "model":"ON-1", "user" :"userU", "message":"select A update B,C"},

16:00~17:00の 1時間に、userU00~userU99の100ユーザが、各々ON-1(更新系)を100回発行

{"num": 20,"start":"16.5h", "end":"16.6h", "model":"ON-1", "user" :"userT", "message":"select A update B,C 【増】"},

16:30~16:36 の6分間に、userT00~userT19の20ユーザが、各々ON-1(更新系)を20回発行(一時的に更新オン取引200%増)

{"num":100,"start":"16.0h", "end":"17.0h", "model":"ON-2", "user" :"userS", "message":"排他なし(WEBのみ)"},

16:00~17:00 の1時間に、userS00~userS99の100ユーザが、各々ON-2(参照系)を100回発行

{"num": 20,"start":"16.0h", "end":"17.0h", "model":"BATCH-1","user":"userB", "message":"バッチ処理 update B*****"}

16:00~17:00 に、userBが、BATCH-1(更新系)を20回発行

] }

Simulator-99

サンプル99(for test)の仕様 

  • 概要

デッドロックが発生し、タイムアウトで解消

デグレードテスト用シナリオを兼ねる(描画バリエーションの網羅率の高い短いシナリオ)

  • 詳細

{ "log" : 1, "start" : "1970/01/02 00:00:00.000", "end" : "30.0*sec",

2017/01/02 00:00:00.000 を基準、最大30秒後までシミュレーション実行、エラーログのみ出力

"resources" : [ {"type" :"DB", "thread":2, "timeout": "5sec", "q":1, "qWait":"2sec"} ],

DBサーバ:2スレッド、DBトランザクションタイムアウトエラー:5秒、コネクションプール:1個、コネクション取得待ち:2秒でエラー

"models" : [ { "TEST-AB" : { "baseModel": {"holds": ["DB"], "tatMin": "2ms", "tat":"2ms"}, "sequence": [{"hold":"TBL_A", "tatMin":"1sec", "tat":"1sec"}], "sequence": [{"hold":"TBL_B", "tatMin":"3sec", "tat":"3sec"}], "times": 2, "thinkTimeMin":"1sec", "thinkTime": "1sec"}},

バッチ取引AB(TEST-AB):1ユーザあたり1秒毎に2回迄ジョブ起動、DB更新のみ、

処理内容 3.007秒処理(開始 > 1+2ms>DB排他>TBL_A排他 > 1+2ms+3秒>TBL_B排他 > 1ms>排他解放 > 1ms終了)+1秒+3.008秒処理

{ "TEST-BA" : { "baseModel": {"holds": ["DB"], "tatMin": "2ms", "tat":"2ms"}, "sequence": [{"hold":"TBL_B", "tatMin":"1sec", "tat":"1sec"}], "sequence": [{"hold":"TBL_A", "tatMin":"3sec", "tat":"3sec"}], "times": 2, "thinkTimeMin":"1sec", "thinkTime": "1sec"}} ],

バッチ取引BA(TEST-BA):1ユーザあたり1秒毎に2回迄ジョブ起動、DB更新のみ、

処理内容 3.007秒処理(開始 > 1+2ms>DB排他>TBL_B排他 > 1+2ms+3秒>TBL_A排他 > 1ms>排他解放 > 1ms終了)+1秒+3.008秒処理

"clients" : [

{"num": 1,"start":"0sec", "end":"0sec", "model":"TEST-AB","user" :"testAB1"},

1回目:0.001秒に、ユーザtestAB10が、TEST-AB起動(排他待ちなし、3.007秒で正常終了:N_000)

2回目:4.007秒に、ユーザtestAB10が、TEST-AB起動(DBコネクションキューオーバフロー、0.001秒で終了:E_QoF)

{"num": 1,"start":"1sec", "end":"1sec", "model":"TEST-AB","user" :"testAB2"},

1回目:1.000秒に、ユーザtestAB20が、TEST-AB起動(デッドロック DBトランザクションタイムアウト5.000秒でエラー終了:E_HTO)

2回目:7.000秒に、ユーザtestAB20が、TEST-AB起動(3.007秒で正常終了:N_000)

{"num": 1,"start":"3sec", "end":"3sec", "model":"TEST-BA","user" :"testBA3"},

1回目:3.000秒に、ユーザtestBA30が、TEST-BA起動(testAB10のDB解放待ち0.007秒を加えた、3.014秒で正常終了:N_000)

2回目:7.014秒に、ユーザtestBA30が、TEST-BA起動(5.005秒で正常終了:N_000)

{"num": 1,"start":"4sec", "end":"4sec", "model":"TEST-BA","user" :"testBA4"}

1回目:4.001秒に、ユーザtestBA40が、TEST-BA起動(5.014秒で正常終了:N_000)

2回目:3.000秒に、ユーザtestBA40が、TEST-BA起動(デッドロック DBトランザクションタイムアウト5.000秒でエラー終了:E_HTO)

] }

 go to top ↑

'; */