リアルタイム監視のための正しい移動平均

システムの正確なリアルタイム監視、問題は一見すると思えるほど単純ではありません。



最も一般的な例は、リクエストに対するサーバーの応答時間を測定することです。 すべてが揃っているとしましょう:

-各リクエストのサーバーは実行時間を計算し、カウンターに追加します

-サーバーは、外部要求によってカウンターの値を提供できます

-ポーリング間隔ごとに値を収集し、グラフを保存、集計、描画する監視サーバーがあります



額の決定-カウンターの瞬間値を測定する-はあまり意味がありません。1または5分のポーリング間隔では、最後の要求で測定されたシステムパフォーマンスの瞬間値を取得します。 この5分前にすべてリクエストが2秒以上実行され、最後のリクエストが20ミリ秒で簡単だった場合、20ミリ秒しか表示されません。 またはその逆。



標準ソリューションは、最後のN個のクエリの移動平均です。 N個の要求がより短いポーリング間隔で実行される限り、ソリューションは非常に機能します。 負荷が低下すると、次のようになります。







午前0時から午前4時まで、リクエストがまったくなかったか、N未満でした。移動平均の値は変わらず、サーバーがすべてのリクエストを6ミリ秒で処理したという誤解を招く印象を与えます。



以下、同じカウンター、移動平均が変更された別のサーバーからのみ。







写真はずっと良く見えます。 要求がある場所とない場所を確認できます。



変更は非常に簡単です。 パラメータNに加えて、移動平均のウィンドウサイズ。 別のパラメーターが導入されました-T、忘却の時間(有効期限)、Tを超えるウィンドウ内のすべての値は平均の計算時に考慮されません。



所定のポーリング間隔(ms)に対してT(ms)を選択することも、もう1つの興味深い問題です。

T <<ポーリング間隔の場合、(はるかに少ない)値が失われます

T >>ポーリング間隔の場合、(さらに)グラフ#1になります

最初の近似では、T = 2 *ポーリング間隔を取ることができます



All Articles