「移動平均」機能が見つからなかったので、回避策があるかどうか疑問に思っています。
私はinfluxdbをバックエンドとして使用しています。
Grafana自体は計算を行わず、バックエンドにクエリを実行して、Niceチャートを描画します。したがって、アグリゲーション機能はバックエンドにのみ依存します。 Graphiteは移動平均などのウィンドウ関数をサポートしていますが、InfluxDBは現在それをサポートしていません。
Web上のinfluxdbの移動平均に対する要求は非常にたくさんあります。 「+1」を残して、このチケットで進捗状況を追跡できます https://github.com/influxdb/influxdb/issues/77
(それほど簡単ではありませんが)可能な回避策は、MAを事前に計算して別のinfluxdbシリーズに保存するカスタムスクリプト(cron、デーモンなど)を作成することです。
GrafanaはmovingAverage()
の追加をサポートしています。私もドキュメントでそれを見つけるのに苦労しましたが、 feature intro page でその使用法を(多少陽気に)確認できます。
通常どおり、グラフのタイトルをクリックして編集し、指標 movingAverage() を追加します graphite documentation の説明に従って:
movingAverage(seriesList, windowSize)
一定数の過去のポイントまたは時間間隔での1つまたは複数のメトリックの移動平均をグラフ化します。
1つのメトリックまたはワイルドカードseriesListの後に、N個のデータポイント、または「1時間」や「5分」などの時間の長さの引用符付き文字列を指定します(時間形式の例については、render_api_のfrom/untilを参照してください)。グラフ上の各ポイントについて、先行するデータポイントの平均をグラフ化します。以前のすべてのデータポイントは、グラフの最初で[なし]に設定されています。
例:
&target=movingAverage(Server.instance01.threads.busy,10)
&target=movingAverage(Server.instance*.threads.idle,'5min')
ここでは、PostgreSQLデータベースを使用してGrafanaで移動平均を実行しようとしているので、SQLクエリを実行する方法を追加します。
SELECT
date as time,
AVG(daily_average_column)
OVER(ORDER BY date ROWS BETWEEN 4 PRECEDING AND CURRENT ROW)
AS value,
'5 Day Moving Average' as metric
FROM daily_average_table
ORDER BY time ASC;
これは、「ウィンドウ」関数を使用して、最後の4行(および現在の行)の平均をとります。
MySQLでもこれを行う方法があると確信しています。
このための方法と機能は、データソースによって異なります。
InfluxDBを指定したので、クエリは、「集計関数」[mean($ field)など]をmoving_average($ aggregation_function、$ num_of_points)「変換関数」内にラップする必要があります。
「メトリクス」タブのメニューの「選択」部分には、両方の「変換」機能があります。
最初に「集約関数」(平均、最小、最大など)を使用してクエリを作成します。これにより、データが期待どおりに見えることを確認できます。
この後、「集計関数」の横にある「+」ボタンをクリックし、「変換」メニューの下で「moving_average」を選択します。
括弧内の数値は、平均を引き継ぐポイントの数になります。
スクリーンショット:
別のオプションは、カウントではなく「タイミング」メトリックとしてデータをレポートすることです。これは、特にスタック内のStatsdで簡単に実行できます。レポートされたデータポイントの平均としてタイミングデータ(statsdから取得)をプロットすることはすでに組み込まれています。