【问题标题】:Creating a formula for calculating device "health" based on uptime/reboots根据正常运行时间/重新启动创建计算设备“运行状况”的公式
【发布时间】:2010-02-01 22:04:28
【问题描述】:

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

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

任何想法都将不胜感激。

【问题讨论】:

    标签: algorithm statistics formula


    【解决方案1】:

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

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

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

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

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

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

    运行一个例子:

    从 10 点开始
    第一天:没有崩溃,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

    【讨论】:

    • 这是一个我没有想到的有趣的角度。我忘记了 Win7 有一个可靠性指标。但是,您的示例函数将如何超过零?从 10 点开始,第二次签入将是 (10 - 10(当前健康状况)* incrementfactor(可以是任何值)。这仍然让我为零。我错过了什么吗?
    • 好的,我喜欢你的编辑。有什么办法可以把它变成公式吗?崩溃因素是如何确定的,或者是一个任意创建的常数?这对您的原始公式有何影响?
    • 这意味着如果它的健康是10,它不会变得更大。健康状况越低,您的正常运行时间就越多
    • 我认为对常数值进行一些细微的修改,这将完美地发挥作用。非常感谢!!
    • 你可以想出一个公式,(查看复利的例子),但只迭代过去 xx 天会更容易。崩溃因子和增量因子以及您的最大健康值将是任意选择的值,您可以对其进行调整以获得所需的输出。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

          它是否总是在重新启动时报告它的运行时间为 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 部分,它赋予重启权重,其中权重是时间。

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

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

          【讨论】:

          • 重启的密度如果能够根据时间段进行加权会很有用。
          • 这个公式有什么限制吗?例如,将其限制在 MIN 和 MAX 值之间。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-12-25
          • 1970-01-01
          相关资源
          最近更新 更多