Gatlingのログについて確認する


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
```

https://github.com/gatling/gatling/blob/c8be073a31a36d6f5df6847c5db1d0371bf54f68/gatling-core/src/main/scala/io/gatling/core/stats/writer/LogFileDataWriter.scala#L37-L37

## レコードの種類

１列目にレコードの種類がはいってます。

* RUN - Gatlingが開始した時の情報
* REQUEST - Gatlingがリクエストした時の情報
* USER - Gatling内でリクエストを行うユーザが増えた時の情報
* GROUP - グループに関する情報
* ERROR - 調べてない
* ASSERTION - Assertionをつかったときにでるのではないかと思う(調べてない)

https://github.com/gatling/gatling/blob/c8be073a31a36d6f5df6847c5db1d0371bf54f68/gatling-core/src/main/scala/io/gatling/core/stats/writer/RawRecords.scala#L19-L24

## RUN

6列のデータがある。

* 1列目 RUNがはいる
* 2列目 クラス名がはいる 例だと SampleSimulation
* 3列目 ユーザ定義シミュレーション名が入る 例だとなにもはいってない
* 4列目 シミュレーションID 例だと samplesimulation
* 5列目 開始時間 ミリ秒で入ってる 例だと 1481907959927
* 6列目 version 例だと 2.0

参考

* https://github.com/eiel/gatling/blob/c8be073a31a36d6f5df6847c5db1d0371bf54f68/gatling-core/src/main/scala/io/gatling/core/stats/writer/DataWriterMessage.scala#L26-L36

# 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のとき入ってる模様

参考

* https://github.com/gatling/gatling/blob/c8be073a31a36d6f5df6847c5db1d0371bf54f68/gatling-core/src/main/scala/io/gatling/core/stats/writer/RawRecords.scala#L31


### GROUP

しらべてない

### ERROR

しらべてない
 
* ASSERTION

しらべてない