Quelle est la commande pour obtenir le nombre de clients connectés à un serveur MongoDB particulier?
Réponses:
connectez-vous à la base de données d'administration et exécutez db.serverStatus()
:
> var status = db.serverStatus()
> status.connections
{"current" : 21, "available" : 15979}
>
Vous pouvez directement obtenir en interrogeant
db.serverStatus().connections
Pour comprendre ce que signifie la db.serverStatus().connections
réponse de MongoDb , lisez la documentation ici .
Connexions
"connections" : { "current" : <num>, "available" : <num>, "totalCreated" : NumberLong(<num>) },
connexions Un document qui rend compte de l'état des connexions. Utilisez ces valeurs pour évaluer les exigences de charge et de capacité actuelles du serveur.
connections.current Le nombre de connexions entrantes des clients au serveur de base de données. Ce nombre inclut la session shell actuelle. Considérez la valeur des connexions disponibles pour ajouter plus de contexte à cette donnée.
La valeur inclut toutes les connexions entrantes, y compris toutes les connexions shell ou les connexions d'autres serveurs, telles que les membres du jeu de réplicas ou les instances mongos.
connections.available Le nombre de connexions entrantes inutilisées disponibles. Considérez cette valeur en combinaison avec la valeur de connections.current pour comprendre la charge de connexion sur la base de données et le document UNIX ulimit Settings pour plus d'informations sur les seuils système sur les connexions disponibles.
connections.totalCreated Nombre de toutes les connexions entrantes créées sur le serveur. Ce nombre comprend les connexions fermées depuis.
Nombre de connexions par ClientIP, avec total
Nous l'utilisons pour afficher le nombre de connexions par IPAddress avec un nombre total de connexions. Cela a été vraiment utile pour déboguer un problème ... il suffit d'y arriver avant d'atteindre le maximum de connexions!
Pour 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 })
Formaté:
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 }
)
Exemple de retour:
{
"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
}
(les adresses 192.xxx à la surveillance interne d'Atlas)
«Interne» sont des processus internes qui n'ont pas de client externe. Vous pouvez afficher une liste de ceux-ci avec ceci:
db.currentOp(true).inprog.filter(connection => !connection.client).map(connection => connection.desc);
E QUERY [js] TypeError: db.currentOp(...).inprog is undefined :
utilisant un utilisateur administrateur
db.currentOp(true)
?
{ "ok" : 0, "errmsg" : "Using $all for currentOp is disallowed in this atlas tier", "code" : 8000, "codeName" : "AtlasError" }
db.serverStatus()
ne donne pas de connexions ouvertes et disponibles mais ne montre pas les connexions à partir de quel client. Pour plus d'informations, vous pouvez utiliser cette commande sudo lsof | grep mongod | grep TCP
. J'en ai besoin lorsque j'ai fait la réplication et que le nœud principal a de nombreuses connexions client supérieures à celles du secondaire.
$ 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)
Cela montre que j'ai actuellement cinq connexions ouvertes au port MongoDB (27017) sur mon ordinateur. Dans mon cas, je me connecte à MongoDB à partir d'un serveur Scalatra et j'utilise le pilote MongoDB Casbah, mais vous verrez les mêmes connexions TCP lsof quel que soit le client utilisé (tant qu'elles se connectent en utilisant TCP / IP).
sudo lsof -i | grep mongod
J'ai essayé de voir toutes les connexions pour la base de données mongo en suivant la commande.
netstat -anp --tcp --udp | grep mongo
Cette commande peut afficher chaque connexion TCP pour mongodb plus en détail.
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
Sous OS X, voyez également les connexions directement sur l'interface réseau, faites simplement :
$ 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)
Pas besoin d 'utiliser grep
etc, utilisez simplement les lsof
arguments de.
Pour voir les connexions sur la CLI de MongoDb, voir la réponse de @ milan ( que je viens de modifier ).
Vous pouvez simplement utiliser
db.serverStatus().connections
De plus, cette fonction peut vous aider à repérer les adresses IP connectées à votre Mongo DB
db.currentOp(true).inprog.forEach(function(x) { print(x.client) })
Aussi quelques détails supplémentaires sur les connexions avec:
db.currentOp(true)
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}
Désolé car il s'agit d'un ancien message et il y a actuellement plus d'options qu'avant
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}}
] )
Exemple de sortie:
{ "_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 }
Connectez-vous avec votre instance mongodb à partir du système local
Il vous permettra de connaître tous les clients connectés et leurs détails
db.currentOp (vrai)
Vous pouvez également vérifier l'état de la connexion en vous connectant à Mongo Atlas , puis en accédant à votre cluster.