0

我正在写一份报告,显示我们网站的总停机时间。当用户访问我们的网站并且某些东西无法正常工作时(即负载平衡器认为我们的网站没有响应),它会将访问者发送到“维护”页面。维护页面将其被查看的记录记录到数据库中,并向访问者显示一条友好的消息。

这意味着我最终得到一个如下所示的值表:

ReportedOutage
-----------------------
2010-07-30 06:23:18.093
2010-07-30 06:23:18.623
2010-07-30 06:23:18.720
2010-08-02 14:28:07.123

理想情况下,我想运行报告并看到如下内容:

OutageStart              OutageEnd
-----------------------  -----------------------
2010-07-30 06:23:18.093  2010-07-30 06:23:18.720
2010-08-02 14:28:07.123  2010-08-02 14:28:07.123

由于日志中只有失败的记录,如何计算各种中断的时长?我可以从获取 开始MIN(Reported),但随后我必须找到该系列中的最后一条记录,以便在下一条记录之间有一个时间段。

关于如何做到这一点的任何想法?我意识到我可以创建一个流程来每分钟检查一次站点并记录中断和成功,这将使这更容易,但在我添加另一个步骤之前,我正在尝试使用我所拥有的东西。

4

2 回答 2

3

听起来您基本上需要猜测访问之间的某个最长时间。因此,如果您实际上每 10 天只有一次访问,那么该表中的所有内容都可能代表一次中断……但很可能并非如此。

所以猜测一个合理的值 - 例如 5 分钟(在 5 分钟内没有任何命中是不寻常的,并且在 5 分钟内发生两次单独的中断是不寻常的)。然后找到两个值之间的任何差距(当然按时间顺序排序),其中差距大于该时间间隔。这些记录将指示一次中断的结束和下一次中断的开始。

具体如何操作将取决于您的环境 - 我知道如何在 C# 中执行此操作,但我不会假设直接在 SQL 中尝试它,例如 :)

于 2010-08-02T21:54:01.230 回答
1

除非您有其他一些关于服务器被点击的频率的信息,否则您无法回答您试图回答的问题。

即使您拥有这些数据,对服务器中断进行严格分析也并非易事:

如果您有关于该站点在特定时间间隔内(例如周一早上 6 点到早上 7 点)历史上被访问的频率的信息,您可以使用泊松过程对服务器故障的概率进行建模,并将其拟合到该时间间隔的数据中。这将为您提供在该时间间隔内发生中断的可能性,并且如果您正确地模拟了中断的长度(或猜对了),您可以获得给定日期内所有中断的预期持续时间。

对于大多数应用程序,实现您在帖子中提到的检查过程会更简单、更准确。

于 2010-08-02T21:58:29.283 回答