Qual è il comando per ottenere il numero di client connessi a un particolare server MongoDB?
Risposte:
connettiti al database admin ed esegui db.serverStatus()
:
> var status = db.serverStatus()
> status.connections
{"current" : 21, "available" : 15979}
>
Puoi ottenere direttamente interrogando
db.serverStatus().connections
Per capire cosa significa la db.serverStatus().connections
risposta di MongoDb , leggi la documentazione qui .
collegamenti
"connections" : { "current" : <num>, "available" : <num>, "totalCreated" : NumberLong(<num>) },
connessioni Un documento che riporta lo stato delle connessioni. Utilizzare questi valori per valutare il carico corrente e i requisiti di capacità del server.
connections.current Il numero di connessioni in entrata dai client al server database. Questo numero include la sessione corrente della shell. Considera il valore delle connessioni disponibili per aggiungere più contesto a questo dato.
Il valore includerà tutte le connessioni in entrata, comprese eventuali connessioni shell o connessioni da altri server, come i membri del set di repliche o le istanze mongos.
connessioni disponibili Il numero di connessioni in entrata non utilizzate disponibili. Considerare questo valore in combinazione con il valore di connections.current per comprendere il carico di connessione sul database e il documento UNIX ulimit Settings per ulteriori informazioni sulle soglie di sistema sulle connessioni disponibili.
connections.totalCreated Conteggio di tutte le connessioni in entrata create al server. Questo numero include le connessioni che da allora sono state chiuse.
Conteggio connessioni per IP client, con totale
Usiamo questo per visualizzare il numero di connessioni da IPAddress con un conteggio totale delle connessioni. Questo è stato davvero utile per eseguire il debug di un problema ... basta arrivarci prima di raggiungere il massimo delle connessioni!
Per Mongo Shell:
db.currentOp(true).inprog.reduce((accumulator, connection) => { ipaddress = connection.client ? connection.client.split(":")[0] : "Internal"; accumulator[ipaddress] = (accumulator[ipaddress] || 0) + 1; accumulator["TOTAL_CONNECTION_COUNT"]++; return accumulator; }, { TOTAL_CONNECTION_COUNT: 0 })
Formattato:
db.currentOp(true).inprog.reduce(
(accumulator, connection) => {
ipaddress = connection.client ? connection.client.split(":")[0] : "Internal";
accumulator[ipaddress] = (accumulator[ipaddress] || 0) + 1;
accumulator["TOTAL_CONNECTION_COUNT"]++;
return accumulator;
},
{ TOTAL_CONNECTION_COUNT: 0 }
)
Ritorno di esempio:
{
"TOTAL_CONNECTION_COUNT" : 331,
"192.168.253.72" : 8,
"192.168.254.42" : 17,
"127.0.0.1" : 3,
"192.168.248.66" : 2,
"11.178.12.244" : 2,
"Internal" : 41,
"3.100.12.33" : 86,
"11.148.23.34" : 168,
"81.127.34.11" : 1,
"84.147.25.17" : 3
}
(gli indirizzi 192.xxx al monitoraggio interno Atlas)
"Interni" sono processi interni che non hanno un client esterno. Puoi visualizzare un elenco di questi con questo:
db.currentOp(true).inprog.filter(connection => !connection.client).map(connection => connection.desc);
E QUERY [js] TypeError: db.currentOp(...).inprog is undefined :
utilizzando l'utente amministratore
db.currentOp(true)
?
{ "ok" : 0, "errmsg" : "Using $all for currentOp is disallowed in this atlas tier", "code" : 8000, "codeName" : "AtlasError" }
db.serverStatus()
non fornisce alcuna connessione aperta e disponibile ma non mostra le connessioni da quale client. Per maggiori informazioni puoi usare questo comando sudo lsof | grep mongod | grep TCP
. Ne ho bisogno quando ho eseguito la replica e il nodo primario ha molte connessioni client maggiori del secondario.
$ sudo lsof | grep mongod | grep TCP
mongod 5733 Al 6u IPv4 0x08761278 0t0 TCP *:28017 (LISTEN)
mongod 5733 Al 7u IPv4 0x07c7eb98 0t0 TCP *:27017 (LISTEN)
mongod 5733 Al 9u IPv4 0x08761688 0t0 TCP 192.168.1.103:27017->192.168.1.103:64752 (ESTABLISHED)
mongod 5733 Al 12u IPv4 0x08761a98 0t0 TCP 192.168.1.103:27017->192.168.1.103:64754 (ESTABLISHED)
mongod 5733 Al 13u IPv4 0x095fa748 0t0 TCP 192.168.1.103:27017->192.168.1.103:64770 (ESTABLISHED)
mongod 5733 Al 14u IPv4 0x095f86c8 0t0 TCP 192.168.1.103:27017->192.168.1.103:64775 (ESTABLISHED)
mongod 5733 Al 17u IPv4 0x08764748 0t0 TCP 192.168.1.103:27017->192.168.1.103:64777 (ESTABLISHED)
Questo mostra che al momento ho cinque connessioni aperte alla porta MongoDB (27017) sul mio computer. Nel mio caso mi sto connettendo a MongoDB da un server Scalatra e sto usando il driver Casbah di MongoDB, ma vedrai lo stesso lsof connessioni TCP indipendentemente dal client utilizzato (purché si connettano usando TCP / IP).
sudo lsof -i | grep mongod
Puoi semplicemente usare
db.serverStatus().connections
Inoltre, questa funzione può aiutarti a individuare gli indirizzi IP collegati al tuo Mongo DB
db.currentOp(true).inprog.forEach(function(x) { print(x.client) })
Ho provato a vedere tutte le connessioni per il database mongo seguendo il comando.
netstat -anp --tcp --udp | grep mongo
Questo comando può mostrare ogni connessione tcp per mongodb in modo più dettagliato.
tcp 0 0 10.26.2.185:27017 10.26.2.1:2715 ESTABLISHED 1442/./mongod
tcp 0 0 10.26.2.185:27017 10.26.2.1:1702 ESTABLISHED 1442/./mongod
tcp 0 0 10.26.2.185:27017 10.26.2.185:39506 ESTABLISHED 1442/./mongod
tcp 0 0 10.26.2.185:27017 10.26.2.185:40021 ESTABLISHED 1442/./mongod
tcp 0 0 10.26.2.185:27017 10.26.2.185:39509 ESTABLISHED 1442/./mongod
tcp 0 0 10.26.2.185:27017 10.26.2.184:46062 ESTABLISHED 1442/./mongod
tcp 0 0 10.26.2.185:27017 10.26.2.184:46073 ESTABLISHED 1442/./mongod
tcp 0 0 10.26.2.185:27017 10.26.2.184:46074 ESTABLISHED 1442/./mongod
Anche in OS X vedi le connessioni direttamente sull'interfaccia di rete, basta fare :
$ lsof -n -i4TCP:27017
mongod 2191 inanc 7u IPv4 0xab6d9f844e21142f 0t0 TCP 127.0.0.1:27017 (LISTEN)
mongod 2191 inanc 33u IPv4 0xab6d9f84604cd757 0t0 TCP 127.0.0.1:27017->127.0.0.1:56078 (ESTABLISHED)
stores.te 18704 inanc 6u IPv4 0xab6d9f84604d404f 0t0 TCP 127.0.0.1:56078->127.0.0.1:27017 (ESTABLISHED)
Non c'è bisogno di usare grep
ecc., Usa solo gli lsof
argomenti di.
Per vedere le connessioni sulla CLI di MongoDb, vedere la risposta di @ milan ( che ho appena modificato ).
Inoltre qualche dettaglio in più sui collegamenti con:
db.currentOp(true)
Tratto da: https://jira.mongodb.org/browse/SERVER-5085
db.runCommand ({"connPoolStats": 1})
{
"numClientConnections" : 0,
"numAScopedConnections" : 0,
"totalInUse" : 0,
"totalAvailable" : 0,
"totalCreated" : 0,
"hosts" : {
},
"replicaSets" : {
},
"ok" : 1
}
MongoMonitoringController : { "numClientConnections" : 0 , "numAScopedConnections" : 0 , "totalInUse" : 0 , "totalAvailable" : 0 , "totalCreated" : 0 , "totalRefreshing" : 0 , "pools" : { } , "hosts" : { } , "replicaSets" : { } , "ok" : 1.0}
Siamo spiacenti perché questo è un vecchio post e attualmente ci sono più opzioni rispetto a prima.
db.getSiblingDB("admin").aggregate( [
{ $currentOp: { allUsers: true, idleConnections: true, idleSessions: true } }
,{$project:{
"_id":0
,client:{$arrayElemAt:[ {$split:["$client",":"]}, 0 ] }
,curr_active:{$cond:[{$eq:["$active",true]},1,0]}
,curr_inactive:{$cond:[{$eq:["$active",false]},1,0]}
}
}
,{$match:{client:{$ne: null}}}
,{$group:{_id:"$client",curr_active:{$sum:"$curr_active"},curr_inactive:{$sum:"$curr_inactive"},total:{$sum:1}}}
,{$sort:{total:-1}}
] )
Esempio di output:
{ "_id" : "xxx.xxx.xxx.78", "curr_active" : 0, "curr_inactive" : 1428, "total" : 1428 }
{ "_id" : "xxx.xxx.xxx.76", "curr_active" : 0, "curr_inactive" : 1428, "total" : 1428 }
{ "_id" : "xxx.xxx.xxx.73", "curr_active" : 0, "curr_inactive" : 1428, "total" : 1428 }
{ "_id" : "xxx.xxx.xxx.77", "curr_active" : 0, "curr_inactive" : 1428, "total" : 1428 }
{ "_id" : "xxx.xxx.xxx.74", "curr_active" : 0, "curr_inactive" : 1428, "total" : 1428 }
{ "_id" : "xxx.xxx.xxx.75", "curr_active" : 0, "curr_inactive" : 1428, "total" : 1428 }
{ "_id" : "xxx.xxx.xxx.58", "curr_active" : 0, "curr_inactive" : 510, "total" : 510 }
{ "_id" : "xxx.xxx.xxx.57", "curr_active" : 0, "curr_inactive" : 459, "total" : 459 }
{ "_id" : "xxx.xxx.xxx.55", "curr_active" : 0, "curr_inactive" : 459, "total" : 459 }
{ "_id" : "xxx.xxx.xxx.56", "curr_active" : 0, "curr_inactive" : 408, "total" : 408 }
{ "_id" : "xxx.xxx.xxx.47", "curr_active" : 1, "curr_inactive" : 11, "total" : 12 }
{ "_id" : "xxx.xxx.xxx.48", "curr_active" : 1, "curr_inactive" : 7, "total" : 8 }
{ "_id" : "xxx.xxx.xxx.51", "curr_active" : 0, "curr_inactive" : 8, "total" : 8 }
{ "_id" : "xxx.xxx.xxx.46", "curr_active" : 0, "curr_inactive" : 8, "total" : 8 }
{ "_id" : "xxx.xxx.xxx.52", "curr_active" : 0, "curr_inactive" : 6, "total" : 6 }
{ "_id" : "127.0.0.1", "curr_active" : 1, "curr_inactive" : 0, "total" : 1 }
{ "_id" : "xxx.xxx.xxx.3", "curr_active" : 0, "curr_inactive" : 1, "total" : 1 }
Connettiti con la tua istanza mongodb dal sistema locale
Ti farà conoscere tutti i client collegati e i loro dettagli
db.currentOp (true)
In alternativa puoi controllare lo stato della connessione accedendo a Mongo Atlas e quindi navigando nel tuo cluster.