监控日志数据的类架构

时间:2013-06-12 07:13:29

标签: c# javascript asp.net database

我有一个工作的实时监控程序,但它的类架构太复杂了。这真的让我很烦恼。首先让我解释一下该计划。

用户互动

这是一个具有用户交互的监控程序。这意味着,用户可以根据用户的决定选择不同的维度,不同的指标,包含它们,排除它们或将它们分组,以及每次实时图表更改。

来自数据库的示例日志数据

Req Success OrderFunction 5 60ms WebServer2
Req Failed  OrderFunction 2 176ms WebServer5
Resp Success SuggestFunction 8 45ms WebServer2

转化

所以每一行都很重要。它必须像这样在客户端。因为用户可以选择查看成功的OrderFunctions或WebServer2上的所有函数或所有失败的请求等。我需要这些列之间的所有关系来执行这些操作。

另一件事是这些是来自数据库的值。我还查找了这些值,这些值包含用户需要查看的Text。就像Req是Request,Resp就是响应。

我知道你可以把这个问题视为一般问题。但我正试图找到一种方法。可能是这种类架构在业界有一个名字。我只是在这里寻求一些建议,让我以正确的方式引导我。

非常感谢

1 个答案:

答案 0 :(得分:1)

每3分钟记录15k次,听起来很像我以前在数据中心看到的网络监控应用程序(snmp在这种环境中会非常嘈杂)。我们要做的是确定我们需要多少数据,多长时间,多少粒度,以及该信息用于确定使用何种类型的汇总策略 - 以及我们愿意使用多少存储空间抛出问题。使用汇总策略,您可以通过合并列来结合时间行,确保数据库的大小存在有限的限制。

现在可能有更新的工具,但我过去常常使用RRD(http://oss.oetiker.ch/rrdtool/)和BerkeleyDB来解决这些类型的监控问题。您也可以利用一些软件重复数据删除技术,这种方法只需要根据列内容的性质,如果发现某行与前一行类似,则只更新计数。我们过去常常这样做是为了防止事件风暴泛滥NOC屏幕并导致技术人员错过重要事件。顺便说一句,我会留下这个作为评论,但stackoverflow做了这个声誉的东西阻止了我,我刚刚开始在这里回答问题。

为了更完整,以您的数据为例:

Req Success OrderFunction 5 60ms WebServer2
Req Failed  OrderFunction 2 176ms WebServer5
Resp Success SuggestFunction 8 45ms WebServer2

我假设Req / Resp是唯一的两个值 - 对应于请求和响应?如果是这种情况,请将该列二进制,1位 - 无论是否是请求。第二列,成功/失败 - 听起来像1位或最差三元,2位字段。可能会枚举函数(OrderFunction,SuggestFunction等) - 或者如果您在此处执行重复数据删除,则可以将其设置为位掩码。您也可以将一个外键用于连接表。在枚举选项中,假设您有少于256个但超过128个,请使用一个字节。如果您可以在重复数据删除解决方案中将它们汇总以便保存行,特别是当它们快速进入时,并且您有256个选项,那么您的位掩码需要多少位,除非它是不需要表示每个排列的情况,在这种情况下,计算最大排列数,这是重映射正确汇总的位掩码中的位数。下一列有5,2和8,我不确定它代表什么,某种整数或者只是一个字节?可以表示毫秒,具体取决于您的SQL方言和您希望需要表示的最大毫秒数,使用int或无符号短路,或者可能只是短路(基本上约为32.7秒)。如果使用short或unsigned short,只需确保超出max的值表示为应用程序逻辑中的max,而不是零。最后一列看起来像一个表示服务器的字符串,因此这可能是一个用于帮助指导重复数据删除或汇总的列。所以你可以把它变成外键。

无论如何,RRD曾经非常好,但是我已经用了近十几年了 - 我把它拿回去了,我已经十几年没用过RRD了:)。对于这类事情,我确信BerkeleyDB仍然是一个很好的数据库 - 所以看看像他们这样的工具和工具,我相信它会有一个很好的解决方案。

希望有所帮助!