Apache JMeter実行時ログの日時表記を人が見てわかる形式(yyyy/mm/dd形式)にする


2012年 04月 14日

みなさん、負荷テストはどうやっているでしょうか。
私は無償で且つ機能のそれなりということで、Apache JMeterをよく利用します。

さて、JMeterを利用し負荷をかける際に当然ログをとります。後で解析する必要があるからです。
その際、画面上時間表記になっている個所でもなにもせずログ出力を行うとJavaの実装通り1970年1月1日0時0分0秒UTCからのミリsecの値で出力されます。
たとえば、「2012年4月5日11:09:37(ミリ秒は省略)」であれば「1333591776885」のようになります。

これを人間が見てわかる形、たとえば上記の「2012年4月5日11:09:37」のような「yyyy/mm/dd hh:mm:ss」フォーマットにする場合どうすればよいでしょうか。

方法は二つあります。
一つ目は、ログ出力時の日付フォーマットをyyyy/mm/dd形式とする方法、もう一つが出力されたシリアル値をExcelを使って変換する方法です。

一つ目の前者の場合行うことは
jmeter.save.saveservice.timestamp_format
プロパティを設定します。
プロパティの内容はjava.text.SimpleDateFormatで指定するフォーマットと同一です。たとえば、「2012/04/01 12:10:10」のような出力フォーマットにしたい場合は、
yyyy/MM/dd hh:mm:ss
となります。
実際のプロパティの設定は通常のJavaプログラム起動でのプロパティ指定と同様で、上記の例であれば
-Djmeter.save.saveservice.timestamp_format=”yyyy/MM/dd hh:mm:ss”
とつけてJMeterを起動させます。
このオプションはJMeterを起動するシェルスクリプト/バッチ内で付けてよいですし、Windowsであればバッチのショートカットに付けても大丈夫です。
自分は試していませんが、$JMETER_HOME/bin/ 配下のプロパティファイルに追記してもいけそうな気がします。

なおこの方法の難点は、設定せずに実行してしまった場合はどうしようもないということです。設定せずに実行してしまった、でももう一度実行するのは環境を占有する関係上できない、そういう場合は次に方法がよいでしょう。

ということで二つ目の方法ですが、そのままExcelで変換する方法です。
一つ目の方法でフォーマット指定しない場合はシリアル値が出力されると書きました。Javaのシリアル値は1970年1月1日 UTCを基準にミリ秒(ms)で表現されます。一方Excelの場合は1900年1月1日UTC基準となります。この差を埋めた上で日付表記に変換をかける必要があるわけです。

じゃあどうすればよいかというと、このあたりを参考にするといいでしょう。
上記サイトだと若干おかしな部分があるので修正し、シリアル値の変換式を
=( A1/86400000)+25569+0.375
とします。元の「86400」の部分を「86400000」としました。これは元サイトだとmsではなくsecで扱っているため時間のずれが生じるためです。

こうすることですでに実行済みのJMeterログを解析する際、時刻を人が見てわかりやすい形式にすることができます。