グラファイトを使用して、ディスク使用率の履歴を経時的に追跡します。アラートシステムは、グラファイトのデータを調べて、空き容量が特定のブロック数を下回ったときにアラートを出します。
よりスマートなアラートを取得したいのですが本当に気にしていることは、「空き領域について何かする必要があるまでにどれくらいの時間が必要か」ということです。 7日でディスク容量が足りなくなる傾向がある場合は警告が発生し、2日未満の場合はエラーが発生します。
グラファイトの標準ダッシュボードインターフェースは、デリバティブとHolt Winters Confidenceバンドでかなりスマートにできますが、これまでのところ、これを実用的なメトリックに変換する方法を見つけていません。また、他の方法で数値を計算することもできます(グラファイトから生の数値を抽出し、それを実行するスクリプトを実行するだけです)。
複雑な点の1つは、グラフが滑らかではないことです。ファイルは追加および削除されますが、時間の経過に伴う一般的な傾向として、ディスク領域の使用量が増加するため、おそらくローカルミニマム(「ディスク空き」メトリックを参照する場合)を調べる必要があります。 )と谷の間のトレンドを描きます。
誰かこれをやったことがありますか?
正直なところ、「満杯になるまでの日数」はとにかく実際にはひどい指標です。ファイルシステムは、100%の使用率に近づくと、本当に愚かになります。
従来の85%、90%、95%のしきい値を使用することをお勧めします(それぞれ警告、アラーム、および重大な修正が必要です)-これにより、多くのことが得られます。最近のディスクの警告時間(1 TBドライブとしましょう:テラバイトの85%にはまだ多くのスペースが残っていますが、潜在的な問題を認識しています。90%までに、ディスク拡張またはその他の緩和策を計画する必要があります。テラバイトの95%は残り50GBであり、修正が行われているはずです)。
これにより、ファイルシステムが多かれ少なかれ最適に機能することも保証されます。大きなファイルの作成/変更/移動を処理するための十分な空き領域があります。
最新のディスクでない場合(または、使用パターンに大量のデータがディスクに投入される場合)、しきい値を簡単に調整できます。
それでも「完全な日数」メトリックを使用するように設定されている場合は、グラファイトからデータを抽出し、それにいくつかの計算を行うことができます。 IBMの監視ツールは、完全なメトリックになるまで数日を実装します これは、実装方法のアイデアを提供しますが、基本的に、履歴の2つのポイント間の変化率をとっています。
あなたの正気のために、グラファイトからの派生物を使用することができます(これにより、時間の経過に伴う変化率が得られます)が、実際に「よりスマートな」アラートが必要な場合は、毎日および毎週の変化率を使用することをお勧めします日/週のピーク使用量に基づく)。
使用する特定の予測(最小の変化率、最大の変化率、平均の変化率、加重平均など)は、環境によって異なります。 IBMのツールは、1つのサイズですべてに対応するパターンを特定することが非常に難しいため、非常に多くの異なるビューを提供します。
結局のところ、希望する種類の計算を行うのに優れたアルゴリズムはありません。ディスクの使用率はユーザーによって決定され、ユーザーはRational Actorモデルの正反対です。すべての予測は、1人のクレイジーな人がウィンドウから出て、今日が完全なシステムメモリダンプを実行する日であると決定できます。ホームディレクトリ。ただ。
最近、線形回帰を使用してこのためのカスタムソリューションを公開しました。
私たちのシステムでは、ディスクの枯渇の主な原因は、ローテーションされていない漂遊ログファイルです。
これらは非常に予測可能に大きくなるため、ディスク使用率に対して線形回帰(たとえば、z = numpy.polyfit(times, utilization, 1)
)を実行し、線形モデル(たとえば、(100 - z[1]) / z[0]
)
デプロイされた実装は this のように見えますRubyとGSLを使用していますが、numpyも非常にうまく機能します。
これに1週間分の平均使用率データを90分間隔(112ポイント)で供給することで、これまであまりノイズを発生させることなく、ディスク枯渇の可能性の高い候補を見つけることができました。
Gistのクラスは、スカウトからデータをプルし、スラックを警告し、ランタイムテレメトリをstatsdに送信するクラスにラップされています。それは私たちのインフラストラクチャに固有のものなので、ここでは省略します。