移動平均線をグラフにマップしたい
- streamstatsについては、前回eventstatsとの比較を元に紹介しました。
- 今回は、tutorialdataのWebアクセスログを対象にしてStatusCodeの件数集計とWebアクセス全体件数の移動平均線(trednline)を描画したいと思います
- あわせてstreamstatsと似ていることができるtrendlineコマンドについても触れます
streamstatsを使って7時間毎の移動平均線を描画
- 使用するSPL
- timechart
- addtotals (←ポイント)
- streamstats
- fields
index="tutorial" sourcetype=access_combined_wcookie
|timechart span=1h count by status
|addtotals fieldname=sum
|streamstats window=7 avg(sum) as Trend
|fields - sum
-
ポイント
- timechartを使って1時間間隔でstatusコードを集計
- addtotalsを使ってsumフィールドを作成し、時間毎のstatus合計値を算出
- streamstatsを使って、過去7イベント分のsum値を対象に移動平均を計算しTrendフィールドを作成
- グラフ化に不要なフィールド(sum)を除外
trendlineを使って7時間毎の移動平均線を描画
- 使用するSPL
- timechart
- addtotals
-
trendline
streamstats(←ポイント) - fields
index="tutorial" sourcetype=access_combined_wcookie
|timechart span=1h count by status
|addtotals fieldname=sum
|trendline sma7(sum) as Trend
|fields - sum
-
ポイント
- timechartを使って1時間間隔でstatusコードを集計
- addtotalsを使ってsumフィールドを作成し、時間毎のstatus合計値を算出
- trendlineを使って、過去7イベント分のsum値を対象に移動平均を計算しTrendフィールドを作成
- グラフ化に不要なフィールド(sum)を除外
それぞれの違いを確認
- streamstatsとtrendlineどちらでも移動平均線は導き出せる
- 違いは?
- 下記スクリーンショット2つを見比べてみます。上がstreamstats、下がtrendlineの結果
- streamstatsは7件分のデータがなくても、過去2件、過去3件・・と存在するデータ分を元に移動平均を自動的に計算して値を生成していることがわかります。 - trendlineはデータ対象が7件揃っている場合にのみ、移動平均を計算しています - もしかすると、それぞれのSPLのオプションでいろいろとチューニングができるかもしれませんが、シンプルに使うとこのような差がでます。
実はtrendlineコマンドには、複数のtrendlineを一度に計算し描画する事ができる
index="tutorial" sourcetype=access_combined_wcookie
|timechart span=1h count as sum
|trendline sma7(sum) as 7h_Trend sma24(sum) as 24h_Trend sma72(sum) as 3d_Trend
|trendline sma7(sum) as 7h_Trend sma24(sum) as 24h_Trend sma72(sum) as 3d_Trend
まとめ
- シンプルに過去7時間の移動平均を求めるならstreamstatsコマンド
- 複数の移動平均を描画したいならtrendlineコマンド (FX、株トレーダー向け?)