通过数据库获取opcounters

Get opcounters by database

我有一个看起来像这样的监控脚本

client = pymongo.MongoClient()
for database in client.database_names():
    iterator = client[database].command({"serverStatus":1})["opcounters"].iteritems()
    for key, value in iterator:
        log(key, data=value, database=database)

这对我所有的对手来说都是相同的结果。查看我的图表,我得到这样的数据:

opcounters.command_per_second on test_database: 53.32K
opcounters.command_per_second on log_database: 53.32K

显然,"serverStatus" 表示整个服务器,而不仅仅是数据库。

是否可以获取每个数据库的操作计数器?

没有针对每个数据库的操作计数,至少对于 v2.8.0 或更早版本是这样。 serverStats 中使用的操作计数器结构是全局结构。每个新计数的记录都没有涉及哪个数据库或集合的上下文。

顺便说一下,collStats 命令根本没有操作统计信息,因此也无法通过聚合计算数据库的总操作数。

MongoDB 问题跟踪器中有一个开放的功能请求,您可以 watch/upvote:SERVER-2178: Track stats per db/collection