根据正常运行时间/重新启动计算设备“运行状况”的公式

时间:2010-02-01 22:04:28

标签: algorithm statistics formula

我有几百个网络设备每隔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天内的重启次数

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

任何想法都会非常感激。

5 个答案:

答案 0 :(得分:6)

您可以执行类似Windows的7可靠性指标 - 从完全健康状态开始(比如说10)。每小时/每天/签入周期,将健康状况增加(10 - currenthealth)*incrementfactor)。每次服务器关闭时,减去一定的百分比。

因此,假设崩溃因子为20%/崩溃且增量因子为10%/天:

  • 如果设备过去重启了很多但过去20天没有重新启动,则健康状况为8.6

  • 除了重复重启5次的最后2天以外的正常运行时间,健康状况为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

答案 1 :(得分:0)

您可以获取特定计算机的重启次数/ t,并将其与整个总体的标准偏差进行比较。那些下跌的人表示可能会标记与平均值的三个标准偏差,即更频繁地重新启动。

答案 2 :(得分:0)

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

重量将是最近的正常运行时间,以便最近的正常运行时间具有最大的重量。

答案 3 :(得分:0)

重启时是否总是将运行时报告为0?或接近于零的东西(不管以前的时间少)?

你可以用这两种方式来计算。 数字越低,遇到的麻烦越少。 数字越高,得分越大。

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

它在上一个时期的重启次数越多,系统就越破碎。但也考虑重新启动的较短间隔。比方说,每天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重量的弯曲。

答案 4 :(得分:0)

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

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