Verifique el número actual de conexiones a MongoDb

90

¿Cuál es el comando para obtener la cantidad de clientes conectados a un servidor MongoDB en particular?

DafaDil
fuente

Respuestas:

163

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

Milán
fuente
25

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);
SuperGoTeam
fuente
¿Podría explicar el significado de la IP "interna" en la lista de resultados?
carton.swing
No puedo ejecutar el ejemplo anterior en una instancia de mongo atlas: E QUERY [js] TypeError: db.currentOp(...).inprog is undefined :usando el usuario administrador
otong
@ carton.swing He actualizado la respuesta con explicación y comando para verlos.
SuperGoTeam
@otong, ¿por qué recibes solo db.currentOp(true)?
SuperGoTeam
Parece que es negado por Atlas mongodb: { "ok" : 0, "errmsg" : "Using $all for currentOp is disallowed in this atlas tier", "code" : 8000, "codeName" : "AtlasError" }
Otong
19

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

Hitesh Mundra
fuente
1
Este comando devuelve múltiples entradas para una sola conexión: stackoverflow.com/a/42930337/1843751
ignite
3
Sugiero usar la bandera -i para lsof. Entonces solo obtiene 1 entrada por cada conexión y no necesita grep para TCP. iesudo lsof -i | grep mongod
datdo
7

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   
Kyaw Min Jue L
fuente
7

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 grepetc, solo use los lsofargumentos de.

  • También vea las conexiones en la CLI de MongoDb, vea la respuesta de @ milan ( que acabo de editar ).

Inanc Gumus
fuente
7

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) })
nixsix6
fuente
1
Absolutamente hermoso, ¡gracias! Exactamente lo que estaba buscando.
ProsperousHeart
4

También algunos detalles más sobre las conexiones con: db.currentOp(true)

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

mitsos1os
fuente
He leído todas las respuestas y, de repente, esta es una de las más útiles. La consulta proporciona toneladas de detalles internos como debería, incluido el tiempo de conexión, la tabla actual, la versión del controlador y la plataforma, e incluso appName si se especifica
Dmitry Gusarov
2

Conéctese a MongoDB usando mongo-shell y ejecute el siguiente comando.

db.serverStatus().connections

p.ej:

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

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

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

    },
    "replicaSets" : {

    },
    "ok" : 1
}
arnav
fuente
Es muy interesante, también recibo valores CERO para esa solicitud, no es lo que quiero :) MongoMonitoringController : { "numClientConnections" : 0 , "numAScopedConnections" : 0 , "totalInUse" : 0 , "totalAvailable" : 0 , "totalCreated" : 0 , "totalRefreshing" : 0 , "pools" : { } , "hosts" : { } , "replicaSets" : { } , "ok" : 1.0}
Alex Efimov
2

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 }
JuanM
fuente
1

Conéctese con su instancia de mongodb desde el sistema local

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

Le permitirá conocer todos los clientes conectados y sus detalles.

  1. db.currentOp (verdadero)

Shree Prakash
fuente
0

Alternativamente, puede verificar el estado de la conexión iniciando sesión en Mongo Atlas y luego navegando a su clúster.

ingrese la descripción de la imagen aquí

localhost
fuente