Gatlingを実行すると simulation.log が生成されます。
このファイルの中身について調査します。
このログさえあればレポートを生成できるので、中身がわかればいろいろ使いみちがありそう。
確認したバージョンは 2.2.0
調べる理由
Gatlingのレポートに不満があるわけではないですが、他のメトリクスと同じ時系列のグラフに出せると捗る気がします。
graphite経由でリアルタイム可視化することもできますが、ネットワークに不可がかかるため、simulation.logに保存して、あとでかき集めて、好きなDBに取り込みたいという感じです。
gatling-coreのパーサーを使う手もありますが、ログ自体はシンプルなので、整理してみています。
調査結果
ファイル形式はTSVです。
$ head simulation.log                                                                                                        00:31:37
RUN	SampleSimulation		samplesimulation	1481907959927	 	2.0
USER	Simple Test	1	START	1481907961664	1481907961664
USER	Simple Test	2	START	1481907961770	1481907961770
USER	Simple Test	3	START	1481907961771	1481907961771
USER	Simple Test	4	START	1481907961781	1481907961781
USER	Simple Test	5	START	1481907961782	1481907961782
REQUEST	Simple Test	623		root request	1481908081520	1481908081658	OK	 
REQUEST	Simple Test	1508		root request	1481908071123	1481908071123	KO	j.n.ConnectException: connection timed out: /10.146.0.4:80
REQUEST	Simple Test	426		root request	1481908081520	1481908081658	OK	 
$ od -c simulation.log  | head                                                                                               00:31:51
0000000    R   U   N  \t   S   a   m   p   l   e   S   i   m   u   l   a
0000020    t   i   o   n  \t  \t   s   a   m   p   l   e   s   i   m   u
0000040    l   a   t   i   o   n  \t   1   4   8   1   9   0   7   9   5
0000060    9   9   2   7  \t      \t   2   .   0  \n   U   S   E   R  \t
0000100    S   i   m   p   l   e       T   e   s   t  \t   1  \t   S   T
0000120    A   R   T  \t   1   4   8   1   9   0   7   9   6   1   6   6
0000140    4  \t   1   4   8   1   9   0   7   9   6   1   6   6   4  \n
0000160    U   S   E   R  \t   S   i   m   p   l   e       T   e   s   t
0000200   \t   2  \t   S   T   A   R   T  \t   1   4   8   1   9   0   7
0000220    9   6   1   7   7   0  \t   1   4   8   1   9   0   7   9   6
レコードの種類
1列目にレコードの種類がはいってます。
- RUN - Gatlingが開始した時の情報
 - REQUEST - Gatlingがリクエストした時の情報
 - USER - Gatling内でリクエストを行うユーザが増えた時の情報
 - GROUP - グループに関する情報
 - ERROR - 調べてない
 - ASSERTION - Assertionをつかったときにでるのではないかと思う(調べてない)
 
RUN
6列のデータがある。
- 1列目 RUNがはいる
 - 2列目 クラス名がはいる 例だと SampleSimulation
 - 3列目 ユーザ定義シミュレーション名が入る 例だとなにもはいってない
 - 4列目 シミュレーションID 例だと samplesimulation
 - 5列目 開始時間 ミリ秒で入ってる 例だと 1481907959927
 - 6列目 version 例だと 2.0
 
参考
USER
5列ある
- 1列目 USERがはいる
 - 2列目 シナリオ名がはいる
 - 3列目 イベント名が入る STARTかENDかどちらか
 - 4列目 イベント開始時間
 - 5列目 イベント終了時間
 
参考
- https://github.com/eiel/gatling/blob/13c1deb54e0a624694f10ad4db7168f5b668fb80/gatling-charts/src/main/scala/io/gatling/charts/stats/Records.scala#L28-L37
 - https://github.com/eiel/gatling/blob/c8be073a31a36d6f5df6847c5db1d0371bf54f68/gatling-core/src/main/scala/io/gatling/core/stats/message/MessageEvent.scala#L27-L28
 
REQUEST
- 1列目 REQUESTがはいる
 - 2列目 シナリオ名がはいるけどレポートにはつかわれてなさそう。例だと Simple Test
 - 3列目 グループ名が入るらしい。例だと数字がはいってる。
 - 4列目 リクエスト名がはいる。例だと root request
 - 5列目 開始時刻 ミリ秒
 - 6列目 終了時刻 ミリ秒 開始時刻と差をとればレスポンスタイムに。
 - 7列目 ステータスが入る OK か KO か
 - 8列目 エラーメッセージが入る ステータスがKOのとき入ってる模様
 
参考
GROUP
しらべてない
ERROR
しらべてない
- ASSERTION
 
しらべてない