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?

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.


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

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


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   

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


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

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


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

2

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

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

    },
    "replicaSets" : {

    },
    "ok" : 1
}

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 }

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)


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í

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.