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 天重复重启外的正常运行时间较长的设备相比,它被认为是健康的。此外,与在过去 xx 天内每 24 小时左右不断重启的设备相比,已启动 30 天并刚刚重启的设备不应被视为“苦恼”。

我尝试了多种计算运行状况的方法,使用了多种指标:1.平均重启次数 2.最大(正常运行时间)3.平均(正常运行时间)4.过去 24 小时内的重启次数 5.重启次数过去 3 天 6. 过去 7 天的重启次数 7. 过去 30 天的重启次数

每个单独的指标仅考虑设备运行状况的一个方面,但不考虑与其他设备或其当前运行状况相比的整体运行状况。

任何想法将不胜感激。

4

5 回答 5

6

你可以做一些类似于 Windows 7 可靠性指标的事情——从完全健康开始(比如 10)。每小时/每天/签到周期,将健康增加(10 - currenthealth)*incrementfactor). 每次服务器宕机,减去一定的百分比。

因此,给定 20%/crash 的 crashfactor 和 10%/day 的 incrementfactor:

  • 如果设备过去多次重启但在过去 20 天内未重启,则其运行状况为 8.6

  • 正常运行时间长,除了最近 2 天反复重启 5 次外,运行状况为 4.1

  • 已启动 30 天且刚刚重新启动的设备的运行状况为 8

  • 在过去 10 天内每 24 小时左右不断重启的设备的运行状况为 3.9

运行一个例子:

从 10 点开始
第 1 天:没有崩溃,new health = CurrentHealth + (10 - CurrentHealth)*.1 = 10
第 2 天:一次崩溃,new health = currenthealth - currentHealth*.2 = 8 但仍然每天增加,所以new health = 8 + (10 - 8)*.1 = 8.2
第 3 天:没有崩溃,新健康 = 8.4
第 4 天:两次崩溃,新健康 = 5.8

于 2010-02-01T22:10:04.127 回答
0

您可能会获取特定机器的重启次数/t,并将其与整个人口的标准偏差进行比较。那些下降的人说,与平均值的三个标准偏差,它重新启动的频率更高,可能会被标记。

于 2010-02-01T22:10:16.967 回答
0

您可以使用加权平均正常运行时间,并且仅当它会使平均值更高时才包含当前正常运行时间。

权重将是正常运行时间的最近时间,因此最近的正常运行时间具有最大的权重。

于 2010-02-01T22:17:47.510 回答
0

它是否总是在重新启动时报告它的运行时间为 0?或者接近于零的东西(反正比以前少)?

你可以计算这两种方式。1、数字越小,麻烦越少。2.数字越大,得分最多的时期。

我想你需要考虑一下,健康状况可能会有所不同。所以它会随着时间的推移而恶化。因此,最新值应该比旧值具有更高的权重。这可能表明呈指数增长。

上一阶段重启的次数越多,系统可能就越崩溃。但还要考虑更短的重新启动间隔。假设每天重启 5 次,而两周内重启 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 的权重。因为较低的 daysPast == 较低的 x == 较高的重量。

使用值 += 此公式计算重启次数,并使用 100/x 部分赋予重启权重,其中权重是时间。

在返回时,阈值除以值。这是因为,重新启动的分数越高,结果必须越低。

您可以使用绘图程序或计算器,查看绘图的弯曲,这也是 daysPast 重量的弯曲。

于 2010-02-01T22:27:38.553 回答
0

你能把设备分成几组类似的设备吗?然后,您可以将单个设备与其对等设备进行比较。

另一个建议是研究各种移动平均算法。这些应该可以平滑时间序列数据并突出趋势。

于 2010-02-01T22:38:58.960 回答