我能够在MongoDB中看到查询,但是我试图看看在MongoDB数据库上执行了哪些写操作而没有成功。
我的应用程序代码中没有任何写入命令。然而,当我加载测试我的应用程序时,我在mongostat中看到了一大堆写入。我不确定他们来自哪里。
除了记录写入(我无法做到)之外,还有其他方法可以用来确定这些写入的来源吗?
答案 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)"
中的文档和安装说明