6

10分ごとにサーバーにチェックインする数百のネットワークデバイスがあります。各デバイスには時計が組み込まれており、サーバーにチェックインするたびに秒数をカウントし、経過秒数を報告します。したがって、サンプルデータセットは次のようになります。

CheckinTime               Runtime
2010-01-01 02:15:00.000   101500
2010-01-01 02:25:00.000   102100
2010-01-01 02:35:00.000   102700

デバイスが再起動した場合、サーバーにチェックインすると、ランタイムは0と報告されます。

私が判断しようとしているのは、デバイスの「ヘルス」に関するある種の定量化可能なメトリックです。

デバイスが過去に何度も再起動したが、過去xx日間に再起動しなかった場合、再起動を繰り返した過去xx日間を除いて稼働時間が長いデバイスと比較して、正常であると見なされます。また、30日間稼働していて再起動したばかりのデバイスは、過去xx日間、24時間ごとに継続的に再起動したデバイスと比較して、「不良」と見なすべきではありません。

さまざまな指標を使用して、ヘルスを計算する複数の方法を試しました。1.平均再起動回数2. max(uptime)3. avg(uptime)4.過去24時間の再起動回数5.での再起動回数過去3日間6.過去7日間の再起動回数7.過去30日間の再起動回数

個々のメトリックは、デバイスの状態の1つの側面のみを考慮しますが、他のデバイスまたは現在の状態と比較した全体的な状態は考慮しません。

どんなアイデアでも大歓迎です。

4

5 に答える 5

6

Windows 7 の信頼性メトリックのようなものを実行できます。完全な状態 (たとえば 10) から開始します。時間/日/チェックイン サイクルごとに、ヘルスを ずつ増やします(10 - currenthealth)*incrementfactor)。サーバーがダウンするたびに、一定の割合を引きます。

したがって、crashfactor が 20%/crash で、incrementfactor が 10%/day の場合:

  • デバイスが過去に何度も再起動したが、過去 20 日間再起動していない場合、正常性は 8.6 になります。

  • 5 回再起動を繰り返した最後の 2 日間を除いて、大きなアップタイムは 4.1 のヘルスを持ちます。

  • 30 日間稼働し、再起動したばかりのデバイスのヘルスは 8 になります。

  • 過去 10 日間、24 時間ごとに再起動し続けたデバイスのヘルスは 3.9 になります。

例を実行するには:

10 から開始
1 日目: クラッシュなし、new health = CurrentHealth + (10 - CurrentHealth)*.1 = 10
2 日目: 1 回のクラッシュ、new health = currenthealth - currentHealth*.2 = 8 それでも毎日増加するため、new health = 8 + (10 - 8)*.1 = 8.2
3 日目: クラッシュなし、新しいヘルス = 8.4
4 日目: クラッシュ 2 回、新しいヘルス = 5.8

于 2010-02-01T22:10:04.127 に答える
0

デバイスを同様のデバイスのグループに分割できますか?次に、個々のデバイスをそのピアと比較できます。

もう1つの提案は、さまざまな移動平均アルゴリズムを調べることです。これらは、時系列データを平滑化し、傾向を強調することになっています。

于 2010-02-01T22:38:58.960 に答える
0

加重平均アップタイムを使用して、平均が高くなる場合にのみ現在のアップタイムを含めることができます。

重みはアップタ​​イムがどれくらい新しいかということになり、最新のアップタイムが最大の重みを持つようになります。

于 2010-02-01T22:17:47.510 に答える
0

特定のマシンの再起動回数 / t を取得し、母集団全体の標準偏差と比較することができます。落ちた人は、再起動の頻度が高い平均値から 3 標準偏差があれば、フラグが立てられる可能性があると言っています。

于 2010-02-01T22:10:16.967 に答える
0

再起動時に常に 0 のランタイムを報告しますか? それともゼロに近いものですか(とにかく前の時間よりも少ない)?

この 2 つの方法で計算できます。1.数値が低いほどトラブルが少ない。2. 数字が大きいほど、最大の期間を記録します。

健康状態はさまざまであることを考慮する必要があると思います。そのため、時間の経過とともに悪化する可能性があります。したがって、最新の値は、古い値よりも高い重みを持つ必要があります。これは、指数関数的な成長を示している可能性があります。

最後の期間に再起動が多ければ多いほど、システムが壊れる可能性があります。しかし、再起動の間隔を短くすることも検討しています。たとえば、1 日に 5 回の再起動と、2 週間で 10 回の再起動であるとします。それはかなり違うことを意味します。したがって、この式では、再起動の回数だけでなく、時間も指標にする必要があると思います。

最後の期間の再起動回数の密度を計算する必要があると思います。

単純に割ることで、密度の重みを使用できます。割る数がどれだけ大きいか、結果がどれだけ低くなるか、したがって、数の重みがどれだけ低くなるかです。

擬似コード:

function calcHealth(machine)
float value = 0;
float threshold = 800;

for each (reboot in machine.reboots) {
    reboot.daysPast = time() - reboot.time;

    // the more days past, the lower the value, so the lower the weight
    value += (100 / reboot.daysPast);
}

return (value == 0) ? 0 : (threshold / value);
}

たとえば、maxDaysPast をフィルタリングし、しきい値などをいじることで、この関数を進めることができます。

この式は、次のプロットに基づいています: f(x) = 100/x . ご覧のとおり、数値が小さい (x 値が小さい) と値が高くなり、x 値が大きいと値が高くなります。これが、この数式が daysPast の重みを計算する方法です。低い日過去 == 低い x == 体重が重いからです。

値 += を使用すると、この式は再起動をカウントし、100/x の部分を使用すると、再起動に重みが付けられます。重みは時間です。

戻り値で、しきい値が値で除算されます。これは、再起動のスコアが高いほど、結果が低くなる必要があるためです。

プロット プログラムまたは電卓を使用して、プロットの曲がりを確認できます。これは、daysPast の重みの曲がりでもあります。

于 2010-02-01T22:27:38.553 に答える