这个问题既简单又基本。如何将所有查询记录在mongodb中的“尾部”日志文件中?

我试过:

设置概要级别 设置启动慢ms参数 使用-vv选项Mongod

/var/log/mongodb/mongodb.log一直显示当前活动连接的数量…


当前回答

我建议你看看mongosniff。这个工具可以做任何你想做的事情,甚至更多。特别是它可以帮助诊断大规模mongo系统的问题,以及查询是如何路由的以及它们来自哪里,因为它是通过监听您的网络接口进行所有与mongo相关的通信来工作的。

http://docs.mongodb.org/v2.2/reference/mongosniff/

其他回答

如果您希望查询被记录到mongodb日志文件,您必须同时设置这两个 日志级别和分析,例如:

db.setLogLevel(1)
db.setProfilingLevel(2)

(参见https://docs.mongodb.com/manual/reference/method/db.setLogLevel)

只设置概要不会将查询记录到文件中,因此您只能从

db.system.profile.find().pretty()

尝试这个包来跟踪所有查询(没有oplog操作):https://www.npmjs.com/package/mongo-tail-queries

(免责声明:我写这个包正是为了这个需要)

我认为oplog虽然不够优雅,但可以部分地用于这个目的:它记录所有的写操作——但不记录读操作……

如果我没猜错的话,你必须马上启用复制。信息来自这个问题的答案:如何监听MongoDB集合的更改?

将profilinglevel设置为2是记录所有查询的另一个选项。

您可以记录所有查询:

$ mongo
MongoDB shell version: 2.4.9
connecting to: test
> use myDb
switched to db myDb
> db.getProfilingLevel()
0
> db.setProfilingLevel(2)
{ "was" : 0, "slowms" : 1, "ok" : 1 }
> db.getProfilingLevel()
2
> db.system.profile.find().pretty()

来源:http://docs.mongodb.org/manual/reference/method/db.setProfilingLevel/

db.setProfilingLevel(2)表示“记录所有操作”。