Excelだと簡単にできるけど、Splunkでやるにはちょっと頑張らなきゃいけなかった。
chart
を使えば簡単にできました。(半年後の感想)
#データの準備
SPL
| gentimes start=05/01/2019 end=07/01/2019
| rename starttime as _time
| eval count=(random() % 1000 ) +1
| eval date_month=strftime(_time, "%m")
| eval date_mday=strftime(_time, "%d")
| fields _time,count,date_month,date_mday
gentimes
でずらっと日付を二ヶ月分作成して、適当なデータをrandom()
で作成
strftime
で月と日にちを作成。これはあとで集計する際の指標とする。
fields
で必要なデータのフィールドのみとする。
#集計と表示向け加工
SPL
| chart sum(count) as count by date_mday date_month
| rename date_mday as _date_mday
| foreach *
[ eval time="<<MATCHSTR>>"."-"._date_mday]
| eval _time=strptime(time,"%m-%d")
| fields - time
| table _time *
chart@splunk>docsの記述をみると
chart [<chart-options>] [agg=<stats-agg-term>]
( <stats-agg-term> | <sparkline-agg-term> | "("<eval-expression>")" )...
[ BY <row-split> <column-split> ] | [ OVER <row-split> ] [BY <column-split>] ]
[<dedup_splitvals>]
BYのところに注目
<row-split> <column-split>
なので、最初が行を分割、次が列を分割
今回は_date_mday(日付)_で行を分割、_date_month(月)_で列を分割した。
_date_mday_は文字列(String)なので、月を付けてあげてstrptime
で時間にもどしてあげる。
ここはいつ作ってもいいように自動判定にしている。
月の表示はforeach
での判定もあり_%m(2桁数字)_にしたけど、最終的にrename
を使用して日本語に変えてもらえばいいと思う。
#結果
ここは修正していないけど、概ねこんな感じで出ます。
職場のグラフ直さないといけない・・・・