我能够在 MongoDB 中看到查询,但我试图查看在 MongoDB 数据库上执行的写入操作没有成功。
我的应用程序代码中没有任何写入命令。然而,当我加载测试我的应用程序时,我在 mongostat 中看到一大堆写入。我不确定他们来自哪里。
除了记录写入(我无法做到)之外,还有其他方法可以用来确定这些写入的来源吗?
我能够在 MongoDB 中看到查询,但我试图查看在 MongoDB 数据库上执行的写入操作没有成功。
我的应用程序代码中没有任何写入命令。然而,当我加载测试我的应用程序时,我在 mongostat 中看到一大堆写入。我不确定他们来自哪里。
除了记录写入(我无法做到)之外,还有其他方法可以用来确定这些写入的来源吗?
你有几个我知道的选择:
a) 如果您怀疑写入将发送到特定数据库,您可以将分析级别设置为 2 以记录所有查询
use [database name]
db.setProfilingLevel(2)
...
// disable when done
db.setProfilingLevel(0)
b) 您可以使用 -v 以不同级别的 versbosity 启动数据库
-v [ --verbose ] be more verbose (include multiple times for more
verbosity e.g. -vvvvv)
c) 你可以使用mongosniff来嗅探端口
d) 如果您使用复制,您还可以检查 local.oplog.rs 集合
我已经尝试了 jeffl 的所有建议,其中一个能够向我展示写入内容:mongosniff。谢谢杰弗尔!
以下是我用来在我的 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
我制作了一个命令行工具来查看日志,并且在不需要其他客户端工具的情况下首先激活探查器活动:“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