2014-05-22 63 views
4

我在用mongo作爲數據庫編寫一個應用程序。我想打印連接到數據庫的客戶端,例如,打印他們的IP。我怎樣才能得到這些信息?如何在MongoDB中獲取連接的客戶端

我嘗試使用

db.serverStatus().connections 

但它給我的計算機數量可以訪問我的分貝。

回答

5

您可以使用db.currentOp(true)並使用client字段遍歷結果集的inprog數組。

4

您應該能夠運行這個命令並獲取連接的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); 
} 
0

這是一個有點哈克,但你實際上可以通過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 
相關問題