Gatling の simulation.log を jq でパースする

1 min読了の目安(約1100字TECH技術記事

この記事の目的

Gatling では、負荷試験結果の統計情報は、結果ディレクトリ内の js/stats.jsonjs/global_stats.json から取得できますが、生ログデータを解析したい場合 simulation.log という TSV ファイルを見る必要があります。

ただ、この simulation.log が曲者で、ヘッダーがなかったり、行によってカラム数が異なったりと解析しづらいので、この記事では jq コマンドでパースして JSON として扱えるようにする方法を紹介します。

解決策

cat simulation.log |
jq -scR '
    split("\n")[:-1]
    |map(split("\t"))
    |map(
        if .[0] == "REQUEST" then
            {
                "record_header": .[0],
                "path": .[2],
                "start_at_msec": .[3],
                "end_at_msec": .[4],
                "status": .[5],
                "message": (if .[6] != " " then .[6] else "" end)
            }
        elif .[0] == "RUN" then
            {
                "record_header": .[0],
                "simulation_class": .[1],
                "simulation_id": .[2],
                "start_at_msec": .[3],
                "gatling_version": .[5]
            }
        elif .[0] == "USER" then
            {
                "record_header": .[0],
                "scenario": .[1],
                "event": .[2],
                "occured_at_msec": .[3]
            }
        else
            empty
        end)
    |.[]
'