如何在MongoDB中获取连接的客户端

时间:2014-05-22 13:27:24

标签: mongodb database

我正在使用mongo编写应用程序作为其数据库。我想打印连接到db的客户端,例如,打印他们的ip。我怎样才能获得这些信息?

我尝试使用

db.serverStatus().connections

但是它给了我可以访问我的数据库的计算机数量。

3 个答案:

答案 0 :(得分:12)

您应该能够运行此命令并获取已连接IP地址的列表:

db.currentOp(true).inprog.forEach(function(d){if (d.client)printjson(d.client)})

db.currentOp实际上是在特殊集合$ cmd.sys.inprog之上构建的,因此您也可以直接查询它。您可以通过在没有括号的db.currentOp中键入mongo shell来了解如何执行此操作,它将打印出该函数的源代码:

> 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 );
}

答案 1 :(得分:8)

您可以使用db.currentOp(true)并使用inprog字段迭代结果集的client数组。

答案 2 :(得分:0)

这有点hacky,但你实际上可以通过netstat得到这个,即使没有连接到数据库。这将在DB服务器上的(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