1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Splunk: timechartコマンドの間隔を日曜始まりまたは月曜始まりの1週間にする最も簡単な方法

Posted at

しばしば必要となるのでメモ。

実施環境: Splunk Free 8.2.2
やりたいこと

timechart コマンドは、 span で集計間隔を様々に指定でき、1週間毎のデータを集計したい場合は span=1w を指定します。

Splunk
| makeresults count=10
| streamstats count AS CNT
| eval _time = _time - CNT * 60 * 60 * 24

スクリーンショット 2021-11-21 20.54.38.png

Splunk
| makeresults count=10
| streamstats count AS CNT
| eval _time = _time - CNT * 60 * 60 * 24
| timechart span=1w count

スクリーンショット 2021-11-21 20.55.01.png

ただ、ここで困ったことが1つ。
上記の例を見るとわかりますが、 span=1w で指定した場合の1週間の起点は、検索対象の中で最も古い日付、上記の例であれば2021/11/11(木)となります。
データを分析するには、これでは少々使いにくいです。
できれば、日曜始まりや月曜始まりで固定したいところですが、どのようにすればよいでしょうか。

検索すると方法は出てくるが

「splunk timechart Sunday」等で検索すると、真っ先に出てくるのは eval コマンドの strftime 関数を使用する方法です。
strftime 関数で時刻の形式に「%w」を指定すると、日曜日なら0、土曜日なら1、...月曜日なら6という数値が取得できます。

Splunk
| makeresults count=10
| streamstats count AS CNT
| eval _time = _time - CNT * 60 * 60 * 24
| eval WEEK_CNT = tonumber(strftime(_time, "%w"))

スクリーンショット 2021-11-21 20.56.09.png

この数値を relative_time 関数を使用して元の日付から引くことで、日付を日曜始まりに揃えることができます。

Splunk
| makeresults count=10
| streamstats count AS CNT
| eval _time = _time - CNT * 60 * 60 * 24
| eval WEEK_CNT = tonumber(strftime(_time, "%w"))
| eval _time = relative_time(_time, "-" + tostring(WEEK_CNT) + "d")

スクリーンショット 2021-11-21 20.57.23.png

Splunk
| makeresults count=10
| streamstats count AS CNT
| eval _time = _time - CNT * 60 * 60 * 24
| eval WEEK_CNT = tonumber(strftime(_time, "%w"))
| eval _time = relative_time(_time, "-" + tostring(WEEK_CNT) + "d")
| timechart span=1w count

スクリーンショット 2021-11-21 20.58.05.png

月曜始まりにするには、 strftime で取得した数値に6を足して7で割った余りを取得すればよいです。

Splunk
| makeresults count=10
| streamstats count AS CNT
| eval _time = _time - CNT * 60 * 60 * 24
| eval WEEK_CNT = (tonumber(strftime(_time, "%w")) + 6) % 7

スクリーンショット 2021-11-21 21.01.11.png

Splunk
| makeresults count=10
| streamstats count AS CNT
| eval _time = _time - CNT * 60 * 60 * 24
| eval WEEK_CNT = (tonumber(strftime(_time, "%w")) + 6) % 7
| eval _time = relative_time(_time, "-" + tostring(WEEK_CNT) + "d")

スクリーンショット 2021-11-21 21.01.25.png

Splunk
| makeresults count=10
| streamstats count AS CNT
| eval _time = _time - CNT * 60 * 60 * 24
| eval WEEK_CNT = (tonumber(strftime(_time, "%w")) + 6) % 7
| eval _time = relative_time(_time, "-" + tostring(WEEK_CNT) + "d")
| timechart span=1w count

スクリーンショット 2021-11-21 21.01.35.png

もう少し調べてみる

上記の方法で日曜始まりと月曜始まりは実現できましたが、やはり少々煩雑です。
もっと単純にできないのでしょうか。
もう少し調査してみると、以下のように「@w」という指定をすれば strftime 関数は不要となることがわかります。

Splunk
| makeresults count=10
| streamstats count AS CNT
| eval _time = _time - CNT * 60 * 60 * 24
| eval _time = relative_time(_time, "@w")

スクリーンショット 2021-11-21 21.02.44.png

Splunk
| makeresults count=10
| streamstats count AS CNT
| eval _time = _time - CNT * 60 * 60 * 24
| eval _time = relative_time(_time, "@w")
| timechart span=1w count

スクリーンショット 2021-11-21 21.02.58.png

月曜始まりにする場合は、「@w」の後ろに「1」を付けます。

Splunk
| makeresults count=10
| streamstats count AS CNT
| eval _time = _time - CNT * 60 * 60 * 24
| eval _time = relative_time(_time, "@w1")

スクリーンショット 2021-11-21 21.02.31.png

Splunk
| makeresults count=10
| streamstats count AS CNT
| eval _time = _time - CNT * 60 * 60 * 24
| eval _time = relative_time(_time, "@w1")
| timechart span=1w count

スクリーンショット 2021-11-21 21.03.15.png

非常にすっきりしましたが、実はもっとシンプルに記述できます。

最も簡単な方法

上記で使用している「@w」という記載方法は、 timechart コマンドの span オプションでも使用できます。
結局、他にコマンドを使用せずとも、 timechart コマンドの範囲内で日曜始まり、月曜始まりは実現できるのです。

Splunk
| makeresults count=10
| streamstats count AS CNT
| eval _time = _time - CNT * 60 * 60 * 24
| timechart span=1w@w count

スクリーンショット 2021-11-21 21.03.57.png

Splunk
| makeresults count=10
| streamstats count AS CNT
| eval _time = _time - CNT * 60 * 60 * 24
| timechart span=1w@w1 count

スクリーンショット 2021-11-21 21.04.08.png

これが一番簡単だと思います。

ちなみに

上記の「@w」は、 relative_time 関数や timechart コマンドだけでなく、その他の場面でも使用できます。
例えば、以下では検索時のタイムピッカーで使用しています。

スクリーンショット 2021-11-21 21.05.36.png

意外と使う機会があるので、覚えておくと便利です。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?