Xel*_*lom 5 javascript c# database asp.net
我有一个工作的实时监控程序,但它的类架构太复杂了.这真的让我很烦恼.首先让我解释一下这个程序.
用户交互
这是一个具有用户交互的监控程序.这意味着,用户可以根据用户的决定选择不同的维度,不同的指标,包含它们,排除它们或将它们分组,以及每次实时图表更改.
来自DB的示例日志数据
Req Success OrderFunction 5 60ms WebServer2
Req Failed OrderFunction 2 176ms WebServer5
Resp Success SuggestFunction 8 45ms WebServer2
Run Code Online (Sandbox Code Playgroud)
转换
所以每一行都很重要.它必须像这样在客户端.因为用户可以选择查看成功的OrderFunctions或WebServer2上的所有功能或所有失败的请求等.我需要这些列之间的所有关系来执行这些操作.
另一件事是这些是来自数据库的值.我还查找了这些值,这些值包含用户需要查看的Text.像Req是Request,Resp是Response.
我知道你可以把这个问题视为一般问题.但我正试图找到一种方法.可能是这种类架构在业界有一个名字.我只是在这里寻求一些建议,以正确的方式引导我.
非常感谢
每 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
Run Code Online (Sandbox Code Playgroud)
我假设 Req/Resp 是唯一的两个值 - 对应于请求和响应?如果是这种情况,请将该列设为二进制,1 位 - 无论它是否是请求。第二列,成功/失败 - 听起来像 1 位或最坏的三元 2 位字段。函数(OrderFunction、SuggestFunction 等)可能可以被枚举 - 或者如果您在这里进行重复数据删除,您可以将其设置为位掩码。您也可以在连接表中使用外键。在枚举选项中,假设少于 256 个但超过 128 个,则使用一个字节。如果您可能将它们汇总在事件重复数据删除解决方案中以保存行,特别是当它们像这样快速进入时,并且您有 256 个选项,那么您的位掩码就需要那么多位,除非它是不需要表示每个排列的情况,在这种情况下,请计算出排列的最大数量,即位掩码中用于正确汇总重复数据删除的位数。下一列有 5,2 和 8,我不确定它代表什么,是某种整数还是只是一个字节?毫秒可以用 int 或无符号短整型,或者只是短整型(基本上约为 32.7 秒)来表示,具体取决于您的 SQL 方言和您期望需要表示的最大毫秒数。如果您使用短整型或无符号短整型,只需确保在应用程序逻辑中超出最大值的值表示为最大值,而不是零。最后一列看起来像代表您的服务器的字符串,因此您可能会使用该列来帮助指导重复数据删除或汇总。所以你也许可以将其设为外键。
不管怎样,RRD 曾经非常好,但我已经有近十几年没有使用过它了——我收回这句话,我已经有十几年没有使用过 RRD 了:)。我确信 BerkeleyDB 对于此类事情仍然是一个很好的数据库 - 所以检查一下那些工具和类似的工具,我确信从中会得出一个很好的解决方案。
希望有帮助!
| 归档时间: |
|
| 查看次数: |
234 次 |
| 最近记录: |