我在用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