¿Cuál es el comando para obtener la cantidad de clientes conectados a un servidor MongoDB en particular?
Respuestas:
conéctese a la base de datos de administración y ejecute db.serverStatus()
:
> var status = db.serverStatus()
> status.connections
{"current" : 21, "available" : 15979}
>
Puede obtener directamente consultando
db.serverStatus().connections
Para comprender qué significa la db.serverStatus().connections
respuesta de MongoDb , lea la documentación aquí .
conexiones
"connections" : { "current" : <num>, "available" : <num>, "totalCreated" : NumberLong(<num>) },
conexiones Un documento que informa sobre el estado de las conexiones. Utilice estos valores para evaluar la carga actual y los requisitos de capacidad del servidor.
connections.current El número de conexiones entrantes de los clientes al servidor de la base de datos. Este número incluye la sesión de shell actual. Considere el valor de las conexiones disponibles para agregar más contexto a este dato.
El valor incluirá todas las conexiones entrantes, incluidas las conexiones de shell o las conexiones de otros servidores, como miembros del conjunto de réplicas o instancias de mongos.
connections.available La cantidad de conexiones entrantes no utilizadas disponibles. Considere este valor en combinación con el valor de connections.current para comprender la carga de conexión en la base de datos, y el documento de configuración ulimit de UNIX para obtener más información sobre los umbrales del sistema en las conexiones disponibles.
connections.totalCreated Recuento de todas las conexiones entrantes creadas al servidor. Este número incluye conexiones que se han cerrado desde entonces.
Número de conexiones por ClientIP, con total
Usamos esto para ver el número de conexiones por dirección IP con un recuento total de conexiones. Esto fue realmente útil para depurar un problema ... ¡solo llegue antes de alcanzar el número máximo de conexiones!
Para 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 })
Formateado:
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 }
)
Devolución de ejemplo:
{
"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
}
(las direcciones 192.xxx en el monitoreo interno de Atlas)
"Internos" son procesos internos que no tienen un cliente externo. Puede ver una lista de estos con esto:
db.currentOp(true).inprog.filter(connection => !connection.client).map(connection => connection.desc);
E QUERY [js] TypeError: db.currentOp(...).inprog is undefined :
usando el usuario administrador
db.currentOp(true)
?
{ "ok" : 0, "errmsg" : "Using $all for currentOp is disallowed in this atlas tier", "code" : 8000, "codeName" : "AtlasError" }
db.serverStatus()
no da ninguna de las conexiones abiertas y disponibles, pero no muestra las conexiones desde qué cliente. Para obtener más información, puede utilizar este comando sudo lsof | grep mongod | grep TCP
. Lo necesito cuando hice la replicación y el nodo primario tiene muchas conexiones de cliente mayores que las secundarias.
$ 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)
Esto muestra que actualmente tengo cinco conexiones abiertas al puerto MongoDB (27017) en mi computadora. En mi caso, me estoy conectando a MongoDB desde un servidor Scalatra, y estoy usando el controlador Casbah de MongoDB, pero verá las mismas conexiones lsof TCP independientemente del cliente utilizado (siempre que se conecten usando TCP / IP).
sudo lsof -i | grep mongod
Traté de ver todas las conexiones para la base de datos mongo siguiendo el comando.
netstat -anp --tcp --udp | grep mongo
Este comando puede mostrar cada conexión tcp para mongodb con más detalle.
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
En OS X, también vea las conexiones directamente en la interfaz de red, simplemente haga :
$ 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)
No es necesario usar grep
etc, solo use los lsof
argumentos de.
También vea las conexiones en la CLI de MongoDb, vea la respuesta de @ milan ( que acabo de editar ).
Puedes usar
db.serverStatus().connections
Además, esta función puede ayudarlo a detectar las direcciones IP conectadas a su Mongo DB
db.currentOp(true).inprog.forEach(function(x) { print(x.client) })
También algunos detalles más sobre las conexiones con:
db.currentOp(true)
Tomado de: 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}
Lo siento porque esta es una publicación antigua y actualmente hay más opciones que antes.
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}}
] )
Ejemplo de salida:
{ "_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 }
Conéctese con su instancia de mongodb desde el sistema local
Le permitirá conocer todos los clientes conectados y sus detalles.
db.currentOp (verdadero)
Alternativamente, puede verificar el estado de la conexión iniciando sesión en Mongo Atlas y luego navegando a su clúster.