2010-08-02 47 views
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)开始,但是我必须找到系列中的最后一条记录,以便在下一条记录之间有一段时间。

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

+0

您正在使用哪些DBMS--以及中断时隙中的多少构成“新的中断”? – 2010-08-02 21:56:03

+0

我正在使用T-SQL,但我对这种方法更感兴趣。现在我又看了一遍,看起来很简单,因为我会在两次通知之间选择一段时间,我会考虑“返回在线”并从那里开始。 – SqlRyan 2010-08-02 21:59:05

回答

3

这听起来像你基本上需要猜测访问之间的一些最大时间。因此,如果您实际上每10天只有一次访问,那么表中的所有内容都可能代表一次中断......但很可能它没有。

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

你到底如何做到这一点,将取决于你的环境 - 我知道我怎么会做它在C#中,但我不会冒昧地尝试在直SQL,例如:)

+0

进一步思考,我的问题是我是否必须遍历整个列表(可能会变长),并决定每个值是否构成中断的开始/中间/结束,听起来就像我会。谢谢你的帮助。 – SqlRyan 2010-08-02 22:00:21

1

除非你有关于服务器多久访问一次的其他一些信息,您无法回答您尝试回答的问题。

即使你有一个数据,服务器停机的严格分析,也不是那么容易:

如果您有多久的网站已经在一定的时间间隔在历史上创下的信息(比如6 am-7am在周一),您可以使用泊松过程对服务器故障的概率进行建模,并将其适用于该时间段的数据。那会给你在该时间间隔内发生停电的可能性,并且如果你正确模拟了停电的长度(或者猜测得很好),那么可以在给定的一天中得到所有停电的预计持续时间。

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

+0

该网站针对的是主要ISP,因此访问间隔时间并不是一件值得关注的事情 - 大部分时间都不到一秒钟,尽管可能在一夜之间分钟。我可能最终走在名单上,并为我所拥有的每个价值决定它是否与停电的开始/结束有很大关系。谢谢! – SqlRyan 2010-08-02 22:02:40

相关问题