1

我正在使用 MongoDB 令人敬畏的上限集合 + 可尾游标在我的系统中的不同进程之间进行消息传递。对于不同类型的消息,我有许多这样的集合,文档以可变的速率和大小写入其中。每个集合,写入率可能会有很大差异,但应该很容易从过去/正在进行的操作中得出文档大小和速率的典型/保守上限。

此外,我有一个定期工作(每小时一次),它查询消息并将它们存档。归档所有消息非常重要,即在作业有机会归档它们之前不得丢弃它们。(归档的消息被写入文件。)

我想做的是某种大小/速率监控,这将允许确定消息大小和速率的上限,据此我可以决定我的封顶集合的合适大小。

我计划设置一些监控工具,运行一段时间以收集信息,然后对其进行分析,并为我的上限集合决定合适的大小。当然,目标是让它们足够小,以免占用太多内存,但又足够大,以使丢失消息的可能性不大。

这是我认为可以提供帮助的信息:

  1. 过去一小时内写入的消息数量和总大小(平均,随时间变化)
  2. 完成一个“完整周期”需要多长时间(平均而言,随着时间的推移)
  3. 是由 max-bytes 或 max-documents 限制的集合

查找此信息的最佳方法是什么,是否还有其他相关的统计数据?

关于如何将其与石墨/碳集成的提示也很棒!

4

2 回答 2

1
  1. 设置 StatsD-Graphite 堆栈并开始向其发送指标。

  2. 您要发送的信息可以通过任何可以通过 UDP 发送消息的语言发送。

  3. 所有常用语言都有语言绑定——PHP、Python、Ruby、C++、Java 等。所以这应该不是问题。

  4. 一旦你从技术角度做到了这一点,你就可以专注于你想要衡量的其他事情。

于 2013-10-25T05:36:37.677 回答
0

未能找到开箱即用的解决方案,并且在这里没有得到任何答案,这就是我最终做的事情

我最终建立了一个流程:

  1. 注册到我的 mongodb 中的所有消息传递上限集合(使用 tailable-cursor 查询),每个集合一个线程。
  2. 每个集合保持消息计数器 X time_unit (时间单位是每 10 分钟,即每 10 分钟我启动一个新计数器,同时将所有旧计数器保留在内存中)
  3. 定期查询封顶集合的统计信息(大小、文档数量和限制),并将所有这些数据保存在内存中。

然后我让它运行一个星期,并检查它的状态。通过这种方式,我设法很好地了解了这一周的活动。

对于 1.,我使用投影来使其尽可能轻量级,仅检索 ID,并从中提取时间戳。

3.中收集的数据用于确定集合是否受大小限制或文档数量限制。

于 2013-10-31T19:46:44.677 回答