Vérifiez le nombre actuel de connexions à MongoDb

90

Quelle est la commande pour obtenir le nombre de clients connectés à un serveur MongoDB particulier?

DafaDil
la source

Réponses:

163

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().connectionsré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.

Milan
la source
25

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);
SuperGoTeam
la source
Pouvez-vous expliquer la signification de l'adresse IP "interne" dans la liste de retour?
carton.swing
Je ne peux pas exécuter l'exemple ci-dessus sur une instance de mongo atlas: en E QUERY [js] TypeError: db.currentOp(...).inprog is undefined :utilisant un utilisateur administrateur
otong
@ carton.swing J'ai mis à jour la réponse avec des explications et une commande pour les afficher.
SuperGoTeam
@otong, qu'est-ce que tu récupères juste db.currentOp(true)?
SuperGoTeam
On dirait que c'est refusé par l'atlas { "ok" : 0, "errmsg" : "Using $all for currentOp is disallowed in this atlas tier", "code" : 8000, "codeName" : "AtlasError" }
mongodb
19

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).

Hitesh Mundra
la source
1
Cette commande renvoie plusieurs entrées pour une seule connexion: stackoverflow.com/a/42930337/1843751
enflammer
3
Je suggère d'utiliser l'option -i pour lsof. Ensuite, vous n'obtenez qu'une seule entrée par connexion et vous n'avez pas besoin de grep pour TCP. iesudo lsof -i | grep mongod
datdo
7

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   
Kyaw Min Thu L
la source
7

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 grepetc, utilisez simplement les lsofarguments de.

  • Pour voir les connexions sur la CLI de MongoDb, voir la réponse de @ milan ( que je viens de modifier ).

Inanc Gumus
la source
7

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) })
nixsix6
la source
1
Absolument magnifique - merci! Exactement ce que je cherchais.
ProsperousHeart
4

Aussi quelques détails supplémentaires sur les connexions avec: db.currentOp(true)

Tiré de: https://jira.mongodb.org/browse/SERVER-5085

mitsos1os
la source
J'ai lu toutes les réponses et tout à coup - c'est l'une des plus utiles. La requête donne des tonnes de détails internes comme il se doit, y compris l'heure de connexion, la table actuelle, la version du pilote et la plate-forme, et même appName si spécifié
Dmitry Gusarov
2

Connectez-vous à MongoDB à l'aide de mongo-shell et exécutez la commande suivante.

db.serverStatus().connections

par exemple:

mongo> db.serverStatus().connections
{ "current" : 3, "available" : 816, "totalCreated" : NumberLong(1270) }
Thushan
la source
2

db.runCommand ({"connPoolStats": 1})

{
    "numClientConnections" : 0,
    "numAScopedConnections" : 0,
    "totalInUse" : 0,
    "totalAvailable" : 0,
    "totalCreated" : 0,
    "hosts" : {

    },
    "replicaSets" : {

    },
    "ok" : 1
}
Arnav
la source
C'est assez intéressant, je reçois également des valeurs ZERO pour cette demande, ce n'est pas ce que je veux :) MongoMonitoringController : { "numClientConnections" : 0 , "numAScopedConnections" : 0 , "totalInUse" : 0 , "totalAvailable" : 0 , "totalCreated" : 0 , "totalRefreshing" : 0 , "pools" : { } , "hosts" : { } , "replicaSets" : { } , "ok" : 1.0}
Alex Efimov
2

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 }
JuanM
la source
1

Connectez-vous avec votre instance mongodb à partir du système local

  1. sudo mongo "mongodb: // MONGO_HOST_IP: 27017" --authenticationDatabase admin

Il vous permettra de connaître tous les clients connectés et leurs détails

  1. db.currentOp (vrai)

Shree Prakash
la source
0

Vous pouvez également vérifier l'état de la connexion en vous connectant à Mongo Atlas , puis en accédant à votre cluster.

entrez la description de l'image ici

localhost
la source