📊
CloudWatchLogs Insigthsのstats by bin(1d)で嵌ったこと
ログを日次で集計する時、UTCで集計される ので、日本時間で調査するときに嵌った。
ローカルタイムゾーンにしてクエリ実行すれば勝手に集計基準も判定してくれると期待していたがだめだった。
ローカルタイムゾーン 2021/03/18 00:00:00 ~ 2021/03/18 23:59:59
に対して、statsのbin(1d)を使用して集計すると、
クエリ
fields @timestamp, @message
| stats count(*) by bin(1d)
結果
date, count
2021/03/17 09:00:00, 50
2021/03/18 09:00:00, 100
のようにUTCでカウントされた結果が返ってくる。
自分が出力したいデータはローカルタイムゾーンに合わせた結果なので、日本時間に変換して出力している。
クエリ
fields @timestamp, toMillis(@timestamp)+32400000 as millis, datefloor(millis,1d) as jst_date, @message
| stats count(*) by jst_date
結果
date, count
2021/03/18 09:00:00, 150
- 32400000: 9時間(=9h * 60m * 60s * 1000ms), JST = UTC + 9h
- toMillis: 指定されたフィールドで見つかったタイムスタンプを、Unix エポックからのミリ秒を表す数値に変換
-
datefloor(toMillis(@timestamp)+32400000)
と直接書くとエラーになったので一度millis
と定義したものをdatefloor
で指定している
スッキリしていないので、他にいい方法あったら教えてください…
Discussion