我在用mongo作为数据库编写一个应用程序。我想打印连接到数据库的客户端,例如,打印他们的IP。我怎样才能得到这些信息?如何在MongoDB中获取连接的客户端
我尝试使用
db.serverStatus().connections
但它给我的计算机数量可以访问我的分贝。
我在用mongo作为数据库编写一个应用程序。我想打印连接到数据库的客户端,例如,打印他们的IP。我怎样才能得到这些信息?如何在MongoDB中获取连接的客户端
我尝试使用
db.serverStatus().connections
但它给我的计算机数量可以访问我的分贝。
您可以使用db.currentOp(true)
并使用client
字段遍历结果集的inprog
数组。
您应该能够运行这个命令并获取连接的IP地址的列表:
db.currentOp(true).inprog.forEach(function(d){if (d.client)printjson(d.client)})
db.currentOp实际上是建立在专门收集$ cmd.sys.inprog的顶部,这样你也可以直接查询。你可以得到的一个想法如何通过不使用括号中输入db.currentOp进入蒙戈外壳做到这一点,它会打印出源的功能:
> db.currentOp
function (arg){
var q = {}
if (arg) {
if (typeof(arg) == "object")
Object.extend(q , arg);
else if (arg)
q["$all"] = true;
}
return this.$cmd.sys.inprog.findOne(q);
}
这是一个有点哈克,但你实际上可以通过netstat
得到这个,即使没有连接到数据库。这将在数据库服务器上的(bash)shell脚本中完成。实际上,在我的登录脚本(〜/ .bash_profile)中有这个,这样我就可以很容易地找到到MongoDB和运行在TCP上的任何其他服务的网络连接。
首先,你会在shell中运行它,它定义了一个函数。
function whoIsConnectedToPort() {
PORT=$1
netstat -an | grep ":${PORT}.*ESTAB" | awk '{print $4":"$5}' | cut -d: -f2- | grep "^${PORT}:" | cut -d: -f2 | grep -v '^127' | sort | uniq | xargs -n1 nslookup | grep 'name =' | awk {'print $NF'} | sed 's/.$//' | sort | uniq
}
然后调用函数。
whoIsConnectedToPort 27017
这应该返回连接到给定端口的主机列表。
您可以将其重用到其他熟悉的端口。试试例如:
whoIsConnectedToPort 22
whoIsConnectedToPort 3306
whoIsConnectedToPort 1521