如何查看MongoDB的所有写入日志

时间:2013-09-06 17:47:04

标签: mongodb

我能够在MongoDB中看到查询,但是我试图看看在MongoDB数据库上执行了哪些写操作而没有成功。

我的应用程序代码中没有任何写入命令。然而,当我加载测试我的应用程序时,我在mongostat中看到了一大堆写入。我不确定他们来自哪里。

除了记录写入(我无法做到)之外,还有其他方法可以用来确定这些写入的来源吗?

3 个答案:

答案 0 :(得分:4)

您有几个我知道的选项:

a)如果您怀疑写入是针对特定数据库,则可以将分析级别设置为2以记录所有查询

use [database name]
db.setProfilingLevel(2)
...
// disable when done
db.setProfilingLevel(0) 

b)您可以使用-v

启动具有各种级别的数据库的数据库
  -v [ --verbose ]            be more verbose (include multiple times for more
                              verbosity e.g. -vvvvv)

c)您可以使用mongosniff来嗅探端口

d)如果您正在使用复制,您还可以检查local.oplog.rs集合

答案 1 :(得分:2)

我已经尝试了所有jeffl的建议,其中一个能够向我展示写作:mongosniff。谢谢jeffl!

以下是我用来在我的Ubuntu 10机器上安装mongosniff的命令,以防其他人认为这有用:

git clone git://github.com/mongodb/mongo.git
cd mongo
git checkout r2.4.6
apt-get install scons libpcap-dev g++
scons mongosniff
build/linux2/normal/mongo/mongosniff --source NET lo 27017

答案 2 :(得分:1)

我制作了一个命令行工具来查看日志,并且首先激活了探查器活动,而无需其他客户端工具:" mongotail"

要将日志分析激活到级别2:

mongotail databasename -l 2

然后显示最新的10个查询:

mongotail databasename

此外,您可以使用带-f选项的工具查看"实时" 中的更改。

mongotail databasename -f

最后,使用egrep过滤结果以查找特定操作,例如只显示写操作:

mongotail databasename -f | egrep "(INSERT|UPDATE|REMOVE)"

请参阅:https://github.com/mrsarm/mongotail

中的文档和安装说明