监控上限集合的使用情况

时间:2013-10-08 18:14:30

标签: mongodb monitoring graphite capped-collections

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

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

我想做的是某种尺寸/费率监控,这样可以计算出邮件大小和费率的上限,我可以据此确定我的上限收藏的大小。

我打算设置一些监控工具,运行它一段时间来收集信息,然后对其进行分析,并确定我的上限集合的大小。当然,目标是保持它们足够小,以便不占用太多内存,但又大到可以使丢弃的消息不可能。

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

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

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

    关于如何将其与Graphite / Carbon集成的提示也很棒!

2 个答案:

答案 0 :(得分:1)

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

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

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

  4. 从技术角度来看,您可以专注于您想要衡量的其他事项。

答案 1 :(得分:0)

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

我最终建立了一个过程:

  1. 注册到我的mongodb中的所有消息传递上限集合(使用tailable-cursor查询),每个集合一个线程。
  2. 每个集合保留消息计数器X time_unit(时间单位为每10分钟,即每10分钟我启动一个新计数器,同时将所有旧计数器保留在内存中)
  3. 定期查询上限集合的统计信息(大小,文档数量和限制),并将所有这些数据保存在memroy中。
  4. 然后我让它跑了一个星期,并检查它的状态。通过这种方式,我设法在本周获得了非常好的活动图片。

    对于1.,我使用projection来保持它尽可能轻量级,只检索ID,并从中提取时间戳。

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