Algorithm 创建用于计算设备的公式“;"健康";基于正常运行时间/重新启动

Algorithm 创建用于计算设备的公式“;"健康";基于正常运行时间/重新启动,algorithm,statistics,formula,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 我想确定的是设备“健

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

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


如果您有任何想法,我们将不胜感激。

您可以做一些类似于Windows 7可靠性指标的事情——从完全健康状态开始(比如10)。每小时/天/签入周期,将运行状况增加
(10-currenthealth)*增量因子)
。每次服务器停机时,减去一定的百分比

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

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

  • 大的正常运行时间(过去2天内重复重启5次除外)的运行状况为4.1

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

  • 在过去10天内,每24小时左右连续重新启动一次的设备的运行状况为3.9

要运行示例,请执行以下操作:

从10点开始
第1天:无崩溃,
新运行状况=CurrentHealth+(10-CurrentHealth)*.1=10

第2天:一次崩溃,
newhealth=currenthealth-currenthealth*.2=8
但是仍然每天都在增加,所以新的健康指数=8+(10-8)*.1=8.2 第3天:无碰撞,新健康=8.4

第4天:两次崩溃,新运行状况=5.8

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

您可以使用加权平均正常运行时间,并且仅当当前正常运行时间会使平均值更高时才将其包括在内


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

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

你可以用两种方法来计算。 1.人数越少,麻烦就越少。 2.这个数字越高,得分就越高

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

上一阶段重启次数越多,系统可能就越坏。但也考虑了较短的重新启动间隔。比如说,每天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和使用阈值之类的东西来改进此函数

此公式基于以下绘图:。如您所见,在低数值(低x值)上,该值高于大x值。这就是这个公式如何计算daysPast的权重。因为较低的daysPast==较低的x==较高的重量

值+=此公式计算重新启动次数,100/x部分表示重新启动的权重,其中权重为时间

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


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

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


另一个建议是研究各种移动平均算法。这些都是为了平滑时间序列数据,同时突出趋势。

这是一个我没有想到的有趣角度。我忘了Win7有一个可靠性指标。但是,您的示例函数将如何超过零?从10开始,第二次签入将是(10-10(当前健康状况)*递增因子(可以是任何值).这仍然让我处于零。我遗漏了什么吗?好吧,我喜欢你的编辑。有没有办法将其纳入公式中?崩溃因子是如何确定的,还是一个任意创建的常数?该因子如何纳入原始公式中?这意味着如果它的健康度为10,它不会变得更大。健康度越低,你得到的值就越多明白了